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

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

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

参考链接


目录
打赏
0
0
0
0
6
分享
相关文章
【Leetcode -231. 2的幂 -242.有效的字母异位词 -258.各位相加】
【Leetcode -231. 2的幂 -242.有效的字母异位词 -258.各位相加】
52 0
【Leetcode -463.岛屿的周长 - 476.数字的补码】
【Leetcode -463.岛屿的周长 - 476.数字的补码】
58 0
|
5月前
整数转罗马数字
罗马数字由 I、V、X、L、C、D、M 七种字符组成,分别代表 1、5、10、50、100、500、1000。通常小数值位于大值右侧,如 12 表示为 XII;特殊情况下,小值位于大值左侧表示减法,如 4 表示为 IV。转换规则适用于 1 至 3999 的整数。
66 0
罗马数字转整数
这篇文章提供了一个Java方法,用于将罗马数字转换为整数,通过一个字符一个字符地解析罗马数字字符串并根据特定规则进行相应的加法或减法运算。
|
11月前
13. 罗马数字转整数
13. 罗马数字转整数
66 2
|
11月前
12. 整数转罗马数字
12. 整数转罗马数字
81 1
|
10月前
13.罗马数字转整数
13.罗马数字转整数
|
10月前
|
12.整数转罗马数字
12.整数转罗马数字
|
11月前
55.输入两个正整数m和n,求其最大公约数和最小公倍数
55.输入两个正整数m和n,求其最大公约数和最小公倍数
72 0
PTA-求整数的位数及各位数字之和
求整数的位数及各位数字之和
104 4
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等