您的位置:首页 > 其它

看破欧拉函数的奥秘

2017-03-11 22:56 239 查看



注意以下三个特殊性质






编程实现
利用欧拉函数和它本身不同质因数的关系,用筛法计算出某个范围内所有数的欧拉函数值。



//直接求解欧拉函数
#include<cstdio>
int euler(int n){ //返回euler(n)
int res=n,a=n;
for(int i=2;i*i<=a;i++){//从小到大尝试n的质因数
if(a%i==0){//如果i是n的质因数
res=res/i*(i-1);//提了一个1/i出来,先进行除法是为了防止中间数据的溢出
while(a%i==0) a/=i;//欧拉函数只记算一种质因数
}
}
if(a>1) res=res/a*(a-1);//如果最后还剩因子
return res;
}
int main(){
int x;
scanf("%d",&x);
printf("%d",euler(x));
return 0;
}


//筛选法打欧拉函数表
#include<cstdio>
#define Max 1000001
int euler[Max];
void Init(){
euler[1]=1;
for(int i=2;i<Max;i++)
euler[i]=i;
for(int i=2;i<Max;i++)
if(euler[i]==i)//如果i是质数
for(int j=i;j<Max;j+=i)
euler[j]=euler[j]/i*(i-1);//提一个1/i,先进行除法是为了防止中间数据的溢出
return ;
}
int main()
{
Init();
for(int i=1;i<=100;i++)
printf("%d\n",euler[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: