同余方程
【题目描述】
现询问同余方程Ax ≡ 1(mod B)的最小正整数解是多少。
【输入描述】
输入两个正整数A、B。
【输出描述】
输出一个正整数,表示答案。
【输入样例】
3 10
【输出样例】
7
【数据范围及提示】
对于40%的数据,2 ≤ B ≤ 1000;
对于60%的数据,2 ≤ B ≤ 50000000;
对于100%的数据,2 ≤ A,B ≤ 2000000000。
源代码: #include<cstdio> int A,B,X,Y; int GCD(int t1,int t2) { return t2?GCD(t2,t1%t2):t1; } void ExGCD(int t1,int t2) //裸扩展欧几里得。 { if (!t2) { X=1; Y=0; } else { ExGCD(t2,t1%t2); int t=X; X=Y; Y=t-(t1/t2)*Y; } } int main() { scanf("%d%d",&A,&B); int D=GCD(A,B); A/=D; B/=D; ExGCD(A,B); while (X<=0) X+=B; printf("%d",X); return 0; } /* 什么逆元老子不知道。 Ax mod B=1 --> Ax-By=1 --> 扩展欧几里得求解最小x即可。 */