Line CodeForces - 7C
2017-11-27 21:17
309 查看
点击打开链接
欧几里得算法就是gcd
扩展欧几里得就是 求方程ax+by=c的最小整数解
1. c%gcd(a,b)!=0 则方程无解
2. c%gcd(a,b)==0
则有a*x+b*y==gcd(a,b)成立
因为gcd(a,b)==gcd(b,a%b) 所以b*x+(a%b)*y==gcd(b,a%b)
因为a%b==a-(a/b)*b 所以a*y+b[x-(a/b)*y]=gcd(a,b)
得到递推关系 xn-1=yn yn-1=xn-(a/b)*yn
而边界就是在求gcd过程中当b==0时 有a'*x'+0*y'==gcd(a',0) 可以看出x'==1,y'==0
再将求得的x与y同除 c/gcd(a,b) 即可
参考博客点击打开链接 上边的证明也比较详细
欧几里得算法就是gcd
扩展欧几里得就是 求方程ax+by=c的最小整数解
1. c%gcd(a,b)!=0 则方程无解
2. c%gcd(a,b)==0
则有a*x+b*y==gcd(a,b)成立
因为gcd(a,b)==gcd(b,a%b) 所以b*x+(a%b)*y==gcd(b,a%b)
因为a%b==a-(a/b)*b 所以a*y+b[x-(a/b)*y]=gcd(a,b)
得到递推关系 xn-1=yn yn-1=xn-(a/b)*yn
而边界就是在求gcd过程中当b==0时 有a'*x'+0*y'==gcd(a',0) 可以看出x'==1,y'==0
再将求得的x与y同除 c/gcd(a,b) 即可
参考博客点击打开链接 上边的证明也比较详细
#include <bits/stdc++.h> using namespace std; #define ll long long ll exgcd(ll a,ll b,ll &x,ll &y) { ll t,gcd; if(b==0) { x=1,y=0; return a; } gcd=exgcd(b,a%b,x,y); t=x; x=y; y=t-a/b*y; return gcd; } void calculate(ll a,ll b,ll c) { ll gcd,ans,x,y; gcd=exgcd(a,b,x,y); if(c%gcd!=0) { printf("-1\n"); return; } printf("%lld %lld\n",x*(c/gcd),y*(c/gcd)); return; } int main() { ll a,b,c,ans; while(scanf("%lld%lld%lld",&a,&b,&c)!=EOF) { calculate(a,b,-c); } return 0; }
相关文章推荐
- CodeForces 7C - Line
- CodeForces 7C Line Exgcd(数论)
- Codeforces 7C Line(拓展欧几里得)
- codeforces 7C Line 扩展欧几里德 Java
- CodeForces - 7C Line(扩展欧几里得模板)
- CodeForces 7C Line Exgcd(数论)
- codeforces 7c line(扩展欧几里得)
- Line---CodeForces 7C(扩展欧几里得算法)
- CodeForces - 7C Line(扩展欧几里得)
- CodeForces 7C【扩展欧几里得】
- CodeForces 251 A.Points on Line(二分)
- 7C. Line【拓展欧几里得】 数论模板
- CodeForces 7C
- CodeForces 7 C.Line(一元线性同余方程)
- CodeForces 358A - Dima and Continuous Line(模拟)
- codeforces 650d Zip-line
- 【欧几里得响彻群山】CodeForce 7C—Line
- codeforces 549G G. Happy Line(贪心)
- Codeforces Zip-line 650D 345Div1D(LIS)
- codeforces 710B - Optimal Point on a Line