为何我的质数检查函数对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
相关产品推荐
相关产品推荐

