欧拉函数
来源:互联网 发布:网络流行歌曲在线试听 编辑:程序博客网 时间:2024/06/16 00:09
介绍
求(1,m)区间内与m互质的数的个数
公式
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。
注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4
变式一:
若n是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质。
变式二:
欧拉函数是积性函数——若m,n互质,
特殊性质:当n为奇数时, , 证明与上述类似。
若n为质数则
代码实现
求单个欧拉函数
#include <iostream>using namespace std;int Euler(int n){ int res = n , a = n; for(int i = 2 ; i*i <= a ; i++) { if(a % i == 0) //i一定是素数 { res = res / i * (i - 1); //根据公式 while(a % i == 0) //把相同的除数排除 { a /= i; } } } if(a > 1) //最后只剩下 小于4的素数 或者n本身就是素数 res = res / a *(a - 1); return res;}int main(){ int n; while(cin >> n) { cout << Euler(n) << endl; }}
线性筛求1-N的所有欧拉函数
//离线打表//筛选法求欧拉函数,时间复杂度O(nloglogn)//跟埃式筛法求素数差不多#include <iostream>using namespace std;const int MAXN = 100010;int a[MAXN];void init(){ for(int i = 1 ; i <= MAXN ; i++) a[i] = i; a[1] = 0; for(int i = 1 ; i <= MAXN ; i++) { if(a[i] == i) { for(int j = i ; j <= MAXN ; j += i) a[j] = a[j] / i * (i - 1); } }}int main(){ init(); int n; while(cin >> n) { cout << a[n] << endl; }}
阅读全文
0 0
- 欧拉函数
- 欧拉函数
- Relatives 【欧拉函数】
- 欧拉函数
- POJ_2407_欧拉函数
- 欧拉函数
- hdu_3501_欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数应用
- 欧拉函数
- 欧拉函数
- 欧拉函数
- ACM-欧拉函数
- vscode运行c++ 代码
- java List<String>的初始化
- 防止网页过快刷新-CC攻击
- Android大图片、缩略图剪裁解决方案
- 发现新世界
- 欧拉函数
- Excel表格vlookup函数查不到数据的原因总结
- EF基于方法的查询语法
- shell命令行快捷键
- unity_NGUI系统学习(一)_界面初始&Label组件
- 第五周——项目一—建立顺序栈算法库
- Java大文件读取的几种方法
- cmake连接静态库
- HDU 1394 Minimum Inversion Number