首页 > 编程语言 > 详细

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

时间:2017-01-25 16:29:54      阅读:227      评论:0      收藏:0      [点我收藏+]

一、朴素递归算法

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 
*/

 

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

原文:http://www.cnblogs.com/9pounds15pence/p/6349597.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!