
Modular Inverse
Time Limit: 2 Seconds Memory Limit: 65536 KB 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 Submit Status |
Copyright @ 2001-2017, Zhejiang University ACM/ICPC Team, All rights reserved.
思路:
裸地乘法逆元
但是让我做的可谓是错误百出。。。。(交了差不多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() { ,f=; char ch=getchar(); ; ch=getchar();} +ch-'; ch=getchar();} return x*f; } int exgcd(int a,int b,int &x1,int &y1) { ) { x=,y=; 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; ) printf("Not Exist\n"); else {while(x<=0) x+=abs(b); printf("%d\n",x);} } ; }