博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧拉函数
阅读量:4633 次
发布时间:2019-06-09

本文共 1492 字,大约阅读时间需要 4 分钟。

        欧拉函数:即求1到正整数n之间与n互质的数的个数。(特别的, 当 n = 1 时, 数目F(n) = 1) 。

        现在分析一下, 当n大于1时的情况, 当 n 为素数时, 很显然 F(n) = n-1 。当n不是素数时,有唯一分解定理可知, n 可以分解成 几个 素数 乘积的形式。例如

 4 = 2 * 2, F(2) = 1;  对于 2^(n+1)  在每一个 F(2^(n+1)) = 2^n * F(2) (想一想为什么? 例如 F(5) = 4, 这 4 个数分别为 1, 2, 3, 4 。 则, 1+5, 2+5, 3+5, 4+5, 1+(2*5),,,4+(4*5)一定和25互质, 则 F(25) = 5*F(5) = 4*5 = 20)   又因为 欧拉函数是积性函数(这个证明较为繁琐, 在此略去!)

所以, n = a^(i+1)* b^(j+1),,,  则 F(n) = F(a)*a^i  *  F(b)*b^j,,,

 

详见代码:

1 #include
2 #include
3 using namespace std; 4 5 int eular(int n) 6 { 7 int ret = 1, i; 8 for(i=2; i*i<=n; i++) 9 if(n%i==0)10 {11 n/=i, ret*=i-1;12 while(n%i==0)13 n/=i, ret*=i;14 }15 if(n>1)16 ret*=n-1;17 return ret;18 }19 20 int main()21 {22 int n;23 while(scanf("%d", &n)!=EOF)24 {25 n=eular(n);26 printf("%d\n", n);27 }28 return 0;29 }
View Code

 

《2》线性筛选--欧拉函数

1 //线性筛法求解极性函数(欧拉函数) 2 memset(check, false, sizeof(check)); 3 fai[1] = 1; 4 int tot = 0; 5 for(int i=2; i<=N; i++) 6 { 7     if(!check[i]) 8     { 9         prime[tot++] = i;10         fai[i] = i-1;11     }12 for(int j=0; j
N) break;15 check[i*peime[j]] = true;16 if(i%prime[j]==0)17 {18 fai[i*prime[j]] = fai[i]*prime[j];19 break;20 }21 else22 {23 fai[i*prime[j]] = fai[i]*(prime[j]-1);24 }25 }26 }
View Code

 

转载于:https://www.cnblogs.com/acm1314/p/4518500.html

你可能感兴趣的文章
Maven下载失败后lastUpdate文件删除
查看>>
CSS响应式:根据分辨率加载不同CSS的几个方法,亲测可用
查看>>
Java核心技术及面试指南 JDBC部分的面试题总结以及答案
查看>>
[转CSDN]android 滑动入门代码...[geoway]
查看>>
DayDream, 移动VR 2.0里程碑: 概述(上篇)
查看>>
数据产品经理工作(总结篇)
查看>>
算法导论 6-2 代码实现 C++
查看>>
Floyd-傻子也能看懂的弗洛伊德算法(转)
查看>>
python3 常见错误(一)
查看>>
php中怎么实现后台执行?
查看>>
jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法
查看>>
敏捷开发方法综述
查看>>
C语言中库函数strstr的实现
查看>>
python-希尔排序
查看>>
Vue中ref的使用要点
查看>>
python 日志
查看>>
Qt 学习之路 2(84):Repeater
查看>>
form表单文件上传
查看>>
购物车组件开发
查看>>
Python 列表生成器
查看>>