经典 JS 素数
Classic JS Prime Number
这可能很愚蠢 post,但我不明白为什么我的代码不能正常工作。作为记录,我已经编写了不同的有效代码,但我仍然不明白为什么这个不行。
为什么第二个 if
语句始终为真?
https://jsfiddle.net/vhdh5x3d/2/
/* This code doesn't work... */
var testNumber = prompt("Please enter a number you'd like to test");
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is not a prime number.";
}
if ((testNumber - 1) == i && testNumber % i != 0 ) {
document.getElementById("test-results").innerHTML = "Congratulations! Your number, " + testNumber + ", is a prime number!";
}
}
var testNumber = prompt("Please enter a number you'd like to test");
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
break;//already found a working number, so stop
}
}
//if last iteration reached without breaking its a prime
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is "+(testNumber==i?"a":"not a")+" prime number.";
http://jsbin.com/qabivasiyu/edit?console
正如评论已经指出的那样,第二个 if 不应该在 for 循环中,第一个 if 应该中断循环。我还稍微简化了您的代码...
您的代码似乎假设,给定一个正整数 testNumber
和另一个正整数 i
,然后如果 ((testNumber - 1) == i) && ((testNumber % i) != 0)
则意味着 testNumber
是素数。
这个假设是错误的。例如考虑 testNumber = 8
和 i = 7
的情况。上述条件成立,但8不是质数。
第二个 if
并不总是正确的,它仅在 for
循环的最后一次迭代中出现,因此您在 html 中看到的是找到素数的消息。
你应该这样做:
var testNumber = prompt("Please enter a number you'd like to test");
var prime = true;
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
prime = false;
}
}
if (prime == true)
document.getElementById("test-results").innerHTML = "Congratulations! Your number, " + testNumber + ", is a prime number!";
else
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is not a prime number.";
这是一个简单的算法,用于测试一个数字是否为素数。为此,您可以找到很多不同的算法。
第二个 If 语句不会总是为真。它只会在最后一次迭代期间进入您的第二个 if 语句并设置 html。
一旦满足您的条件,您总是需要 return 该值,而您在代码中没有这样做。
下面的代码可以工作:
var testNumber = prompt("Please enter a number you'd like to test");
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is not a prime number.";
return;
}
if ((testNumber - 1) == i && testNumber % i != 0 ) {
document.getElementById("test-results").innerHTML = "Congratulations! Your number, " + testNumber + ", is a prime number!";
return;
}
}
这可能很愚蠢 post,但我不明白为什么我的代码不能正常工作。作为记录,我已经编写了不同的有效代码,但我仍然不明白为什么这个不行。
为什么第二个 if
语句始终为真?
https://jsfiddle.net/vhdh5x3d/2/
/* This code doesn't work... */
var testNumber = prompt("Please enter a number you'd like to test");
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is not a prime number.";
}
if ((testNumber - 1) == i && testNumber % i != 0 ) {
document.getElementById("test-results").innerHTML = "Congratulations! Your number, " + testNumber + ", is a prime number!";
}
}
var testNumber = prompt("Please enter a number you'd like to test");
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
break;//already found a working number, so stop
}
}
//if last iteration reached without breaking its a prime
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is "+(testNumber==i?"a":"not a")+" prime number.";
http://jsbin.com/qabivasiyu/edit?console
正如评论已经指出的那样,第二个 if 不应该在 for 循环中,第一个 if 应该中断循环。我还稍微简化了您的代码...
您的代码似乎假设,给定一个正整数 testNumber
和另一个正整数 i
,然后如果 ((testNumber - 1) == i) && ((testNumber % i) != 0)
则意味着 testNumber
是素数。
这个假设是错误的。例如考虑 testNumber = 8
和 i = 7
的情况。上述条件成立,但8不是质数。
第二个 if
并不总是正确的,它仅在 for
循环的最后一次迭代中出现,因此您在 html 中看到的是找到素数的消息。
你应该这样做:
var testNumber = prompt("Please enter a number you'd like to test");
var prime = true;
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
prime = false;
}
}
if (prime == true)
document.getElementById("test-results").innerHTML = "Congratulations! Your number, " + testNumber + ", is a prime number!";
else
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is not a prime number.";
这是一个简单的算法,用于测试一个数字是否为素数。为此,您可以找到很多不同的算法。
第二个 If 语句不会总是为真。它只会在最后一次迭代期间进入您的第二个 if 语句并设置 html。 一旦满足您的条件,您总是需要 return 该值,而您在代码中没有这样做。
下面的代码可以工作:
var testNumber = prompt("Please enter a number you'd like to test");
for (var i = 2; i < testNumber; i++) {
if (testNumber % i == 0) {
document.getElementById("test-results").innerHTML = "Your number, " + testNumber + ", is not a prime number.";
return;
}
if ((testNumber - 1) == i && testNumber % i != 0 ) {
document.getElementById("test-results").innerHTML = "Congratulations! Your number, " + testNumber + ", is a prime number!";
return;
}
}