您的位置:首页 > 其它

Codeforces 7C 扩展欧几里得

2017-08-03 10:38 429 查看
扩展欧几里得是计算 ax + by = gcd(a,b) 的 x,y的整数解。

现在是ax + by + c = 0;

只要 -c 是 gcd(a,b) 的整数倍时有整数解,整数解是 x = x*(-c)/gcd(a,b) ; y = y*(-c)/gcd(a,b);

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

void gcd(ll a,ll b,ll& d,ll& x,ll& y) {
if(!b) {d=a;x=1;y=0;}
else {
gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}

int main()
{
ll a,b,c;
ll d,x,y;
scanf("%lld%lld%lld",&a,&b,&c);
gcd(a,b,d,x,y);
if(c%d==0) {
x = -x*c/d;
y = -y*c/d;
printf("%lld %lld\n",x,y);
}
else printf("-1\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: