扩展欧几里德算法(数论)
根据贝祖定理:如果a、b是整数,那么一定存在整数x、y使得ax+by=gcd(a,b)。
扩展欧几里德定理的作用就是不仅求出了最小公倍数,还能求出一组解x,y(x,y可能为负数),使得 ax + by = gcd(a,b)
#include<bits/stdc++.h>
#define llinf (0x3f3f3f3f3f3f3f3f)
#define inf (0x3f3f3f3f)
typedef long long i64;
using namespace std;
i64 exgcd(i64 a,i64 b,i64& x,i64& y)
{
if(b == 0)
{
x = 1,y = 0;
return a;
}
i64 r = exgcd(b,a%b,x,y);
i64 tmp = y;
y = x - (a/b)*y;
x = tmp;
return r;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0),cout.tie(0);
i64 a,b,x,y;
cin>>a>>b;
i64 r = exgcd(a,b,x,y);
cout<<x<<" "<<y<<'\n';
cout<<((x%b)+b)%b<<" "<<((y%a)+a)%a<<'\n';
}
不怕万人阻挡,只怕自己投降。
posted on 2019-10-15 19:48 chengyulala 阅读(157) 评论(0) 编辑 收藏 举报