-
欧拉函数
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler'so totient function),它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。
通式
欧拉函数有两个性质
也是这份代码使用的两个性质
若n是p的k次方 那么phi[n] = n - k;
若m, n互质 那么
若n = q1 ^ a1 + q2 ^ a2 + q3 ^ a3 ……
则 phi[n] = n * (1 - 1 / q1 ) * (1 - 1 / q2 ) ……
板子:
const int N = 10000005;
int phi[N];
inline void phi_table(int x){
int i, j;
phi[1] = 1;
for(i = 2; i <= x; i++)phi[i] = 0;
for(i = 2; i <= x; i++){
if(phi[i] == 0)
for(j = i; j <= x; j += i){
if(phi[j] == 0) phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
}