51nod 1135 原根
来源:互联网 发布:淘宝钓鱼网站举报 编辑:程序博客网 时间:2024/06/06 07:09
1135 原根
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)
给出1个质数P,找出P最小的原根。
Input
输入1个质数P(3 <= P <= 10^9)
Output
输出P最小的原根。
Input示例
3
Output示例
2
这道题老实说我也想了很久,最后实在想不出来了就去找了这位菊苣的博客看,然后根据他的思想最终还是写出来了:)
http://blog.csdn.net/u013486414/article/details/47781857
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std; int P; const int NUM = 32170; int prime[NUM/4]; bool f[NUM]; int pNum = 0; void getPrime()//线性筛选素数 { for (int i = 2; i < NUM; ++ i) { if (!f[i]) { f[i] = 1; prime[pNum++] = i; } for (int j = 0; j < pNum && i*prime[j] < NUM; ++ j) { f[i*prime[j]] = 1; if (i%prime[j] == 0) { break; } } } } __int64 getProduct(int a,int b,int P)//快速求次幂mod { __int64 ans = 1; __int64 tmp = a; while (b) { if (b&1) { ans = ans*tmp%P; } tmp = tmp*tmp%P; b>>=1; } return ans; } bool judge(int num)//求num的所有的质因子 { int elem[1000]; int elemNum = 0; int k = P - 1; for (int i = 0; i < pNum; ++ i) { bool flag = false; while (!(k%prime[i])) { flag = true; k /= prime[i]; } if (flag) { elem[elemNum ++] = prime[i]; } if (k==1) { break; } if (k/prime[i]<prime[i]) { elem[elemNum ++] = prime[i]; break; } } bool flag = true; for (int i = 0; i < elemNum; ++ i) { if (getProduct(num,(P-1)/elem[i],P) == 1) { flag = false; break; } } return flag; } int main() { getPrime(); while (cin >> P) { for (int i = 2;;++i) { if (judge(i)) { cout << i<< endl; break; } } } return 0; }
0 0
- 51nod 1135 原根
- 51nod 1135 原根
- 【51nod 1135 原根】
- 51nod-1135:原根
- 51nod 1135 原根
- 51nod 1135 原根
- 51nod 1135 原根
- 51nod 1135 原根
- 51 Nod 1135 原根
- 51 NOD 1135 原根
- 51nod 1135原根
- 51Nod 1135 原根
- 51nod 1135 原根
- 51nod 1135 原根
- 51Nod-1135-原根
- 51nod 1135 原根
- 51Nod 1135 原根
- 51Nod-1135-原根
- Java 变量初始化顺序
- Git 命令分类速查表
- 做为一个Java程序员,你需要哪些傍身的技能?(转载)
- angularjs页面传参方式
- Web表单(二)
- 51nod 1135 原根
- 计网--TCP流量控制与拥塞控制
- IDbDataParameter的使用及数据工厂
- scss 使用例子
- call_user_func与call_user_func_array把第一个参数作为回调函数调用
- Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)
- Linux服务器添加系统任务---自动备份mysql数据库
- linux 进程间通信-内存映射
- 判断两个字符串重排后是否相同