基本欧拉函数

证明:欧拉函数的证明暂时还不会,等会了再写吧,概念就是:n的欧拉函数是指不超过n的与n互质的数有多少个。比如与8互质的数为:1、3、5、7,所以8的欧拉函数值为4.

求法:假设要求n的欧拉函数f(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pm),其中p1,p2,...pm为小于等于n的n的质因子,比如10的质因子为2,5,所以f(10)=10*(1-1/2)*(1-1/5)=4.

代码实现:

#include<stdio.h>
#include<string.h>
#include<math.h>
int a[1000001],prime[1000001];
int main()
{
    int i,j;
    memset(prime,0,sizeof(prime));
    prime[0]=prime[1]=-1;
    for(i=1;i<=1000000;i++)
        a[i]=i;
    for(i=2;i<=1000000;i++)
    {
        if(prime[i]==0)
        {
            for(j=i;j<=1000000;j=j+i)
            {
                a[j]=a[j]/i*(i-1);
                prime[j]=-1;
            }
        }
    }
    for(i=1;i<=10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
原文地址:https://www.cnblogs.com/jiangjing/p/3100783.html