You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中同时创建数组并遍历直至找到公倍数

解决JavaScript中动态生成倍数数组直到找到共同值的问题

我懂你的困扰——要是得动态生成两个倍数数组,直到找到第一个共同的公倍数,确实没法提前预估循环要跑多少次,预先生成固定长度的数组既浪费内存,还可能一不小心漏掉目标值。其实我们完全不用先把数组都建好,有几种更灵活的方案,终止条件也非常明确:

方案1:不生成数组,直接跟踪当前倍数(最高效)

找公倍数本质上就是找两个数的倍数序列中第一个相等的数,完全不需要存储所有之前的倍数。我们可以分别跟踪两个数的当前倍数,每次把较小的那个往上加,直到两者相等——这就是终止条件!

// 定义我们要找公倍数的两个数
const num1 = 3;
const num2 = 5;

// 初始化各自的第一个倍数
let current1 = num1;
let current2 = num2;

// 循环直到两个当前倍数相等
while (current1 !== current2) {
  // 谁小就把谁加一个底数,逼近目标
  if (current1 < current2) {
    current1 += num1;
  } else {
    current2 += num2;
  }
}

console.log("找到的第一个公倍数:", current1); // 输出 15

这种方法没有额外的数组存储,时间复杂度也很低,是最优解。

方案2:必须生成数组时的动态构建法

如果你的场景需要保留生成的所有倍数数组,那我们可以每次往数组里添加下一个倍数,然后实时检查是否出现共同值,一旦找到就终止循环:

const num1 = 3;
const num2 = 5;
const arr1 = [];
const arr2 = [];
let commonValue = null;

// 循环直到找到共同值
while (commonValue === null) {
  // 往数组里追加下一个倍数(第一个元素直接用底数,之后用最后一个元素加底数)
  arr1.push(arr1.length === 0 ? num1 : arr1.at(-1) + num1);
  arr2.push(arr2.length === 0 ? num2 : arr2.at(-1) + num2);

  // 检查当前arr1的最后一个元素是否在arr2中
  if (arr2.includes(arr1.at(-1))) {
    commonValue = arr1.at(-1);
  }
  // 反过来检查arr2的最后一个元素是否在arr1中(防止其中一个数组先抵达目标值)
  else if (arr1.includes(arr2.at(-1))) {
    commonValue = arr2.at(-1);
  }
}

console.log("找到的共同值:", commonValue);
console.log("生成的数组1:", arr1); // [3, 6, 9, 12, 15]
console.log("生成的数组2:", arr2); // [5, 10, 15]

这里的终止条件就是commonValue !== null,一旦找到共同值就停止循环。不过要注意,includes方法是O(n)复杂度,如果目标公倍数很大,性能会比方案1差一些。

方案3:数学公式直接计算最小公倍数(终极高效)

如果你只是需要找到最小公倍数,完全不用循环生成任何东西,用数学公式就能直接算:最小公倍数 = 两数乘积 / 最大公约数(GCD),而最大公约数可以用辗转相除法快速求得:

// 辗转相除法求最大公约数
function calculateGCD(a, b) {
  while (b !== 0) {
    const temp = b;
    b = a % b;
    a = temp;
  }
  return a;
}

// 计算最小公倍数
function calculateLCM(a, b) {
  return (a * b) / calculateGCD(a, b);
}

console.log(calculateLCM(3, 5)); // 15
console.log(calculateLCM(4, 6)); // 12

这种方法是效率最高的,适合只需要获取公倍数数值的场景。

内容的提问来源于stack exchange,提问作者Nicolas Hochard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:54:28