我写了一个函数以找到素数,但是它不起作用,因为我无法打破循环

发布于 2025-02-01 22:54:13 字数 609 浏览 3 评论 0原文

function isPrime(n) {

    if (n == 1 ) {
        return (`${n} is niether a prime number nor composite number`)
    }
    else if( n < 1){
        return (`${n} is not a prime number`)
    }
    else{
        for (let i = 2;  i < n; i++) {
            if( n % 2 == 0){
                return result = `${n} is not a prime number`
                break;
            }
            else{
                return result = `${n} is a prime number`
            }
        }
    }
}

console.log(isPrime(15))

我编写一个函数以找到质子数,但是它无法正常工作,因为我无法打破循环

function isPrime(n) {

    if (n == 1 ) {
        return (`${n} is niether a prime number nor composite number`)
    }
    else if( n < 1){
        return (`${n} is not a prime number`)
    }
    else{
        for (let i = 2;  i < n; i++) {
            if( n % 2 == 0){
                return result = `${n} is not a prime number`
                break;
            }
            else{
                return result = `${n} is a prime number`
            }
        }
    }
}

console.log(isPrime(15))

I write a function to find the prime number , but it's not working because I'm not able to break the loop

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剧终人散尽 2025-02-08 22:54:13

尽管Dave的答案解决了这个问题,但我建议这样的堆栈溢出答案是更好的选择。

https://stackoverflow.com/a/38643868/10738743

Although answer by Dave addresses the question I would suggest this stack overflow answer as an better alternative.

https://stackoverflow.com/a/38643868/10738743

挽清梦 2025-02-08 22:54:13

有两个故障,可以防止您的功能按预期工作。

  1. 测试灵巧性的循环是在每次迭代中重复n%2,无论循环中i的值如何,都将评估相同的循环。相反,您应该测试以查看n%i是正确的。

  2. 使用该固定的

    最终返回(仅当所有非挑战条件都被拒绝以较早的return s拒绝时发生)成为默认返回值。

您的代码功能正常,上面建议的次要更改已包含:

function isPrime(n) {
if (n == 1 ) {
    return (`${n} is niether a prime number nor composite number`);
}
else if( n < 1){
    return (`${n} is not a prime number`)
}
else {
    for (let i = 2;  i < n; i++) {
        if( n % i == 0){
            return result = `${n} is not a prime number`
            // break; // (return breaks anyway)
        } // end if       
    }// end for i;
    
    } // end else
    
    return result = `${n} is a prime number`; // default after no earlier rejection

}

console.log(isPrime(15)); 

There are two glitches preventing your function working as intended.

  1. the loop which tests for primeness is repeating n%2 on each iteration, which will evaluate the same, regardless of the value of i in the loop. Instead, you should be testing to see whether n%i is true.

  2. With that fixed, the final return (which only happens if all non-prime conditions have been rejected with earlier returns) should be outside of any block as it becomes the default return value.

your code functions fine with the minor changes suggested above incorporated:

function isPrime(n) {
if (n == 1 ) {
    return (`${n} is niether a prime number nor composite number`);
}
else if( n < 1){
    return (`${n} is not a prime number`)
}
else {
    for (let i = 2;  i < n; i++) {
        if( n % i == 0){
            return result = `${n} is not a prime number`
            // break; // (return breaks anyway)
        } // end if       
    }// end for i;
    
    } // end else
    
    return result = `${n} is a prime number`; // default after no earlier rejection

}

console.log(isPrime(15)); 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文