求最大公约数——算法设计与分析基础随笔(一)

本文介绍了求解两个数最大公约数(GCD)的算法,包括欧几里得算法的递归原理及传统计算方法。同时讨论了通过质因数分解寻找GCD的挑战,并提及了埃拉托色尼筛法在寻找质因数中的应用。

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

求两个数m和n的最大公约数,方法有很多种,最容易想到的就是遍历到min(m, n)为止,找出最大的公约数,再进行剪枝,遍历到min(m, n)的平方根为止。方法有很多,上述两种只是最简单的,也是最没有技术含量的,接下来记录的是一些较为巧妙的方法。

 算法出自古希腊数学家欧几里得所著的《几何原本》,这本书里面讲解了一个简单的公约数的算法。用现代数学的术语来表示,欧几里得算法采用的方法就是递归下列等式,直到m mod n等于0:

 gcd(m, n) = gcd(n, m mod n)  (m mod n 表示m除以n之后的余数) 

一般传统的计算gcd(m, n)的算法如下:

第一步:将min(m, n)的值赋给t;

第二步:m除以t,如果余数为0,则进入第三步;否则进入第四步;

第三步:n除以t,如果余数为0,返回t的值作为结果;否则进入第四步;

第四步:t = t - 1;返回第二步。

注意这个算法有一个输入的要求,不可以输入0,因为输入0的话t会等于0,也就会报错。

实现的代码如下:

    private int gcd(int m, int n) {
        int result = 1;
        int t = Math.min(m, n);

        if (t == 0) {//筛选出输入有问题的输入
            retu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值