题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2669
题目大意:找出一组x,y使ax+by=1,如果找不出则输出“sorry”。
解题思路:有两个点需要注意,一个点:由定理可得,如果a,b不互质即__gcd(a,b)大于1就不满足上式,这时我们就需要输出“sorry”。
另一个点,(刚开始第二个点不懂,有些大佬的博客就放个代码,我否了)需要满足x>=0,(还不知道为什么),一组解(x,y)可以写成(x+kb,y-ka)的形式,要满足x>=0,只需要将x一直加b,y一直减去a直到x>=0。
Code:
#include<iostream>
#include<algorithm>
using namespace std;
int exgcd(int a,int b,int &x,int &y){//扩展欧几里得算法模板
if(b==0){
x=1;y=0;
return a;
}
int r = exgcd(b,a%b,x,y);
int t = y;
y=x-(a/b)*y;
x=t;
return r;
}
int main(){
int a,b,x,y;
while(cin>>a>>b){
if(__gcd(a,b)>1){//如果a,b的最大公约数大于1,就不满足条件
cout<<"sorry
";
continue;
}
int r = exgcd(a,b,x,y);
while(x<0){//加到x>=0为止
x+=b;
y-=a;
}
cout<<x<<" "<<y<<endl;
}
return 0;
}```