最大公约数与扩展欧几里得算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大公约数与扩展欧几里得算法相关的知识,希望对你有一定的参考价值。

一、朴素递归算法

int zuidagongyueshu(int m, int n) {
    if (n == 0) {
        return m;
    }
    return zuidagongyueshu(n, m % n);
} 

 

二、迭代算法

int zuidagongyueshu2(int m, int n) {
    while (n!=0) {
        int tmp=m%n;
        m=n;
        n=tmp;
    }
    return m;
}

三、扩展欧式算法

void exEuclid(int a, int b, int&x, int&y) {
    if (b==0) {
        if (a!=1) {
            puts("Mei you jie la QwQ");
        }
        x=1;
        y=0;
        return;
    }//据说不停的算b总会有一天到0 
    int k=a/b,c=a%b;
    exEuclid(b,c,x,y);
    int xp=x,yp=y;
    x=yp;
    y=xp-k*yp;
}
/*
类比辗转相除法 不停地迭代 
a = kb + d
(kb + d)x + by = c
b(kx + y) + dx = c 
*/

 

以上是关于最大公约数与扩展欧几里得算法的主要内容,如果未能解决你的问题,请参考以下文章

欧几里得算法与扩展欧几里得算法

day 2 - 4 最大公因数 与 (扩展)欧几里得算法

欧几里得算法与扩展算法相关内容

扩展欧几里得(exgcd)与同余详解

欧几里德与扩展欧几里德算法(转)

扩展欧几里得与乘法逆元