Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
素数检查(JavaScript)_Javascript_Primes - Fatal编程技术网

素数检查(JavaScript)

素数检查(JavaScript),javascript,primes,Javascript,Primes,我已经编写了下面的代码来检查一个数字是否为素数,并且它工作正常。但令我惊讶的是,当它将25作为一个值传递时,它返回“true”而不是“false”,因为25不是质数 所以我决定分享。拜托,我做错了什么 function isPrime(number) { return number % 2 !== 0 && number % 3 !== 0 ? true : false; } isPrime(4) returns false; isPrime(23) returns tr

我已经编写了下面的代码来检查一个数字是否为素数,并且它工作正常。但令我惊讶的是,当它将25作为一个值传递时,它返回“true”而不是“false”,因为25不是质数

所以我决定分享。拜托,我做错了什么

function isPrime(number) {
   return number % 2 !== 0 && number % 3 !== 0 ? true : false;
}

isPrime(4) returns false;
isPrime(23) returns true;
isPrime(25) returns true; 

“(这就是我被警告的地方。25也应该返回false)

你的条件非常小。如果这个数字不能被2或3整除,但可以被5或7整除怎么办?此外,为什么isPrime(23)返回false是可以的?23也是一个素数,它应该返回true。你需要做的是迭代n-1到2之间的所有数字(这里n是您要检查的数字)并检查是否有任何数字除以n而没有余数。您可以执行以下操作:

函数isPrime(数字){
让isPrimeNum=true;
对于(设i=number-1;i>=2;i--){
如果(编号%i==0)isPrimeNum=false;
}
返回isPrimeNum;
}
控制台日志(iPrime(23));

console.log(isPrime(25));
您的代码只检查输入是否可以被2或3整除。但是,质数(根据定义)是一个只能被1和自身整除的数字

因此,您必须检查每个小于或等于
sqrt(n)
(扫描此区域就足够了,就好像有一个除数大于该除数一样,它必须有一对在该范围内

循环向上迭代,因此如果该数字可被一个小素数整除,它可以提前返回

函数isPrime(数字){

if(数字提示:将布尔值转换为布尔值不需要三元。
!=
已返回
true
false
。提示:这不是测试素数的方法。iPrime(23)的测试方法返回true。这只是一个输入错误。谢谢你的输入。这有助于感谢分享。我非常清楚素数是什么。我只需要检查一个小范围,比如0到100。你的解决方案很有用,但是0到1呢?@louismarkin如果你的数字保证在100以下,你就必须检查(根据同样的推理)可以肯定的是,每个数字最多可以手动循环10次。但是,此代码始终循环理想次数,并且可以处理任何数字。@louismarkin Good point关于0和1,添加了对它们的检查;以及对非整数的检查实际上,您正在测试多个偶数。您应该检查它是否可以被2整除,然后检查是否可以被2整除只有奇数。@BrunoCanettieri现在,它向上走,提前返回会解决这个问题。谢谢你的指点!