φ(n)表示小于n的正整数与n互质数的个数
第一种情况:如果n=1, φ(1) = 1
第二种情况:如果n是质数,φ(n) = n -1;
第三种情况:如果n是质数的某个次方 =
第四种情况:如果n两个互质数的乘积
第五种情况:如果n任意大于1的整数
int phi(int n){
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
const int MAXN = 1e6+5;
bool flag[MAXN];
int phi[MAXN];
int p[MAXN];
int cnt ;
void Get_phi(int m){
cnt = 0;
memset(flag, true, sizeof(flag));
phi[1] = 1ll;
for(D i=2ll; i<=m; i++) {
if(flag[i]) {
p[++cnt] = i;
phi[i] = i-1ll;
}
for(D j=1; j<=cnt&&i*p[j]<=m; j++){
flag[i*p[j]] = false;
if(i%p[j] == 0){
phi[i*p[j]] = p[j] * phi[i];
break;
}
else phi[i*p[j]] = (p[j]-1ll) * phi[i];
}
}
}
欧拉定理
欧拉降幂
a与m互质
a与m不互质