看破欧拉函数的奥秘

简介:     注意以下三个特殊性质 编程实现   利用欧拉函数和它本身不同质因数的关系,用筛法计算出某个范围内所有数的欧拉函数值。 1 //直接求解欧拉函数 2 #include 3 int euler(int n){ //返回eule...

 

 

摘自百度百科

注意以下三个特殊性质

这里写图片描述

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

 1 //直接求解欧拉函数  
 2 #include<cstdio>
 3 int euler(int n){ //返回euler(n)   
 4     int res=n,a=n;  
 5     for(int i=2;i*i<=a;i++){//从小到大尝试n的质因数 
 6         if(a%i==0){//如果i是n的质因数 
 7             res=res/i*(i-1);//提了一个1/i出来,先进行除法是为了防止中间数据的溢出   
 8             while(a%i==0) a/=i;//欧拉函数只记算一种质因数 
 9         }  
10     }  
11     if(a>1) res=res/a*(a-1);//如果最后还剩因子 
12     return res;  
13 }
14 int main(){
15     int x;
16     scanf("%d",&x);
17     printf("%d",euler(x));
18     return 0;
19 }
 1 //筛选法打欧拉函数表   
 2 #include<cstdio>
 3 #define Max 1000001  
 4 int euler[Max];  
 5 void Init(){
 6     euler[1]=1;
 7     for(int i=2;i<Max;i++)
 8         euler[i]=i;
 9     for(int i=2;i<Max;i++)
10         if(euler[i]==i)//如果i是质数 
11             for(int j=i;j<Max;j+=i) 
12                 euler[j]=euler[j]/i*(i-1);//提一个1/i,先进行除法是为了防止中间数据的溢出
13     return ;
14 }
15 int main()
16 {
17     Init();
18     for(int i=1;i<=100;i++)
19         printf("%d\n",euler[i]);
20     return 0;
21 }

 

目录
相关文章
|
5月前
|
测试技术
欧拉函数(看一遍就会系列)
欧拉函数(看一遍就会系列)
|
5月前
|
算法 搜索推荐 程序员
C语言第二十四练 欧拉函数的利用
C语言第二十四练 欧拉函数的利用
38 0
|
算法
梯度下降算法详解(从下山比喻、数学推导到代码实现)
梯度下降算法详解(从下山比喻、数学推导到代码实现)
446 0
|
机器学习/深度学习
数论整理之欧拉函数
数论整理之欧拉函数
120 0
|
机器学习/深度学习 算法
欧拉函数算法的实现
欧拉函数算法的实现
欧拉函数算法的实现
|
算法 C++
算法基础系列第四章——数论之从欧拉卷到欧几里得(1)
算法基础系列第四章——数论之从欧拉卷到欧几里得(1)
148 0
算法基础系列第四章——数论之从欧拉卷到欧几里得(1)
|
算法 C++
算法基础系列第四章——数论之从欧拉卷到欧几里得(2)
算法基础系列第四章——数论之从欧拉卷到欧几里得(2)
89 0
算法基础系列第四章——数论之从欧拉卷到欧几里得(2)
|
机器学习/深度学习 JavaScript 前端开发
LDUOJ——最小生成树(欧拉函数+思维)
LDUOJ——最小生成树(欧拉函数+思维)
101 0
|
算法
数学知识:欧拉函数
复习acwing算法基础课的内容,本篇为讲解数学知识:欧拉函数,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
152 0
数学知识:欧拉函数