欧拉函数
φ(i),不大于i且与i互质的个数
公式 φ(n) = n(1-1/p1)(1-1/p2)..(1-1/pk) (pi是质因子)
求法
1 直接求
int Phi(int N) {
int m = (int)sqrt(N + 0.5), ans = N;
for(int i=2; i<=m; i++)
if(N % i == 0) {
ans = ans / i * (i-1);
while(N % i == 0) N /= i;
}
if(N > 1) ans = ans / N * (N-1);
return ans;
}
2 线性筛
int phi[1001];
int phi_table(int n) {
for(int i=2; i<=n; i++) phi[i] = 0;
phi[1] = 1;
for(int i=2; i<=n; i++) if(!phi[i])
for(int j=i; j<=n; j+=i) {
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i-1);
}
}
欧拉定理
若a与m互质,则
a^(φ(m)) ≡ 1(mod m)