设为首页 加入收藏

TOP

URAL 1268. Little Chu 求最大原根
2015-07-20 17:38:51 来源: 作者: 【 】 浏览:3
Tags:URAL 1268. Little Chu 最大

题目来源:URAL 1268. Little Chu

题意:输入n 求一个最大的k 使得k^1 k^2 k^3...k^x mod n 后各不相同

思路:mod n 后各不相同 最多有 n个 那么此事k就是原根 因为k <= n 所以从n开始向下枚举 求一个最大的原根

#include 
  
   
#include 
   
     using namespace std; typedef long long LL; int p[100000], c; LL pow_mod(LL a, LL x, LL m) { LL ans = 1; while(x) { if(x&1) ans = ans * a % m; a = a * a % m; x >>= 1; } return ans; } bool ok(int x, int ph, int m) { for(int i = 0; i < c; i++) if(pow_mod(x, ph/p[i], m) == 1) return false; return true; } void divide(int x) { c = 0; for(int i = 2; i*i <= x; i++) { if(x % i == 0) { p[c++] = i; while(x % i == 0) x /= i; } } if(x > 1) p[c++] = x; } int main() { int T; scanf("%d", &T); while(T--) { int n; scanf("%d", &n); int m = n, ans = m; for(int i = 2; i*i <= n; i++) { if(n%i == 0) { ans = ans / i * (i-1); while(n%i == 0) n /= i; } } if(n > 1) ans = ans / n * (n-1); //printf("%d\n", ans); divide(ans); int x = ans; while(!ok(x, ans, m)) x--; printf("%d\n", x); } return 0; }
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇杭电2524 矩形A + B(找规律,递.. 下一篇hdu 5024 Wang Xifeng's Litt..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·「链表」是一种怎样 (2025-12-25 19:20:51)
·C 语言中的链表有哪 (2025-12-25 19:20:48)
·c语言中的链表怎么学 (2025-12-25 19:20:45)
·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)