这是我为解决问题而编写的代码:
let isPrime = function(n) {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
};
function nextPrime(num) {
let newNum = num;
for (let i = 0; i < newNum; i++) {
if (!isPrime(newNum)) {
newNum += 1;
} else if (isPrime(newNum)) {
return newNum;
}
}
};
我的计划是:
// increment the num by 1 and check if that new num is prime;
// if not, increment again and check again. Repeat the process untill prime is found.
输入和(预期输出已注释):
console.log(nextPrime(2)); // 3
console.log(nextPrime(3)); // 5
console.log(nextPrime(7)); // 11
console.log(nextPrime(8)); // 11
console.log(nextPrime(20)); // 23
console.log(nextPrime(97)); // 101
我得到的输出;
2
3
7
11
23
97
我想知道我的实现到底错在哪里。另外,我希望代码没有花哨的方法,因为我对这一切都很陌生。谢谢!
赋值
newNum = num
恰恰不会使 newNum
成为一个新数字,而是相同!这就是为什么当输入参数为素数时函数立即返回的原因。
顺便说一句,循环会更干净,因为
do
{
newNum += 1;
} while (!isPrime(newNum));
function nextPrime(previousPrime) {
let value = previousPrime;
if (value > 2) {
let i, q;
do {
i = 3;
value += 2;
q = Math.floor(Math.sqrt(value));
while (i <= q && value % i) {
i += 2;
}
} while (i <= q);
return value;
}
return value === 2 ? 3 : 2;
}