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

为何我的质数检查函数对5的倍数返回true?

质数生成器的Bug修复及最终实现

我正在测试一款基于二十多年前自创公式开发的质数生成器,工具虽可正常运行,但测试生成的数字时发现,自己写的primeNum函数会错误地将5的倍数(比如15、25、35、45等)判定为质数,返回true。相关代码如下:

let five = 5
let fifteen = 15

const primeNum = (num) => num < 2 ? false : ((num === 2) || num % 2 !== 0) ? true : false

const f = primeNum(five)
console.log(f) // true

const ft = primeNum(fifteen)
console.log(ft) // true

// 25、35、45等数字也会出现同样情况

更新说明:
我最终采用了质因数分解和最近除数方案解决问题,代码如下:

// 质因数分解
const factors = num => {
  let tmp = num
  let result = {};
  for (let i = 2; i <= num; i++) {
    while (num % i === 0) {
      result[i] = (result[i] || 0) + 1;
      num /= i;
    }
  }

  if(shift(tmp, 2) === tmp || shift(tmp, 3) === tmp) {
    return false
  }
  else if(Object.keys(result).length === 1 && tmp % 3 !== 0) {
    return true
  }
}

// 最近除数计算
function shift(number, divisor){
  return number + (divisor - (number % divisor)) % divisor
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:24:12