关键词:统计n个数种与x互素/不互素的个数
解决方案:通过对x素因子分解,得到不同素因子p1,p2...pk,问题转化为n个数中不被p1,p2...pk中任何一个数整除(与x互素)/至少被p1,p2...pk中一个数整除(与x不互素)的个数
心得:通过素因子分解将互素问题转化为整除问题(利用素数非整除即互素的性质)
题意:求n个数中两两不互素或两两互素的三元组数目
称满足上述性质的三元组为P三元组
解决非P三元组的计数问题有两种方法。
法一:先求出数组中与每个a[i]互素的个数f[i],这个最后再求。假设f[i]已知,我们用正难则反的思路求P三元组数目。任意一个非P三元组都既存在互素,又存在不互素的数对,因此我们可以对每个a[i],从数组中找出与a[i]互素和不互素的数各一个,这样就构成了一个非P三元组,而每个非P三元组仅对应两个a[i]选择,因此ans=sum{ f[i]*(n-1-f[i])/2,1<=i<=n }
C(n,3)-ans即为最终结果
法二:既然想到了正难则反的思路,不免要想到用容斥原理。设非P三元组的三个数为a1,a2,a3,Uij表示ai和aj不互素,则非P三元组的个数是:|U12∪U23∪U31|=|U12|+|U23|+|U31|-|U12∩U23|-|U23∩U31|-|U31∩U12|.其中|Uij|=sum{ f[i]*(n-2)*3, 1<=i<=n } |Uij∩Ujk|=sum{ C(f[i],2)*3,1<=i<=n },在上述计算中三元组视为有序,因此最后还要除以3!