您的位置:首页 > 其它

扩展欧几里得-逆元 浙江2012年省赛J题 Modular Inverse

2016-07-17 16:11 309 查看


扩展欧几里得-逆元 浙江2012年省赛J题 Modular Inverse

Modular Inverse

Time Limit: 2000MSMemory Limit: 65535KB64bit IO Format:
Submit Status

Description
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


Hint



Source
浙江2012年省赛J题

(a*x)%m=1 扩展欧几里得求ax+my=1 x>0的最小整数解

#include<iostream>
#include<cstdio>
using namespace std;
#define ll __int64

ll x, y;
ll exgcd(ll a, ll b){
if(b == 0){
x = 1;
y = 0;
return a;
}
ll d = exgcd(b, a%b);
ll t = x;
x = y;
y = t-a/b*y;
return d;
}

int main(){
ll a, b, T;
scanf("%I64d",&T);
while(T--){
scanf("%I64d%I64d",&a,&b);
if(b==1){
printf("1\n");
continue;
}
//cout<<a<<b<<endl;
//ll g = 0;
ll g = exgcd(a, b);
if(g == 1){
while(x < 0){
x += b;
y -= a;
}
printf("%I64d\n",x);
}
else
printf("Not Exist\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论