扩展欧几里得定理 exgcd
2016-11-15 07:48
197 查看
解 ax + by = gcd(a,b);
gcd : { int gcd(int a, int b) { return b ? a : gcd(b, a%b); } }
ax+ by = 1 (gcd(a,b) = 1)
ax + by = 1 => bx + (a%b)y = 1 => bx + (a-(a/b)*b)y = 1 => ya + (x - (a/b)y)b = 1
逆元 : ax = 1(mod p) => ax - py = 1 同理.
gcd : { int gcd(int a, int b) { return b ? a : gcd(b, a%b); } }
ax+ by = 1 (gcd(a,b) = 1)
ax + by = 1 => bx + (a%b)y = 1 => bx + (a-(a/b)*b)y = 1 => ya + (x - (a/b)y)b = 1
逆元 : ax = 1(mod p) => ax - py = 1 同理.
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int a, p; void exgcd(int a, int b, int &g, int &x, int &y) { if(!b) { g = a; x = 1; y = 0; return ; } exgcd(b, a%b, g, y, x); y -= a/b*x; } int main() { freopen("exgcd.in", "r", stdin); freopen("exgcd.out", "w", stdout); scanf("%d%d\n", &a, &p); int x, y, g; exgcd(a, p, g, x, y); x = (x < 0) ? x += p : x; printf("%d\n", x); fclose(stdin); fclose(stdout); return 0; }
相关文章推荐
- 欧几里得+扩展的欧几里得算法+线性同余方程+中国剩余定理
- 【HDU 3037】大数组合取模之Lucas定理+扩展欧几里得求逆元与不定方程一类问题
- BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】
- 扩展欧几里得定理
- HDU - 2115 - Loooooops (扩展欧几里得定理)
- 扩展欧几里得定理
- [置顶] 扩展欧几里得定理及其应用
- poj 1901 跳蚤 扩展欧几里得定理和容斥原理的应用
- POJ 1061 青蛙的约会 (扩展欧几里得定理)
- 扩展欧几里得定理总结
- 湘潭大学四月月赛C题A+B(扩展欧几里得定理)
- 欧拉定理 & 费马定理吗 & 欧几里得 & 扩展欧几里得
- 扩展的欧几里得&中国剩余定理
- 扩展欧几里得定理——POJ 1061
- ACM_欧几里得(GCD) 扩展欧几里得(EXGCD)
- 扩展欧几里得、中国剩余定理 入门指南
- poj1006_Biorhythms_扩展欧几里得_中国剩余定理
- poj 1601 青蛙的约会 扩展欧几里得定理应用
- 5.扩展欧几里得&&中国剩余定理
- [省选前题目整理][SGU 261]Discrete Roots(扩展欧几里得+中国剩余定理+原根+大步小步算法)