欧几里德算法(辗转相除法)

欧几里德算法,又称辗转相除法,用于计算两个正整数的最大公约数。算法通过不断进行除法和取余,直至余数为0,此时的除数即为最大公约数。例如,gcd(50, 15) = 5。其时间复杂度为O(logN),通过每次迭代将余数减半,最多经过2log2a1次操作就能找到结果。" 123930172,9727201,HashMap遍历源码深度解析,"['Java', '数据结构', 'HashMap']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欧几里德算法(辗转相除法)

简介

欧几里得算法是用来求两个正整数最大公约数的算法,算法将除数和余数反复做除法运算,当余数为0时,当前算式的除数为最大公约数。

例子

求50和15的最大公约数 gcd(50,15)
50÷15=3(余5)(1) 50\div15=3(余5) \tag 1 50÷15=35(1)
以(1)的除数作为新的被除数,以(1)的余数作为新的除数
15÷5=3(余0)(2) 15\div5=3(余0) \tag 2 15÷5=30(2)
在(2)中,余数为0,所以gcd(50,15)=5

分析

求gcd(a, b)(方便起见,假设a>b)
设a=kb+r(k为系数,且是整数;r为余数)(3) 设a=kb+r(k为系数,且是整数;r为余数) \tag 3 a=kb+rkr(3)

∴r=a−kb(即r=a mod b)(4) \therefore r=a-kb(即r=a\ mod\ b) \tag 4 r=akb(r=a mod b)(4)

令d为(a, b)的一个公约数,即
{ a mod d=0b mod d=0(5) \left\{\begin{aligned} a\ mod\ d=0 \\ b\ mod\ d=0 \end{aligned}\right. \tag 5 { a mod d=0b mod d=0(5)
对(4)左右同除以d可得
r÷d=a÷d−(b÷d)k(6) r\div d=a\div d-(b\div d)k \tag 6 r÷d=a÷d(b÷d)k(6)
参考(5)可知与a÷d 与 b÷d与a\div d\ 与\ b\div da÷d  b÷d的结果都为整数(余数为0),且k为整数,所以r÷dr\div dr÷d的结果为整数,即
r mod d=0(7) r\ mod\ d=0 \tag 7 r mod d=0(7)
所以d不仅是(a, b)的公约数,也是(b, r)即(b, a mod b)的公约数,(a, b)与(b, a mod b)公约数相同,那么最大公约数也相同
令a1=b, b1=a mod b; a2=a mod b, b2=b mod b1 以此类推(8) 令a_1=b,\ b_1=a\ mod\ b;\ a_2=a\ mod\ b,\ b_2=b\ mod\ b_1\ 以此类推 \tag 8 a1=b, b1=a mod b;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值