浅谈欧拉函数
基本概念
表示不超过
且与
互质的数的个数,可以很容易推导得:
其中 为
的所有质因数
它有几个性质:
这样我们就可以线性筛了
int prime[N], phi[N], vis[N], sz;
void get_phi(){
vis[1] = 1; phi[1] = 1; //性质1
for(int i = 2; i < N; i ++){
if(!vis[i]){
prime[++ sz] = i;
phi[i] = i - 1; // 性质2
}
for(int j = 1; j <= sz && prime[j] * i < N; j ++){
vis[prime[j] * i] = 1;
if(i % prime[j] == 0){
phi[i * prime[j]] = phi[i] * prime[j]; //性质4(不会告诉你还有若a为质数,b mod a=0,phi[a*b]=phi[b]*a
break;
}
phi[i * prime[j]] = phi[i] * (prime[j] - 1); // 性质3 因为 phi[prime[j]] = prime[j] - 1
}
}
}
好了,做道练习题入门吧
https://www.luogu.org/problemnew/show/UVA11426
题解:https://blog.csdn.net/qq_38944163/article/details/83756739