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

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

这是我参与更文挑战的第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. 学会通过更新的方式来获取,范围内的最小公倍数。

参考链接


相关文章
【Leetcode -367.有效的完全平方数 -374.猜数字大小】
【Leetcode -367.有效的完全平方数 -374.猜数字大小】
43 0
|
19天前
判断该数字是几位数
【10月更文挑战第22天】判断该数字是几位数。
12 3
|
2月前
将一个正整数分解质因数
将一个正整数分解质因数。
59 8
|
2月前
|
移动开发 算法
求其最大公约数和最小公倍数
求其最大公约数和最小公倍数。
68 5
|
6月前
55.输入两个正整数m和n,求其最大公约数和最小公倍数
55.输入两个正整数m和n,求其最大公约数和最小公倍数
44 0
|
6月前
|
人工智能
PTA-求整数的位数及各位数字之和
求整数的位数及各位数字之和
58 4
求最小公倍数
求最小公倍数
122 0
|
6月前
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
|
人工智能 算法 程序员
求两个正整数的最小公倍数
求两个正整数的最小公倍数
115 1
wustojc求三位整数的逆序数
wustojc求三位整数的逆序数
55 0