题目链接: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)
.
Input
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.
Output
For each test case, output the smallest positive x. If such x doesn't exist, output "Not Exist".
Sample Input
3 3 11 4 12 5 13
Sample Output
4 Not Exist 8
References
代码例如以下:
#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 "); continue; } printf("%lld ",ans); } return 0; }