hdu 2669 Romantic
题目描述:
给定多组a,b。对于每组数据,求出使 ax+by=1 的x取最小整数解时的 x 和 y 的值


【分析】
为数不多的可以自己想出的题
在看了刘汝佳的讲解以后感觉自己要上天了

通过扩展欧几里德算法来求出 x,y 的一组解
然后计算出 aa=a/gcd(a,b) bb=b/gcd(a,b)
所有的 x,y 的解的集合就是 (x+k*bb,y-k*aa) (k为整数)
这很清真


【代码】

//hdu 2669 Romantic
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int c,d;
int exgcd(int a,int b,int &x,int &y)
{
if(!b) {x=1;y=0;return a;}
else {int g=exgcd(b,a%b,y,x);y-=(a/b)*x;return g;}
}
int main()
{
while(~scanf("%d%d",&c,&d))
{
int x,y;
int g=exgcd(c,d,x,y);
if(g!=1) printf("sorry\n");
else
{
int cc=c/g,dd=d/g;
while(x-dd>0) x-=dd,y+=cc;
while(x<0) x+=dd,y-=cc;
printf("%d %d\n",x,y);
}
}
return 0;
}