The modular modular multiplicative inverse of an integer a modulo m is an integer x such that InputThere 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. OutputFor each test case, output the smallest positive x. If such x doesn't exist, output "Not Exist". Sample Input3
3 11
4 12
5 13
Sample Output4
Not Exist
8
ReferencesAuthor: WU, Zejun Contest: The 9th Zhejiang Provincial Collegiate Programming Contest |
裸地乘法逆元
但是让我做的可谓是错误百出。。。。(交了差不多10遍吧。。。)
错误:
1.多组数据
2。最小正整数,所以当求出来的x为0时也要加abs(b)
3.最小 那就%b
代码:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int t,a,b,x,y,gcd; int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f; } int exgcd(int a,int b,int &x1,int &y1) { if(b==0) { x=1,y=0; return a; } int r=exgcd(b,a%b,x1,y1),tmp; tmp=x1,x1=y1,y1=tmp-a/b*y1; return r; } int main() { while(scanf("%d",&t)!=EOF) while(t--) { a=read(),b=read(); gcd=exgcd(a,b,x,y); x%=b; if(gcd!=1) printf("Not Exist\n"); else {while(x<=0) x+=abs(b); printf("%d\n",x);} } return 0; }