扩展欧几里得定律
扩展欧几里得所能求的东西:不定方程的某一整数解,同余方程,乘法逆元 首先了解一个性质(裴蜀定理):ax+by=c 有整数解当且仅当c为gcd(a,b)的倍数 然后是两个预备知识:gcd(a,b)=gcd(b,a%b) a%b=a-a/b*b(此处/表示整除) 不定方程的解: 不妨设a>b 另ax 1 +by 1 =gcd(a,b) bx 2 +(a%b)y 2 =gcd(b,a%b) 因为gcd(a,b)=gcd(b,a%b) 所以 ax 1 +by 1 =bx 2 +(a%b)y 2 因为a%b=a-a/b*b 所以ax 1 +by 1 =ay 2 +b(x 2 -(a/b)*y 2 ) 所以x1=y2 ; y1=x2-(a/b)*y2 这样就可以递归处理 显然当b=0时为边界条件 我们令当b=0时 x=1 y=0 然后慢慢回溯 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #define int long long using namespace std; int exgcd(int a,int b,int &x,int &y) { int d,t; if(b==0) { x=1;y=0; return a; } d=exgcd(b,a