同余方程-NOIP2012TGD2T1
对于模板的应用。
题目描述
求关于x的同余方程ax≡1(mod b)的最小正整数解。
输入格式
每组输入数据只有一行,包含两个正整数a, b,用一个空格隔开。
数据规模:
对于40%的数据,2≤b≤1,000;
对于60%的数据,2≤b≤50,000,000;
对于100%的数据,2≤a, b≤2,000,000,000。
输出
每组输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。
样例输入
3 10
样例输出
7
1 #include <stdio.h> 2 3 void gcd(int a,int b,int& d,int& x,int& y){ 4 if(!b){ 5 d = a; x = 1; y = 0; 6 }else{ 7 gcd(b, a % b, d, y, x); 8 y -= x * (a / b); 9 } 10 } 11 12 int linear_mod_equation(int a,int b,int n,int& d){ 13 // d = gcd(a,n) 14 int x,y; 15 gcd(a,n,d,x,y); 16 if(b % d) d = 0; 17 else{ 18 return x * (b / d) % n; 19 } 20 } 21 22 int sol[1000]; 23 int main(void){ 24 int a,n,b = 1,d,ans; 25 scanf("%d%d",&a,&n); 26 ans = linear_mod_equation(a,b,n,d); 27 while(ans < 0){ 28 ans += n/d; 29 } 30 printf("%d\n",ans); 31 return 0; 32 }