【NOIP2012】同余方程
题目大意是说要求一个最小正整数x使得ax%b=1。那么这个形式很容易联想到的就是乘法逆元,因为1%b=a/a%b=1,所以x就是a关于b的最小正整数逆元,用扩欧求一下就可以了。
注意求出来的x不一定是最小正整数答案,还要进行一步(x%b+b)%b的操作。
代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 typedef long long LL; 5 using namespace std; 6 void ex_gcd(LL a,LL b,LL& x,LL& y) 7 { 8 if(b==0){ 9 x=1; 10 y=0; 11 return; 12 } 13 ex_gcd(b,a%b,x,y); 14 int t=x; 15 x=y; 16 y=t-a/b*y; 17 } 18 int main() 19 { 20 LL a,b,x,y; 21 scanf("%lld %lld",&a,&b); 22 ex_gcd(a,b,x,y); 23 x=(x%b+b)%b; 24 printf("%lld\n",x); 25 return 0; 26 }