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
http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html
#include <cstdio> #include <cmath> #include <iostream> using namespace std; int e_gcd(int a, int b, int &x, int &y) { if(b==0) { x=1; y=0; return a; } int r=e_gcd(b, a%b, x, y); int t=x; x=y; y=t-a/b*y; return r; } int cal(int a, int b, int c) //求乘法逆元 ; { int x, y; int gcd=e_gcd(a, b, x, y); if(c%gcd !=0) return -1; x *= c/gcd; b=abs(b); int ans=x%b; if(ans<=0) ans+=b; return ans; } int main() { int t, a, m; scanf("%d", &t); while(t--) { scanf("%d%d", &a, &m); int ans=cal(a, m, 1); if(ans==-1) printf("Not Exist\n"); else printf("%d\n", ans); } return 0; }
浙公网安备 33010602011771号