素数检查(JavaScript)
我已经编写了下面的代码来检查一个数字是否为素数,并且它工作正常。但令我惊讶的是,当它将25作为一个值传递时,它返回“true”而不是“false”,因为25不是质数 所以我决定分享。拜托,我做错了什么素数检查(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
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现在,它向上走,提前返回会解决这个问题。谢谢你的指点!