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
题意:已知a,m求最小的x满足ax≡1(mod m)。
分析:扩展欧几里德的模板题,不多说。
#include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <cmath> #include <algorithm> using namespace std; const double eps = 1e-6; const double pi = acos(-1.0); const int INF = 0x3f3f3f3f; const int MOD = 1000000007; #define ll long long #define CL(a) memset(a,0,sizeof(a)) void exgcd(int a, int b, int &d, int &x, int &y) { if (!b){d=a; x=1; y=0;} else { exgcd(b, a%b, d, y, x); y-=x*(a/b); } } int main() { int a,m,T; cin>>T; while (T--) { cin>>a>>m; int d,x,y; exgcd(a, m, d, x, y); if (d==1)//如果余数为1 { while (x<=0) x+=m;//结果可能为负数 cout<<x<<endl; } else cout<<"Not Exist"<<endl; } return 0; }