博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大公约数的算法实现
阅读量:5911 次
发布时间:2019-06-19

本文共 848 字,大约阅读时间需要 2 分钟。

Table of Contents

  • 1 GCD 算法的基本原理
  • 2 GCD 算法的实现
    • 2.1 递归实现
    • 2.2 迭代实现

1 GCD 算法的基本原理

GCD=Greatest Common Divisor

欧几里德定理
若 a=b×r+q 则gcd(a, b) = gcd(b, q).
欧几里德定理的证明
a = b × r + q
设c = gcd(a, b), a = m×c, b= n×c
q = a - b× r = (m - n × r)×c
下面证明 m-n×r与n互质:
假设不互质,则存在k使得 m-n×r = x×k, n = y×k.
则:
a = m×c = (n×r + x×k)×c = (y×r + x×k)×c×k
b = n×c = y×c×k
与 c=gcd(a, b) 矛盾。
辗转相除法的算法实现

a = b × r_1 + q_1if q_1 = 0      then return belseb = q_1 × r_2 + q_2if q_2 = 0      then return q_1else

……

直到找到GCD为止。

2 GCD 算法的实现

2.1 递归实现

int gcd(int a, int b){        if(!b) return a;        else  return gcd(b, a%b );}

2.2 迭代实现

int gcd(int a, int b){        int c = a%b;        while(c){                a = b;                b = c;                c = a % b;        }        return b;}

Author: visaya fan 

Date: 2011-08-11 18:01:00

HTML generated by org-mode 6.33x in emacs 23

转载地址:http://gwmpx.baihongyu.com/

你可能感兴趣的文章
CSS设计模式
查看>>
常见问题解决
查看>>
java容器类1:Collection,List,ArrayList,LinkedList深入解读
查看>>
mysql 数据库修改名字
查看>>
Anagram
查看>>
BIT软件需求工程与UML建模课程第三周工作总结
查看>>
hdu 1330
查看>>
Android C2DM学习 - 云端推送
查看>>
微信开发https服务搭建
查看>>
Error No matching provisioning profiles found
查看>>
理解JavaScript中的回调函数
查看>>
2016-11-10试题解题报告
查看>>
排序算法的稳定性
查看>>
vim的基础操作
查看>>
AFSoundManager
查看>>
HLG 1360 Leyni的国家III【并查集】
查看>>
hdu4625 JZPTREE(斯特林数+dp)
查看>>
linux网络编程涉及的函数
查看>>
三列布局
查看>>
数据表的相关操作
查看>>