ZOJ 3609

1 #include <cstdio> 2 #include <cmath> 3 using namespace std; 4 int ex_gcd(int a,int b,int &x,int &y)//solve x,y in a*x+b*y=ex_gcd(a,b,x,y)=gcd(a,b); 5 { 6 if(b==0) 7 { 8 x=1; 9 y=0; 10 return a; 11 } 12 int ans=ex_gcd(b,a%b,x,y); 13 int tmp=x; 14 x=y; 15 y=tmp-a/b*y; 16 return ans; 17 //x = x0 + (b/gcd)*t 18 //y = y0 – (a/gcd)*t 19 //we can solve x,y in a*x+b*y=c <=> c%gcd(a,b)==0 20 } 21 22 int get(int a,int m)//get x in a*x=1(mod m) 23 { 24 int x,y; 25 int gcd=ex_gcd(a,m,x,y); 26 if(1%gcd!=0) 27 return -1;//error 28 x*=1/gcd; 29 m=abs(m); 30 int ans=x%m; 31 if(ans<=0) 32 ans+=m; 33 return ans; 34 } 35 36 int main() 37 { 38 int a,b; 39 int t; 40 scanf("%d",&t); 41 while(t--) 42 { 43 scanf("%d%d",&a,&b); 44 int ans=get(a,b); 45 if(ans==-1) 46 printf("Not Exist "); 47 else 48 printf("%d ",ans); 49 // scanf("%d%d",&a,&b); 50 // int gcd=ex_gcd(a,b,x,y); 51 // printf("gcd(%d,%d)=%d ",a,b,gcd); 52 // printf("x:%d,y:%d ",x,y); 53 // printf("%d*%d+%d*%d=%d ",a,x,b,y,gcd); 54 } 55 56 return 0; 57 }