51nod 1135 原根 (数论)
2017-05-20 14:02
204 查看
题目链接:
原根例题
求模素数P原根的方法:对
素因子分解,即
是P−1的标准分解式,若恒有
成立,则
就是
的原根。(对于合数求原根,只需把
换成
即可)。
代码:
原根例题
求模素数P原根的方法:对
素因子分解,即
是P−1的标准分解式,若恒有
成立,则
就是
的原根。(对于合数求原根,只需把
换成
即可)。
代码:
#include<bits/stdc++.h> using namespace std; int p[100010]; int t = 0; //http://blog.csdn.net/acdreamers/article/details/8883285 void divide(long long n) { for(int i = 2; i * i <= n; i++){ if(n % i == 0){ p[t ++] = i; while(n % i == 0) n /= i; } } } int solve(long long x,long long n,long long m) { long long res = 1; while(n > 0){ if(n & 1) res = (res * x) % m; x = (x * x) % m; n >>= 1; } return res; } int main() { long long a; cin >> a; divide(a - 1);//求a-1所有的质因子 for(int i = 2; i < a; i++) { bool flag = false; for(int j = 0; j < t; j++) { if(solve(i,(a - 1) / p[j], a ) == 1)//判断是否是原根 { flag = true; break; } } if(!flag){ cout << i << endl; break; } } return 0; }
相关文章推荐
- 51nod 1135 原根(数论)
- 51nod 1135 原根 (数论)
- 51nod--1135 原根 (数论)
- 51nod 2026 Gcd and Lcm 杜教筛+数论
- 51nod 1135 原根
- 51nod 1135 求原根(板子
- 51nod 1011最大公约数GCD【数论】
- 51nod_1003 阶乘后面0的数量(求N!中5的个数,数论)
- 51nod 1616 最小集合(数论)(枚举)
- 51Nod_P1239 欧拉函数之和(数论+杜教筛+欧拉函数+哈希+快速乘)
- [数论][莫比乌斯反演] 51Nod 1222 最小公倍数计数
- 51nod 1240 莫比乌斯函数 【数论基础】
- [数论][Lucas定理] 51Nod 1778 小Q的集合
- 51nod 1491|CodeForces 458A Golden System(数论 )
- 51nod 1799 思维 二分 数论 分块打表
- 51nod 1135 求原根(板子
- 51nod 1060 最复杂的数(数论:反素数)
- 51nod 1012 最小公倍数LCM【数论】
- [数论] 51Nod 1189 阶乘分数
- 51nod 1135 原根