找到给定数字的下一个更大素数

问题描述 投票:0回答:2

这是我为解决问题而编写的代码:

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

我想知道我的实现到底错在哪里。另外,我希望代码没有花哨的方法,因为我对这一切都很陌生。谢谢!

javascript
2个回答
0
投票

赋值

newNum = num
恰恰不会使
newNum
成为一个新数字,而是相同!这就是为什么当输入参数为素数时函数立即返回的原因。

顺便说一句,循环会更干净,因为

do
{
  newNum += 1;
} while (!isPrime(newNum));

0
投票
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.