筛法求欧拉函数板子

欧拉函数:phi[n]:[1,n]与n互质(gcd=1)的数的个数

欧拉函数性质:
1.若n为质数,则phi[n]=n-1
2.若n为质数,则phi[nk]=(n-1)(n(k-1))
3.积性函数:phi[nxm]=phi[n]xphi[m]

以下为O(n)复杂度求欧拉函数板子

vector<int>prime;
int vis[maxn];
int phi[maxn];
void get_phi(int n){
	phi[1]=1;
	for(int i=2;i<=n;i++){
		if(!vis[i]){
			prime.pb(i);
			phi[i]=i-1;
		}
		for(int j=0;i*prime[j]<=n;j++){
			int m=i*prime[j];
			vis[m]=1;
			if(i%prime[j]==0){
				phi[m]=prime[j]*phi[i];
				//i能被prime[j]整除 
				break;
			}
			else{
				phi[m]=(prime[j]-1)*phi[i]; 
				//i不能被prime[j]整除 
			}
		}
	}
}
posted @ 2025-04-09 19:02  Marinaco  阅读(21)  评论(0)    收藏  举报
//雪花飘落效果