欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。
若p是质数,显然有φ(p)=p-1。
计算公式:φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn)
欧拉函数是积性函数,但不是完全积性函数。即当且仅当x和y互质时,有phi(x,y)=phi(x)*phi(y),证明显然。
欧拉函数的一些性质:
n为奇数时,φ(2n)=φ(n)
若p为质数,n=p^k,则φ(n)=p^k-p^(k-1)
n>2时,φ(n)一定为偶数
小于n的数中,与n互质的数的总和为:φ(n) * n / 2
n的因数(包括1和它自己)的欧拉函数之和等于n
单个欧拉函数可以在sqrt(n)计算出来
int euler(int n){ int m=sqrt(n)+1; int 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);//如果n是质数ans=n-1,否则ans不会变 return ans; }
欧拉筛法同时求欧拉函数
void euler(int n) { phi[1]=1; for (int i=2;i<=n;i++) { if (isprime[i]==0) { prime[++num]=i; phi[i]=i-1; } for (int j=1;j<=num&&prime[j]*i<=n;j++){ isprime[i*prime[j]]=1; if (i%prime[j]==0) { phi[i*prime[j]]=phi[i]*prime[j]; break; } else phi[i*prime[j]]=phi[i]*phi[prime[j]]; } } }
欧拉定理:a和p互质时,a^φ(p)≡1 (mod p),a在模p意义下的逆元为a^(φ(p)-1)
费马小定理:p为质数且a不为p的倍数时,a^(p-1)≡1 (mod p),a在模p意义下的逆元为a^(p-2)
可以用来处理大指数