算法01-欧几里得算法

作者: 绿豆粥与茶叶蛋 | 来源:发表于2017-03-09 10:36 被阅读141次

前言:

从事计算机行业,如果不懂算法,那么很难使自己的技术水平有一个质的提升,自觉自己的算法基础比较薄弱,因此开此篇算法100篇系列,以督促自己在程序猿的道路上越走越远😝!

正文:

既然是开篇,俗话说万事开头难,笔者就先来个简单点的吧。

欧几里得算法:
自然语言描述:
计算两个非负整数p和q的最大公约数:若q是0,则最大公约数为p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。
C语言实现:
int gcd(int p,int q){
    if (0==q) {
        return p;
    }
    int r = p%q;
    return gcd(q, r);
}
欧几里德算法的思想:

辗转相除法是欧几里德算法的核心思想,欧几里德算法说白了其实就是辗转相除法的计算机算法的实现而已。下面我们先说说辗转相除法,辗转相除法的内容:如果用gcd(a,b)来表示a和b的最大公约数,那么根据辗转相除法的原理,有gcd(a,b)=gcd(a,a mod (b)),其中mod()表示模运算,用C语言表示模运算a%b,即a除以b取余,并且不妨让a>b,这样方便于模运算。

辗转相除法的正确性gcd(a,b)=gcd(a,a mod (b))的证明:
First:令c为a和b的最大公约数,数学符号表示为c=gcd(a,b)。因为任何两个实数的最大公约数c一定是存在的,也就是说必然存在两个数k1,k2使得a=k1*c, b=k2*c;
Second:a mod (b)等价于存在整数r,k3使得余数r=a – k3*b;
即r = a – k3*b
      = k1*c – k3*k2*c
      = (k1 – k3*k2)*c
显然,a和b的余数r是最大公约数c的倍数!

结语:

此篇为算法100篇系列的第一篇,后续会有陆续的篇章推出,由易到难循序渐进,共同加油,欧耶✌️!
未完待续...

不积跬步,无以至千里;不积小流,无以成江海。

相关文章

  • 扩展欧几里得算法

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

  • 算法01-欧几里得算法

    前言: 从事计算机行业,如果不懂算法,那么很难使自己的技术水平有一个质的提升,自觉自己的算法基础比较薄弱,因此开此...

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

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

  • 扩展欧几里德算法

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

  • 扩展欧几里得算法

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

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

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

  • 组合数求解

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

  • 拓展欧几里得算法

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

  • 数论——欧几里得算法

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

  • 欧几里得算法

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

网友评论

本文标题:算法01-欧几里得算法

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