51nodoj 1135 (原根)
2016-09-17 15:38
169 查看
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
推荐大神博客好了, 自己不会写,也不算太懂这里写链接内容
基准时间限制: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
推荐大神博客好了, 自己不会写,也不算太懂这里写链接内容
#include <cstdio> #include <cstring> #define M 10010 #define LL long long int prime[M], cnt; void getprime(int n) { cnt = 1; for(int i=2; i<=n; i++) { if(n % i == 0) { prime[cnt++] = i; while(n % i == 0) { n /= i; } } } if(n > 1) { prime[cnt++] = n; } } LL quickpow(LL n, LL m, LL mod) { n %= mod; LL res = 1; while(m) { if(m & 1) { res = res * n % mod; } n = n * n % mod; m >>= 1; } return res; } int main() { LL n; bool ok; while(scanf("%lld", &n) != EOF) { getprime(n-1);//求出 n-1 的所有的质因数 for(LL i=2; i<=n; i++) { ok = 1; for(LL j=1; j<cnt; j++) { if(quickpow(i, (n-1)/prime[j], n) == 1) //快速幂,判断是否有不符合的 { ok = 0; break; } } if(ok)//有成立的就直接输出 { printf("%lld\n", i); break; } } } return 0; }
相关文章推荐
- 51nod 1135 求原根(板子
- 【51nod 1135 原根】
- 51nod 1135 求原根(板子
- 51nod 1135 求原根(板子
- 51nod 1135 原根(数论)
- 51nod 1135 求原根(板子
- 51nod 1135 求原根(板子
- 51nod 1135 求原根(板子
- 51nod 1135 原根
- 51nod-1135:原根
- 51nod 1135 原根 就是原根...
- 51 nod 1135原根
- 51nod 1135 求原根(板子
- 51nod 1135 求原根(板子
- 51nod 1135 求原根(板子
- 51Nod 1135-原根(快速求解一个素数的原根)
- 51nod 1135 求原根(板子
- 51nod 1135 求原根(板子
- 51nod 1135 原根
- 51nod 1135 求原根(板子