0
点赞
收藏
分享

微信扫一扫

裴蜀定理-->扩展欧几里得<--欧几里得

刘员外__ 2022-03-12 阅读 46
c++算法

裴蜀定理:

1.对于任意一对正整数a,b ,一定存在非零整数x,y,使得ax+by==gcd(a,b);

2. 且gcd(a,b)是x,y所能凑出来的最小的正整数。

好的,那么我们该怎么求这个x,y呢?下面就是主角:扩展欧几里得算法

那么欧几里得是什么呢?其实就是gcd....

核心思想即:gcd(a,b)==gcd(b,a%b);

简单证明如下:

gcd(a,b)=r;

a=k1r;

b=k2r;

a%b==k1r%k2r==(k1%k2)r

然后我们可以看到两个式子是等价的,一直递归下去直到b=0结束;

继续扩展欧几里得:)

#include<iostream>
#include<cstdio>
using namespace std;

int exgcd(int a,int b,int &x,int &y)
{
    if(b==0) 
    {
         x=1,y=0;
         return a;
    }
    int d=exgcd(b,a%b,y,x);//b与y,a与x对应起来;
    y-=(a/b)*x;
    return d;
}

int main()
{
    int n;
    cin>>n;
    int a,b,x,y;
    while(n--)
    {
        cin>>a>>b;
        exgcd(a,b,x,y);
        printf("%d %d\n",x,y);
    }
    return 0;
}

举报

相关推荐

0 条评论