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
思路 模板题 ax+by=gcd(a,b) ————扩展欧几里德算法原理
#include<iostream>
#include<cmath>
#include<cstring>
#include<vector>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
#include <set>
#include <list>
#include <deque>
#include<map>
#include<sstream>
#include<time.h>
#define pi 3.1415926
#define N 2005
#define M 15
#define INF 0x3f3f3f3f
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
using namespace std;
typedef long long ll;
const int maxn = 1000000 + 5;
const int day =21252;
ll x,y;
long long ex_gcd(long long a, long long b, long long &x,long long &y){
if(b == 0)
{
x = 1, y= 0;
return a;
}
else{
long long r = ex_gcd(b, a% b, y, x);
y -= x*(a/b);
return r;
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll a,m;
scanf("%lld %lld",&a,&m);
ll r=ex_gcd(a,m,x,y);
if(r!=1)
{
printf("Not Exist\n");continue;
}
while (x<=0) x+=m;
printf("%lld\n",x);
}
return 0;
}