美文网首页
欧几里得算法

欧几里得算法

作者: IT孤独者 | 来源:发表于2017-01-08 20:56 被阅读0次

可以使用辗转相除的方法求解两个数的最大公因子。

证明:
令c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素(假设k-mj=xd,j=yd (d>1),则k=mj+xd=myd+xd=(my+x)d,则a=kc=(my+x)cd,b=jc=ycd,则a与b的一个公约数cd>c,故c非a与b的最大公约数,与前面结论矛盾),否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。

C++代码实现如下:

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

unsigned int gcd(unsigned int a, unsigned int b)
{
    if (b > a )
        swap(a, b);

    unsigned  int r = a % b;
    if (r == 0)
        return b;
    else
        return gcd(b, r);
}

int main(int argc, char ** argv)
{
    int a = 10;
    int b = 15;
    cout << "Input:" << a << ", " << b << endl;
    cout << "Output:" << gcd(a, b) << endl;
    return 0;
}

相关文章

  • 扩展欧几里得算法

    资料 欧几里得算法 扩展欧几里得算法 扩展欧几里得算法应用 欧几里得算法 欧几里得算法用于求两个数的最大公约数 证...

  • 算法学习(2)----丢番图方程

    之前一篇随笔"算法学习(1)----扩展欧几里得算法"记录了对朴素欧几里得算法和扩展欧几里得算法的学习和认识...

  • 扩展欧几里德算法

    扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)...

  • 扩展欧几里得算法

    扩展欧几里得算法(Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展...

  • GCD欧几里得算法 & EXGCD扩展欧几里得算法

    欧几里得算法欧几里得算法 (Euclidean algorithm) 是用来解决最大公约数问题的,通常采用辗转相除...

  • 组合数求解

    扩展欧几里得算法原理求解逆元的方法(本文采用扩展欧几里得算法进行求解)求组合数的两种方法Lucas定理

  • 拓展欧几里得算法

    问题 求线性同余方程ax+by=c的整数解 思路 首先介绍下欧几里得算法的原理,众所周知,欧几里得算法是辗转相除法...

  • 欧几里得算法

    欧几里得算法 介绍 概念 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和...

  • 数论——欧几里得算法

    欧几里得算法 介绍 【欧几里得算法】又名辗转相除法,是求最大公约数的算法。两个整数的最大公约数是能够同时整除它们的...

  • 欧几里得算法

网友评论

      本文标题:欧几里得算法

      本文链接:https://www.haomeiwen.com/subject/nfccbttx.html