欧几里得最大公约数算法

本文地址:http://www.cnblogs.com/HarryGuo2012/p/4785167.html 

最大公约数

想必大家小学就学过什么事最大公约数吧,现在给出一个数学上的定义:定义$g$是整数$a$和$b$的最大公约数,当且仅当$g$是同时整除$a$和$b$的数中最大的那个。

欧几里得算法

欧几里得算法可以写成如下简单的形式:

$$gcd(a,b) =\begin{cases} a, & \mbox{if }b=0 \\gcd(b,a\ mod\ b), & \mbox{if }b\ne0\end{cases}$$

算法的证明

算法的过程可以写成如下的形式:

$$a=q_0b+r_0$$

$$b=q_1r_0+r_1$$

$$r_0=q_2r_1+r_2$$

$$r_1=q_3r_2+r_3$$

$$\cdots$$

$$r_{k-1}=q_{k+1}r_k$$

显然,欧几里得算法的答案就是$r_k$。

先证明$r_k$能整除$a$和$b$:

$$\because r_{k-1}=q_{k+1}r_k$$

$$\therefore r_{k-2}=q_kr_{k-1}+r_k=(q_{k+1}q_k+1)r_k$$

$$\therefore r_k\mid r_{k-2}$$

$$\cdots$$

$$\therefore r_k\mid b$$

$$\therefore r_k\mid a$$

$$\therefore gcd(a,b)=g\ge r_k$$

接下来证明$gcd(a,b)=g$能整除$r_k$

$$\mbox{令} a=ng\ b=mg$$

$$\because a=q_0b+r_0$$

$$\therefore r_0=a-q_0b=ng-q_0mg=(n-q_0m)g$$

$$\mbox{同理}g\mid r_k$$

$$\therefore g\le r_k$$

$$\mbox{由前面的证明我们知道} g\ge r_k$$

$$\therefore g=r_k$$

代码

int gcd(int a, int b){
    return b==0?a:gcd(b,a%b);
}

 

转载于:https://www.cnblogs.com/HarryGuo2012/p/4785167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值