对正整数n,欧拉函数是小于n的数中与n互质的数的数目
欧拉函数与组合数学中的计数原理和容斥原理有着密切的联系。
Euler函数表达通式:
其中 为x的所有素因子,x是不为0的整数。
euler(1)=1(唯一和1互质的数就是1本身)。
欧拉定理:对于互质的正整数a和n,有 (可用于求解逆元)
若m,n互质, ——积性函数的性质
同时,欧拉函数也能这样计算: 其中是一个素数.
因为除了的倍数其他数字均和互质。而的倍数有个,所以
当初学习欧拉函数时我隐隐觉得它和容斥原理有什么联系,现在明白了,计数原理能解释欧拉函数。
欧拉函数的等式:
由算术基本定理(正整数的唯一分解定理):
那么,在1——n内和n互质的数这样求解:先除减去能被一个素因子整除的数:
发现多减了,再加上两个素因子乘积计算结果:
再减去三个素因子的乘积计算结果:
......
整理得到:
它也就是:
int Euler(int n){
int ans=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
ans=ans/i*(i-1);
while(a%i==0){
a/=i;
}
}
}
if(a>1) ans=ans/a*(a-1);
return ans;
}
void Euler(int Max){
for(int i=1;i