题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4712
The modular modular multiplicative inverse of an integer a modulo
m is an integer x such that a-1≡x (mod
m)
. This is equivalent to ax≡1 (mod
m)
.
There are multiple test cases. The first line of input is an integer T ≈ 2000 indicating the number of test cases.
Each test case contains two integers 0 < a ≤ 1000 and 0 < m ≤ 1000.
For each test case, output the smallest positive x. If such x doesn‘t exist, output "Not Exist".
3 3 11 4 12 5 13
4 Not Exist 8
代码如下:
#include <cstdio> #include <cstring> #include <cmath> typedef long long LL; LL exgcd(LL a,LL b,LL &x,LL &y) { if(b == 0) { x = 1; y = 0; return a; } else { LL r = exgcd(b,a%b,x,y); LL t = x; x = y; y = t-a/b*y; return r; } } LL cal(LL a, LL b, LL c) { LL x, y; LL tt = exgcd(a, b, x, y); if(c%tt)//无整数解 { return -1; } x*=c/tt; b/=tt; if(b<0) b=-b; LL ans=x%b; if(ans<=0) ans+=b; return ans; } int main() { LL a, b, t; scanf("%lld",&t); while(t--) { scanf("%lld%lld",&a,&b); LL ans = cal(a, b, 1); if(ans == -1) { printf("Not Exist\n"); continue; } printf("%lld\n",ans); } return 0; }
ZOJ 3609 Modular Inverse(扩展欧几里德)
原文地址:http://blog.csdn.net/u012860063/article/details/39778547