你会求《数字范围内的最小公倍数》吗?

简介: 你会求《数字范围内的最小公倍数》吗?

这是我参与更文挑战的第21天,活动详情查看:更文挑战

今天我在练习FreeCodeCamp的时候,发现一道很有意思的初级算法题目,特地和大家分享一下。

题目描述

找到可以被两者以及这些参数之间范围内的所有序列号均分的所提供参数的最小公倍数。

该范围将是一个由两个数字组成的数组,不一定按数字顺序排列。

例如,如果给定 1 和 3,请找出 1 和 3 的最小公倍数,该倍数也可以被1 和 3之间的所有数字整除。 这里的答案是 6。

测试实例

image.png

解题思路

当我刚刚看到这道题目的时候,我在想求最小公倍数这还不简单?但是事情仿佛没那么容易,原因在于题目中让我们求的不是两个数字的最小公倍数,而是这个区间范围内的最小公倍数,所以看懂题目很关键。

难点:如何求两个数的最小公倍数

思路

  1. 首先默认两个数字中较大的那个为最小公倍数。
  2. 通过while循环,只要默认的最小公倍数小于等于两数的乘积便进入循环,如果这个默认的最小公倍数对左边的数趋于为零,说明这个是最小公倍数直接返回即可,反之,让这个默认的最小公倍数加上右边的值继续循环。

代码

// 获取最小公倍数的函数
    function getSCM(left, right) {
        // 首先默认最小公倍数为right
        let SCM = right;
        while (SCM <= right * left) {
            if (SCM % left === 0) {
                return SCM
            } else {
                SCM = SCM + right;
            }
        }
    }
复制代码

解题代码

function smallestCommons(arr) {
    arr.sort((next, pre) => next - pre);
    // 获取最小公倍数的函数
    function getSCM(left, right) {
        // 首先默认最小公倍数为right
        let SCM = right;
        while (SCM <= right * left) {
            if (SCM % left === 0) {
                return SCM
            } else {
                SCM = SCM + right;
            }
        }
    }
    // 生成数组
    const newArr = [];
    for (let i = arr[0]; i <= arr[1]; i++) {
        newArr.push(i);
    }
    let result = arr[0] * (arr[0] + 1);
    // 通过循环不断更新最小公倍数
    for (let i = 2; i < newArr.length; i++) {
        result = getSCM(newArr[i], result);
    }
    return result;
}
smallestCommons([1, 5]);
复制代码

本题给我们的启示

  1. 学会通过循环的方式来求两个数字的最小公倍数。
  2. 学会通过更新的方式来获取,范围内的最小公倍数。

参考链接


相关文章
|
算法 测试技术 C#
C++数位算法:数字1的个数
C++数位算法:数字1的个数
|
5月前
判断一个数字是否为质数
判断一个数字是否为质数。
135 9
|
10月前
28.求任意一个整数的十位上的数字
28.求任意一个整数的十位上的数字
93 3
|
10月前
|
机器学习/深度学习
判断一个数字是否是2的N次方
判断一个数字是否是2的N次方
87 0
|
10月前
|
人工智能
PTA-求整数的位数及各位数字之和
求整数的位数及各位数字之和
95 4
|
10月前
leetcode 2520 统计能整除数字的位数
leetcode 2520 统计能整除数字的位数
44 0
|
10月前
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
|
人工智能 算法 程序员
求两个正整数的最小公倍数
求两个正整数的最小公倍数
131 1
|
10月前
[leetcode 数位计算]2520. 统计能整除数字的位数
[leetcode 数位计算]2520. 统计能整除数字的位数
|
算法 测试技术 C#
C++二分查找算法的应用:第 N 个神奇数字
C++二分查找算法的应用:第 N 个神奇数字