我正在尝试编写一个脚本来检测该数字是否为素数。该函数对某些数字起作用很好,令人惊讶的是它将数字133打印为素数,这是假的。我怀疑问题出在我的休息声明中,所以如果是这样的话请纠正。
这是我的代码:
function prime(num){
if (num == 1){console.log(num + " is not a prime number");}
else if (num == 2){console.log(num + " is a prime number");}
else if (num !==2 && num !==1){
for (var i = 2; i<num; i++ ){ // num = 7
if (num % i == 0){
console.log(num + " is a not prime number");
break;
}
else{
console.log(num + " is a prime number");
break;
}
}
}
}
答案 0 :(得分:2)
您需要将最后一个输出数字置于for循环之外的num。如果不这样做,您将始终在第一次迭代时退出for循环。
function prime(num){
if (num == 1){console.log(num + " is not a prime number");}
else if (num == 2){console.log(num + " is a prime number");}
else if (num !==2 && num !==1){
for (var i = 2; i<num; i++ ){ // num = 7
if (num % i == 0){
console.log(num + " is a not prime number");
return;
}
}
console.log(num + " is a prime number");
}
}
答案 1 :(得分:1)
如果您取出第二个break语句,代码将起作用。 这是因为如果循环中的if条件为假,则循环中断。
function prime(num){
if (num == 1){console.log(num + " is not a prime number");}
else if (num == 2){console.log(num + " is a prime number");}
else if (num !==2 && num !==1){
for (var i = 2; i<num; i++ ){ // num = 7
if (num % i == 0){
console.log(num + " is not a prime number");
return;
}
}
console.log(num + " is a prime number");
}
}
这是工作代码。
答案 2 :(得分:0)
因此我们知道break
关键字退出当前循环。在for循环中构造逻辑的方式,在循环的第一次传递期间总是达到break
语句。这意味着您的循环仅被评估一次(对于i = 2)并且只有大于2的数字才会在您的程序中达到这一点。因此,您只能正确识别2的倍数的非素数。
我们可以通过return
解决此问题,而不是在找到因素后解决问题。如果我们已经用尽了所有可能的因素,那么我们可以打印出这个数字是素数。
function prime(num){
if (num == 1) {
console.log(num + " is not a prime number");
return;
}
if (num == 2) {
console.log(num + " is a prime number");
return;
}
for (var i = 2; i<num; i++) {
if (num % i == 0){
console.log(num + " is a not prime number");
return;
}
}
// We never found a factor, which means this must be a prime number
console.log(num + " is a prime number");
}
答案 3 :(得分:0)
function prime(num){
var isprime=true;
if (num == 1){console.log(num + " is not a prime number");}
else if (num == 2){console.log(num + " is a prime number");}
else {
for (var i = 2; i<=num/2; i++ ){ // num = 7
if (num % i == 0){
console.log(num + " is a not prime number");
isprime = false;
break;
}
}
if(isprime)
console.log(num + " is a prime number");
}
}
几点建议:
- 你的for循环中的
您无需检查
else if (num !==2 && num !==1)
,因为如果num不是1或2,它将自动转到else条件。一个简单的else
就足够了。- 醇>
你不需要检查
i<num
。检查直到i<=num/2
应该足够作为num可以具有的最大因子是num / 2