POJ 1284
来源:互联网 发布:盘古数据股票 编辑:程序博客网 时间:2024/05/15 15:24
题意:求一个数的原根数;
设g是P的一个原根,那么
1 < g < P,0 < i < P(i最大取P-1)
就是说g是遍历出来的,次方数从小到大挨个判断,如果结果两两不同的话,就是一个原根。
我们使用欧拉定理,x的原根数恰好为x-1的欧拉函数的值
//欧拉函数int euler_phi(int n) { int m = (int)sqrt(n + 0.5); int ans = n; for(int i = 2; i <= m; i++) if(n % i == 0) { ans = ans / i * (i - 1); while(n % i == 0) n /= i; } if(n > 1) ans = ans / n * (n - 1); return ans;}
扩充
1、欧拉函数出了求原根的个数,还可以求约数的个数,由唯一分解定理可以把
n =pa11 pa22 pa33 … pakk
这个式子也是和欧拉函数等价的
2、小于
这个式子也是欧拉函数。
#include<iostream>#include<cmath>#define MAXN 65540using namespace std;int phi[MAXN];int euler_phi(int n) { int m = (int)sqrt(n + 0.5); int ans = n; for(int i = 2; i <= m; i++) if(n % i == 0) { ans = ans / i * (i - 1); while(n % i == 0) n /= i; } if(n > 1) ans = ans / n * (n - 1); return ans;}int main() { int n; while(cin >> n) { cout << euler_phi(n-1) << endl; } return 0;}
阅读全文
0 0
- poj 1284
- POJ 1284
- 欧拉函数:poj 2407, poj 1284,poj 2478,poj 3090,poj 3696,poj 3358
- 原根 poj 1284
- poj 1284 原根
- POJ 1284 Primitive Roots
- poj - 1284 - Primitive Roots
- Poj 1284 Primitive Roots
- 原根 poj 1284
- 【POJ 1284】Primitive Roots
- POJ 1284 primitive roots
- POJ 1284Primitive Roots
- POJ 1284 Primitive Roots
- poj 1284 Primitive Roots
- poj 1284 求原根
- POJ-1284-Primitive Roots
- uva 10820 poj 2407 poj 1284 poj 2478 poj 3090 (欧拉函数入门)
- 欧拉函数学习笔记整理 POJ 2407+POJ 1284+POJ 2478+POJ 3090
- codevs 1282 约瑟夫问题 树状数组正解 解题报告
- 关于maven的一些理解
- 3-4 计算长方形的周长和面积
- Swevlet中的监听器
- HttpServlet详解
- POJ 1284
- 学习之路:0001
- 杭电1089,1090,1091,1092,1093,1094
- 数据结构-栈的链式存储
- php判断安卓还是苹果客户端
- Json详解与使用
- Openlayers4中风场的实现
- 判断两个链表是否相交,如果相交如何找到第一个相交结点。
- iOS 图片上传使用base64或者二进制流上传头像