莫比烏斯函式模版
阿新 • • 發佈:2018-12-10
//莫比烏斯打表(phi可以刪除)
//phi--尤拉函式表 miu--莫比烏斯函式表 fac--i最大的素因子輔助打phi表
int phi[maxn],miu[maxn],fac[maxn]; ll f[maxn], F[maxn]; void init() { for (int i = 1; i < maxn; ++i) fac[i] = i; phi[1] = miu[1] = 1; for (int i = 2; i < maxn; ++i) { if (fac[i] == i) for (int j = i << 1; j < maxn; j += i) fac[j] = i; if (i / fac[i] % fac[i]) phi[i] = (fac[i] - 1)*phi[i / fac[i]], miu[i] = -miu[i / fac[i]]; //如果b質數 a%b!=0 phi(a*b) = phi(a)*b - phi(a) else phi[i] = fac[i] * phi[i / fac[i]], miu[i] = 0; //當b是質數,a%b==0,phi(a*b)=phi(a)*b } }
//求一個數的尤拉函式值--複雜度n^1/2
int miu(ll n){
int prime = 1;
int flag = 0;
for (int i = 2; i*i <= n; i++) {
if (n%i == 0) {
prime++;
n /= i;
if (n%i == 0) {
flag = 1;
break;
}
}
}
if (flag)
return 0;
if (prime % 2)return -1;
else return 1;
}