对于任意正整数 A B<1000000001寻找X Y使得 A*X+B*Y=gcd(A,B);要注意越界问题,所以用long long PC的编译器不支持__int64 用c语言比较麻烦,最好把经常用的几个头文件都加上否则编译错误
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
根据数论只是,任何整数A,B,都存在这样一对X,Y 使得A*X+B*Y=gcd(A,B);成立(理论不推了,看我的博客“整除性”里面有讲解)
代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
long long gcd(long long p,long long q,long long &x,long long &y)
{
long long x1,y1;
long long g;
if(q>p) return gcd(q,p,y,x);
if(q==0)
{
x=1;
y=0;
return p;
}
g=gcd(q,p%q,x1,y1);
x=y1;
y=(x1-floor(p/q)*y1);
return g;
}
int main()
{
long long a,b;
while(scanf("%lld%lld",&a,&b)!=EOF)
{
long long t,x,y;
t=gcd(a,b,x,y);
printf("%lld %lld %lld\n",x,y,t);
}
return 0;
}