扩展欧几里得算法
作者:互联网
扩展欧几里得算法
用途:给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)。
应用: 求解一次同余方程 ax≡b(modm)则等价于求ax=m∗(−y)+b ax+my=b
有解条件为 gcd(a,m)|b,然后用扩展欧几里得求解即可
特别的 当 b=1 且 a与m互质时 则所求的x即为a的逆元
1 #include <bits/stdc++.h> 2 using namespace std; 3 int n; 4 int exgcd(int a,int b,int &x,int &y) 5 { 6 if(b==0) 7 { 8 x=1,y=0; 9 return a; 10 } 11 int x1,y1,gcd; 12 gcd=exgcd(b,a%b,x1,y1); 13 x=y1,y=x1-a/b*y1; 14 return gcd; 15 } 16 int main() 17 { 18 int x,y; 19 scanf("%d",&n); 20 for(int i=1;i<=n;i++) 21 { 22 int a,b; 23 scanf("%d%d",&a,&b); 24 exgcd(a,b,x,y); 25 printf("%d %d\n",x,y); 26 27 } 28 return 0; 29 }
标签:gcd,int,欧几里得,扩展,bi,ai,算法,y1,ax 来源: https://www.cnblogs.com/wellerency/p/15982668.html