欧拉函数:
=n(p1−1p1)(p2−1p2)⋅⋅⋅(p3−1p3)
定义:整数从1到n中有多少个数与n互质
m=n;k=n;
r=sqrt(n);
for (int i=1;i*i<=r;i++){//k即为φ(n)
if (!(m%i)) k=k/i*(i-1);
while (!(m%i)) m=m/i;
}
if (m!=1) k=k/m*(m-1);//m可能没有约完,但m定为质数
容斥原理:先允许再排斥
如找从1到100中是2、3、5的倍数的数的个数
ans=(1002)+(1003)+(1005)−(1006)−(10010)−(10015)+(10030)
先找是2、3、5的倍数的数,发现多加了是6,10,15的倍数的个数,然后再减去是6,10,15的倍数的个数发现减多了,再加上是30的倍数的个数