我现在正在做第三个项目的问题。到目前为止,我已经找到了解决问题的方法,即找到600851475143的最大素数因子。
我写了一小段代码,可以将数字的所有素因子放入数组中。我遇到的问题是数字可能太大而无法计算。我已经使用了其他大数字(不像这个那么大)并且它们工作正常但是这个只是冻结了页面,就像它在无限循环中一样。这是代码:
var primes = [];
function factor (largestNumber) {
var a = largestNumber;
var b = 2;
while (b < largestNumber) {
if (a % b == 0) {
a /= b;
primes.push(b);
b = 2;
} else {
b++;
}
}
}
factor(600851475143);
console.log(primes);
答案 0 :(得分:2)
您的算法不是最佳的。
function factor(largestNumber) {
var primes = []; // using local value
var a = largestNumber;
var b = 2;
while (b <= Math.floor(Math.sqrt(a))) { // we do not need to check whole number
// over and over again.
// We could check to a only
// or even to sqrt(a) only
if (a % b == 0) {
a /= b;
primes.push(b);
// there is no reason to reset value
} else {
b++;
}
}
primes.push(a); // rest number would be always prime
return primes;
}
console.log(factor(600851475143));
答案 1 :(得分:0)
这可能是一种有用的方法,将最大的主要因素分成3部分。
将最大的Num切成2个关闭数,例如40 =&gt; 5 * 8
获取更大的num(8)并找出所有小数量的小数。存储到阵列。
使用循环获取最大的素数因子。
就是这样,我今晚会试试。如果我这样做,我将添加jsfiddle addr。 :)