以下代码在theodin project.com上发布,作为javascript中Project euler's question 3的解决方案。你能解释为什么没有检查是否n是素数?这是如何运作的?另外,为什么他们将n除以因子并改变其值......因为一旦你将因子的值提高1,你不想要相同的原始数字吗?
var factor = 2;
function getPrime(number) {
while(number != factor) {
if (number % factor === 0) {
number = number / factor;
factor = 2;
} else {factor += 1}
}
// console.log(factor);
function writePrime(factor) {
return factor;
}
console.log(writePrime(factor))
}
getPrime(600851475143);
答案 0 :(得分:2)
将number
除以factor
是有道理的,否则你会发现第一个因素无限次,所以你希望这个因素消失,因此你会分裂。
增加factor
也是有道理的,因为这是你检查的内容。你需要检查2,然后是3,然后是5,等等。
并且您不必检查factor
偶数是否为素数,因为如果不是,number
将不会被它分割,因为它已经被素数因子除掉了factor
。 (如果一个数字不能被2分割,它也不会被4分割,你甚至不能达到4直到你除以2,直到number
不再可以被2分割。)检查{是否{ {1}} number
可分割,可能也比检查factor
是否为素数更快。
但是,factor
应该在函数内部完成,否则连续调用可能会导致无限循环
如果我没有弄错的话,var factor = 2;
可以在循环中完全省略(加速函数),因为你只需要“不增加”因子。
此外factor = 2;
什么都不做,我建议返回值而不是打印它。
writePrime