辗转相除法

【用法】

求两个整数的最大公约数

【证明】

【代码】

伪代码

function gcd(a, b)
    while b ≠ 0
        t ← b
        b ← a mod b
        a ← t
    return a

C++

int gcd(int n,int m)
{
    return  m == 0 ? n : gcd(m, n % m);
}

java

public class MethodOfSuccessiveDivision {
    public static void main(String[] args) {
        System.out.println(gcd(1071, 462));
    }
    public static int gcd(int a, int b){
        if(b == 0){
            return a;
        }else{
            return gcd(b, a % b );
        }
    }
}

【随手记】

最近复习的时候忘记原理就复习一下,我的理解是两个数是线段,最后就是找单位长度把他们均分成若干段,有因为是整数,所以最小就是1。

要求:两个数是整数,m>n

m,n两个都当成有限的线段,那就是要在找到一个合适单位长度将其分成若干段

把n当作单位长度,如果刚好把m剪切完,那最大公因数就n

如果不能,至少m-n<n(记作k),那这段合适的长度就在k中找,

如果k刚好能把n切成若干段,这k也一定能把有n为单位长度是切的那几段刚好切完,这样就找到了最大公约数

如果不能就把n当作代剪绳,n-k作为单位长度,继续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值