首页 > 解决方案 > 为什么当 i=9 时这个 javascript 素数代码会失败?

问题描述

我写了这个javascript素数函数,但它说 9 是素数,我不知道 9 有什么问题。

function prime(...num) {
for (let i of range(...num)) {
    for (let j of range(2,i)) {
        if (i%j===0) {
        console.log(i+' is not a prime number' );
        break;
        }else{
         console.log(i + ' is a prime number');                          }
    break;    
    }
}

}

当我运行时,我期望得到以下输出prime(range(8,10));

8 is not a prime number
9 is not a prime number

但它反而返回:

8 is not a prime number
9 is a prime number

标签: javascript

解决方案


您的问题是您仅执行第一个除法(除以 2),检查模是否等于 0 以及是否等于 0,并以此为基础您的答案。

这是一些应该可以帮助您的伪代码:

notPrime = false
for (let j of range(2,i))
        if (i%j===0) 
            notPrime = true
            break    //it is not necessary if a divisor is found.

if (notPrime)
    console.log(i+' is not a prime number' );
else
    console.log(i + ' is a prime number');

这个算法有很多改进,但最简单的一个是使用range(2, n/2). 您将在 range 中找不到除数[n/2 + 1, n - 1]


推荐阅读