扩展欧几里德算法(数论)

根据贝祖定理:如果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';
}

  https://blog.csdn.net/destiny1507/article/details/81750874

  https://www.cnblogs.com/Antigonae/p/10106068.html

posted on 2019-10-15 19:48  chengyulala  阅读(154)  评论(0编辑  收藏  举报

导航