欧拉函数和除数函数
1 欧拉函数
定义:
若n为正整数,不大于n且与n互素的数的个数成为欧拉函数,记为φ(n)。
公式:
φ(n)=n*(1-1/p1)*(1-1/p2)*……*(1-1/pn),其中p1、p2……pn为n的质因数;
若n为素数,φ(n)=n-1。
例如:
24=2*2*2*3
φ(24)=24*(1-1/2)*(1-1/3)=8
代码:
int oula(int n) { int a=n,i; for(i=2; i<=n; i++) if(n%i==0)//第一次找到的必为素因子 { a=a-a/i; while(n%i==0) n/=i;//把该素因子全部约掉 } return a; }//慢
int oula(int n) { int res=n,a=n; for(int i=2;i*i<=a;i++) if(a%i==0) { res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 while(a%i==0) a/=i; } if(a>1) res=res/a*(a-1); return res; }//快
2 除数函数(求正约数个数)
定义:
正整数n的正约数的个数,记为d(n)。
公式;
若n=p1α1*p2α2*……*pnαn
d(n)=(α1+1)*(α2+1)*......*(αn+1)。
例如;
d(24)=(3+1)*(1+1)=8。