项目欧拉#3解释

时间:2015-03-22 12:26:11

标签: javascript

以下代码在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);

1 个答案:

答案 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