欧拉定理:若n,a为正整数,且n,a互质,即gcd(a,n) = 1,则a^φ(n) ≡ 1 (mod n)
其中的φ(n) 即欧拉函数
欧拉函数是求小于等于n的数中与n互质的数的数目 (即欧拉函数是求 1到n-1 中 与n互质的数 的数目)
如果n是质数,那么1到n-1所有数都是与n互质的,所以φ(n) = n-1
如果n是合数,例如φ(8)=4,因为1,3,5,7均和8互质
φ(N)的求法:
(p是数N的质因数)
φ(N)的求法(求n的欧拉函数值):
LL Euler(LL n) { LL ans=1; for(int i=2;i*i<=n;i++) { if(n%i==0) { n/=i; ans*=(i-1); while(n%i==0) { n/=i; ans*=i; } } } if(n>1) ans*=(n-1); return ans ; }
用筛法计算出某个范围内所有数的欧拉函数值:
LL la[max]; void eular() { int i,j; la[1]=0; for(i=2;i<max;++i) la[i]=i; for(i=2;i<max;++i) { if(la[i]==i) { for(j=i;j<max;j=j+i) la[j]=la[j]/i*(i-1); } } for(i=2;i<max;++i) la[i]=la[i]+la[i-1]; }