扩展欧几里得模板题
ax+by=1
推导: ax+by=gcd(a,b)
a'x+b'y=gcd(a',b');
这里a'=b;
b'=a%b=a-a/b*b;
那么 bx+(a-a/b*b)y=gcd(a',b')=gcd(a,b)
ay+b(x-a/b*y)=gcd(a,b)
由此得出 x'=y ,y'=x-a/b*y;
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ext_gcd(int a,int b,int &x,int &y){
if(b==0){
x=1;y=0;
return a;
}
int gcd=ext_gcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return gcd;
}
void solve(int a,int b){
int x=0,y=0;
int g=ext_gcd(a,b,x,y);
if(g!=1){
cout<<"sorry"<<endl;
return ;
}
int t=x;
x=(x%b+b)%b;
y=y-(x-t)/b*a;
cout<<x<<' '<<y<<endl;
return ;
}
int main()
{
int a,b;
while(cin>>a>>b){
solve(a,b);
}
return 0;
}