扩展欧几里得 Romantic (HDU

来源:互联网 发布:jenkins mac 安装 编辑:程序博客网 时间:2024/05/17 01:09

这个题,废话一大堆,不过,题意还是很鲜明的。

如果你只是用扩展欧几里得,可能会wrong 好多次,我就是血淋淋的教训。

需要加

while(x<0){
       x=x+b/r;
       y=y-a/r;
}

来找到最小的x,并且这个x为正数;

#include <stdio.h>
#define ll long long
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
void gd(ll a,ll b,ll &d,ll &x,ll &y){
if(b==0){
d=a;x=1;y=0;
}else{
gd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
int main(){
ll a,b,x,y,d;
while(~scanf("%lld%lld",&a,&b)){
if(gcd(a,b)==1){
gd(a,b,d,x,y);
while(x<0){
                x=x+b;
                y=y-a;
            }
printf("%lld %lld\n",x,y);
}else{
printf("sorry\n");
}
}
return 0;
}

原创粉丝点击