numbers = [];
for (x = 1; x <= 1e4; x++) {
numbers.push(x)
}
//console.log(numbers)
function checkPrime(num) {
if (num == 1 || num == 0) {
return 'It is a separate case'
}
if (num == 2) {
return num + ' is prime'
}
for (var i = 2; i < num; i++) {
if (num in numbers) {
if (num % i === 0) return num + ' is not prime';
else {
return num + ' is prime';
}
return num !== 1;
} else {
return num + ' is not in range';
}
}
}
console.log(checkPrime(27));
您好。 在上面的代码中,我尝试创建一个函数,该函数返回有关数字是否为素数的信息。
然而,在某些情况下失败了。比如说。在27或145的情况下,它返回的值是素数,这显然是假的。如何修改此程序以使其正常工作?
此外,合并2号和其余素数的最明智的方法是什么?
提前致谢,如果这太基础,我很抱歉,我无法在其他任何地方找到正确答案。
答案 0 :(得分:1)
你正在使用其他&#39;在完成检查所有数字直到自身-1之前,声明该数字为素数的子句。
为了达到最佳效果,您不需要循环直到数字(&lt; num)。直到数字的平方根。 (甚至比循环直到num / 2更好)例如:当环已达到13时,可以看到167是素数.13 * 13 = 169&gt; 167所以你可以停下来并安全地确认167是素数。
对于2号,有一个sepparate案例是正确的。
下面是检查单个值是否为素数的代码:
function checkPrime(num) {
if (num == 1 || num === 0) {
return 'It is a separate case'
}
if (num == 2) {
return num + ' is prime'
}
for (var i = 2; i < Math.sqrt(num); i++) {
if (num % i === 0) return num + ' is not prime';
}
return num + ' is prime';
}
alert(checkPrime(27));
&#13;
答案 1 :(得分:0)
我已经重写了代码以提供正确的答案
numbers = [];
for (x = 1; x <= 1e4; x++) {
numbers.push(x)
}
//console.log(numbers)
function checkPrime(num) {
if (num == 1 || num == 0) {
return 'It is a separate case'
}
// check this condition outside the loop
if (!(num in numbers)) {
return num + ' is not in range';
}
if (num == 2) {
return num + ' is prime'
}
for (var i = 2; i < num; i++) {
if (num % i === 0) {
return num + ' is not prime';
}
}
return num + ' is prime';
}
console.log(checkPrime(27));
答案 2 :(得分:0)
我已经重写了您的代码并进行了一些更改。
你遇到问题的原因是你在for循环中返回意味着所有奇数都会将自己声明为素数。
我已经解决了这个问题,但我也重新安排了一些事情,为了尽可能高效,我们尽快保释好,所以我做了几张保释我最初检查数字是否在范围内,如果不是保释金。
我已经对代码进行了评论,因此它很有意义,但如果你不理解为什么我做了些什么,请随意提问。
// make an array of all numbers between 0 and 10000
numbers = [];
for (x = 0; x <= 1e4; x++) {
numbers.push(x)
}
function checkPrime(num) {
// return if input number is not in numbers array
if (numbers.indexOf(num) == -1) return num + ' is not in range'
// return if number is 0 or 1
if (num <= 1) return 'It is a separate case'
// check all numbers between 2 and input number
// return if any number devides neatly
for (var i = 2; i < num; i++)
if (num % i === 0) return num + ' is not prime';
// if you get this far it's prime
return num + ' is prime';
}
console.log(checkPrime(27));
&#13;
就个人而言,就个范围而言,我不会拥有所有价值观的数组,但我还是留下了这个,以防万一我们不知道其他推理。
修改强>
正如您所说的那样,初始数组并不重要,我已经重新编写了没有它的代码,但这次我没有包含注释(为了节省空间),但代码也是如此事情并没有改变。
function checkPrime(num) {
if (num < 0 || num > 1e4) return num + ' is not in range'
if (num <= 1) return 'It is a separate case'
for (var i = 2; i < num; i++)
if (num % i === 0) return num + ' is not prime';
return num + ' is prime';
}
console.log(checkPrime(27));
&#13;
无论如何,我希望你能找到这个有用的