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
代码如下:
#include<iostream>
#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;
}
ll gcd = exgcd(b, a % b, y, x);
y -= (a / b) * x;
return gcd;
}
ll inv(ll x, ll y) {
ll ax, ay;
ll gcd = exgcd(x, y, ax, ay);
if(1 % gcd != 0) return -1;
y = abs(y);
ll ans = ax % y;
if(ans <= 0) ans += y;
return ans;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cout.tie(nullptr);
ll n;
std::cin >> n;
for(ll i = 0; i < n; i ++) {
ll x, y;
std::cin >> x >> y;
if(inv(x, y) == -1)
std::cout << "Not Exist" << "\n";
else
std::cout << inv(x, y) << "\n";
}
return 0;
}