更相减损法

本文介绍了一种古老而有效的算法——更相减损法,用于寻找两个正整数的最大公约数。该算法通过不断减小两数之间的差距,直至找到两者相等的那一刻,从而得出最大公约数。

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

定义:

更相减损法原本是为了约分而设计的:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

1:任意给定两个正整数;判断它们是否都是偶数。

若是,则用2约简;若不是则执行第二步。

2:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。

继续这个操作,直到所得的减数和差相等为止。

 

第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数,相当于不要第一步。

换成公式的写法:

如果A > B,则 gcd(A,B) = gcd(B,A-B)

如果A < B,则 gcd(A,B) = gcd(A,B-A)

 

证明:

不妨设A>B,设A和B的最大公约数为X,所以 A=aX,B=bx,其中a和b都为正整数,切a>b。

C = A-B,则有C=aX−bX=(a−b)X

 

因为a和b均为正整数,所以C也能被X整除,即A、B、C最大公约数均为X

所以gcd(A,B) = gcd(B,A-B)

 

代码实现:

 

int GCD(int a, int b) {

    while (a != b) {

        if (a > b)

            a = a - b;

        else

            b = b - a;

    }

    return a;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值