求最大公约数欧几里得算法原理证明

  辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

递归gcd代码

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

非递归代码

unsigned int gcd(unsigned int a, unsigned int b)
{
	unsigned int rem;
	while(b != 0)
	{
		rem = a % b;
		a = b;
		b = rem;
	}
	return a;
}

数学证明

证 明 欧 几 里 得 算 法 , 即 g c d ( a , b ) = g c d ( b , a m o d b ) , 前 提 条 件 : { a = m d b = n d m 和 n 互 质 ⇒ d 是 a 和 b 的 最 大 公 约 数 证明欧几里得算法,即gcd(a,b) = gcd(b, a mod b),前提条件:\\ \begin{cases} a=md\\ b=nd\\ m和n互质\\ \end{cases} \Rightarrow d是a和b的最大公约数\\ gcd(a,b)=gcd(b,amodb),:a=mdb=ndmndab
证 明 : 证明:
设 g c d ( a , b ) = d 1 , 则 { a = m d 1 b = n d 1 m , n 互 质 令 a = q b + r 则 r = a − q b = m d 1 − q n d 1 = ( m − q n ) d 1 要 证 明 欧 几 里 得 算 法 , 只 需 证 明 b 和 r 的 最 大 公 因 数 等 于 d 1 即 可 由 上 述 过 程 可 得 , r 可 以 被 d 1 整 除 , 即 d 1 是 r 和 b 的 公 约 数 。 因 此 只 需 要 证 明 n 和 m − q n 互 质 即 可 。 下 面 用 反 证 法 来 证 明 : 假 设 n 与 m − q n 不 互 质 , 设 g c d ( n , m − q n ) = d 2 ( d 2 > 1 ) 则 有 { n = x d 2 m − q n = y d 2 即 m = ( q x + y ) d 2 ⇒ m , n 不 互 质 , 这 与 前 提 m , n 互 质 相 矛 盾 因 此 假 设 不 成 立 , n 和 m − q n 互 质 所 有 r 和 b 的 最 大 公 约 数 为 d 1 g c d ( a , b ) = g c d ( b , a   m o d   b ) , 命 题 得 证 设gcd(a, b) = d_1,则 \begin{cases} a = md_1\\ b = nd_1\\ m,n互质 \end{cases}\\ 令a=qb+r\\ 则r=a-qb\\ =md_1-qnd_1\\ =(m-qn)d_1\\ 要证明欧几里得算法,只需证明b和r的最大公因数等于d_1即可\\ 由上述过程可得,r可以被d_1整除,即d_1是r和b的公约数。\\ 因此只需要证明n和m-qn互质即可。\\ 下面用反证法来证明:\\ 假设n与m-qn不互质,设gcd(n,m-qn)=d_2(d_2>1)\\ 则有 \begin{cases} n=xd_2\\ m-qn=yd_2 \end{cases}\\ 即m=(qx+y)d_2\Rightarrow m,n不互质,这与前提m,n互质相矛盾\\ 因此假设不成立,n和m-qn互质\\ 所有r和b的最大公约数为d_1\\ gcd(a, b) = gcd(b, a\ mod\ b),命题得证 gcd(a,b)=d1,a=md1b=nd1m,na=qb+rr=aqb=md1qnd1=(mqn)d1brd1rd1d1rbnmqnnmqngcd(n,mqn)=d2(d2>1){n=xd2mqn=yd2m=(qx+y)d2m,nm,n,nmqnrbd1gcd(a,b)=gcd(b,a mod b)

欧几里得算法时间复杂度分析

定理: 若 M > N , 则 ( M   m o d   N ) < M 2 。 若M>N,则(M\ mod\ N)<\frac{M}{2}。 M>N,(M mod N)<2M

证明:
存 在 两 种 情 况 。 若 N ≤ M 2 , 则 由 于 余 数 小 于 N , 故 定 理 成 立 若 N > M 2 。 但 是 此 时 M 仅 含 有 一 个 N , 从 而 余 数 为 M − N < M 2 定 理 得 证 。 存在两种情况。\\ 若N \le\frac{M}{2},则由于余数小于N,故定理成立\\ 若N>\frac{M}{2}。但是此时M仅含有一个N,从而余数为M - N < \frac{M}{2}\\ 定理得证。 N2MNN>2MMNMN<2M

  由此定理可得出,欧几里得算法的迭代次数最多是 2 l o g 2 N = O ( l o g 2 N ) 2log_2N=O(log_2N) 2log2N=O(log2N)

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值