URAL 1204. Idempotents 扩展欧几里德
来源:互联网 发布:质量数据分析管理办法 编辑:程序博客网 时间:2024/06/10 12:24
题目来源:URAL 1204. Idempotents
题意:输入n(n = p*q p,q是质数) 并且x*x=x(mod n) 求x
思路: x*x=x(mod n) -> x*x+k*n=x -> x*(x-1)/n = k 所以 0 和 1 是一组解 因为n = p*q 且x*(x-1)%(p*q)== 0 x < n 因为x*x%n == x 模n之后才是x
1.x有p因子x-1有q因子
x%p == 0且(x-1)%q == 0
a*p == x且b*q == x-1 得到a*p-b*q == 1 gcd(p, q) == 1 用扩展欧几里德解出a, x ==a*p就是答按 在使他大于0
2.x-1有p因子x有q因子 x%p == 0 同上
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;void gcd(int a, int b, int& d, int& x, int& y){if(!b){d = a;x = 1;y = 0;}else{gcd(b, a%b, d, y, x);y -= x * (a/b);}}bool prime(int x){for(int i = 2; i*i <= x; i++){if(x%i == 0)return false;}return true;}int main(){int T;scanf("%d", &T);while(T--){int n;scanf("%d", &n);int p, q;for(int i = 2; i*i <= n; i++){if(n%i == 0 && prime(i) && prime(n/i)){p = i;q = n/i;break;}}int x, y, d;gcd(p, q, d, x, y);int x1 = p*x;if(x1 < 0)x1 += n;gcd(q, p, d, x, y);int x2 = q*x;if(x2 < 0)x2 += n;if(x1 > x2)swap(x1, x2);printf("%d %d %d %d\n", 0, 1, x1, x2);}return 0;}
0 0
- URAL 1204. Idempotents 扩展欧几里德
- Ural 1204. Idempotents 扩展欧几里得算法
- URAL 1204 Idempotents(扩展欧几里得)
- URAL 1204 Idempotents
- URAL 1141(扩展欧几里德+欧拉函数)
- timus 1204. Idempotents【思路】
- 欧几里德和扩展欧几里德
- 欧几里德, 与 扩展欧几里德
- 欧几里德|扩展欧几里德
- 欧几里德&&扩展欧几里德详解
- 欧几里德&&扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- POJ2411(状态压缩DP)
- 触摸控制移动与缩放算法 - Cocos2d-JS + CocosBuilder
- CocoaLumberjack使用案例
- 关于软件PicDecor的制作笔记(三)
- C++ template--类模版Stack的实现
- URAL 1204. Idempotents 扩展欧几里德
- Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。
- 《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)(精)
- vim显示行号、语法高亮、自动缩进的设置
- PROC系列之---/proc/pid/stat
- 访问者模式之C++实现
- Next Permutation
- top命令详解
- uva 10012