我已经看到了其他答案,但我想知道为什么我的代码无效或可能只是花费太长时间来计算。它写在下面。
function isPrime(number){
for (var i = 2; i < number; i++){
if (number % i === 0){
return false
}
}
return true
}
function firstNPrimes(num){
var largestPrimeFactor = ''
for (var i = 2; i < num/2; i++){
if (num % isPrime(i) === 0) {
largestPrimeFactor = i;
}
}
return largestPrimeFactor;
}
console.log(firstNPrimes(600851475143));
答案 0 :(得分:0)
所以我不是在寻找大量的优化,只是找到输入的最大素数因子,使用你的例行程序的精神,但是用布尔值修复mod,看看我是否是一个除数和素数而不是检查如此高,看看一个数字是否为素数且倒数,而不是向上)。 不过,我可以把它弄清楚,但是你的方法需要花很长时间来检查一个非常大的数字是否是最优的。
function isPrime(n) {
for (var i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
function firstNPrimes(num) {//consider better name
if (isPrime(num)) {
return num;
}
for (var i = Math.ceil(num / 2); i > 1; i--) {
if (((num % i) == 0) && (isPrime(i))) {
return i;
}
}
//should never get here
return number.NaN;
}
console.log(firstNPrimes(17000));
console.log(firstNPrimes(1570000));
//do not put in very large numbers, takes too long