欧拉函数和除数函数

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。

posted @ 2016-07-11 16:58  一叶落尽天下秋  阅读(1491)  评论(0编辑  收藏  举报