1. 程式人生 > >歐拉函數 歐拉篩法

歐拉函數 歐拉篩法

n-1 ++ == 質數 否則 col euler 個數 isp

歐拉函數是小於x的整數中與x互質的數的個數,一般用φ(x)表示。特殊的,φ(1)=1。

若p是質數,顯然有φ(p)=p-1。

計算公式:φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn)

單個歐拉函數可以在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]]; } } }

歐拉函數 歐拉篩法