欧拉函数

xiaoxiao2021-02-28  26

欧拉函数 求小于等于n的数中与n互质的数的数目

求单个:复杂度O(√n)

int phi(int x){ int ans = x; for(int i = 2; i*i <= x; i++){ if(x % i == 0){ ans = ans / i * (i-1); while(x % i == 0){ x /= i; } } } if(x > 1) ans = ans / x * (x-1); return ans; }

求多个,类似于埃筛

int phi[maxn]; void Oula() { phi[1]=1; for(int i=2;i<maxn;i++){ if(!phi[i]){ for(int j=i;j<maxn;j+=i){ if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } }

转载请注明原文地址: https://www.6miu.com/read-2619756.html

最新回复(0)