如何检测JavaScript随机数数组元素是否两两互为倍数
实现方案
核心检测逻辑
核心思路是遍历数组所有两两组合,判断较大值是否能被较小值整除,只要存在任意一组满足该条件,就说明数组不符合要求。
function hasMultiplePair(arr) { // 先升序排序,避免重复判断两个数的大小 const sorted = arr.sort((a, b) => a - b); const len = sorted.length; for (let i = 0; i < len; i++) { for (let j = i + 1; j < len; j++) { // 较大值对较小值取模为0,说明存在倍数关系 if (sorted[j] % sorted[i] === 0) { return true; } } } return false; }
函数返回true代表数组存在互为倍数的元素,需要重新生成;返回false则符合要求。
完整生成+校验示例
搭配随机数生成逻辑使用,示例为生成1-100范围内的符合要求的5元素数组:
// 生成指定范围的随机正整数 function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function generateValidArray(length = 5, min = 1, max = 100) { let arr; do { arr = Array.from({length}, () => getRandomInt(min, max)); // 提前去重:重复元素天然是1倍关系,直接排除 arr = [...new Set(arr)]; } while (arr.length !== length || hasMultiplePair(arr)); return arr; } // 调用示例 const result = generateValidArray(); console.log(result);
注意事项
- 如果随机数取值范围过小,可能会出现死循环,建议取值范围至少是目标数组长度的3倍以上,降低碰撞概率
- 上述代码默认处理正整数场景,如果需要兼容小数、负数,需要调整取模判断逻辑
内容的提问来源于stack exchange,提问作者LOLapalooza
相关产品推荐
相关产品推荐

