欧拉函数

欧拉函数:

在数论中,对正整数n,欧拉函数是少于等于n的数中与n互质的数的数目。

n的所有素因子的和就是euler[n] * n / 2;

欧拉函数的求法是eluer[n] = n * (1 - 1 / p1) * (1-1/p2) .......p1, p2是n的素因子,就是对于每个n的素因子都有n * 1 / pi个小于等于n的因子,要去除他们,但是因子之间可能会有重复,所以要连乘,每次去除的都是上一次基础上剩余的因子。

 

欧拉定理

 

a与p互质,a^x==1(mod p)则x==euler[p];

//直接求解欧拉函数
long long euler(long long n)
{
     long long res=n,a=n;
     for(long long 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;
}
 
//筛选法打欧拉函数表
long long eul[N];
void init()
{
     eul[1]=1;
     for(long long i=2;i<N;i++)
       eul[i]=i;
     for(long long i=2;i<N;i++)
        if(eul[i]==i)
           for(long long j=i;j<N;j+=i)
              eul[j]=eul[j]/i*(i-1);
}

 

 

posted @ 2018-08-18 21:02  LEVEL5  阅读(144)  评论(0编辑  收藏  举报