java中的素数测试
知道为什么当int number=4时,结果返回为true吗?我能做些什么来解决这个问题?我对我的代码很满意,但是为什么4返回为真java中的素数测试,java,Java,知道为什么当int number=4时,结果返回为true吗?我能做些什么来解决这个问题?我对我的代码很满意,但是为什么4返回为真 public static boolean isPrime(int number) { boolean result = true; if (number == 0) { result = false; } for (int i=2; i < number/2; i++) { if (number % i ==
public static boolean isPrime(int number)
{
boolean result = true;
if (number == 0)
{
result = false;
}
for (int i=2; i < number/2; i++)
{
if (number % i == 0)
{
result = false;
}
}
return result;
}
从不等于真2不小于2
相反,使用当number=4时,for循环从不执行。这是因为:
2 < 4 / 2
当i==2且i<2时执行。如果数=4,这就永远不会发生,因为那时它将是i<4/2,也就是i<2。要解决此问题,请删除/2或执行其他操作。。。不太确定你要做什么。当number==4时,第一个if的布尔条件为false,而for条件的第一个求值也为false。因此,结果就是用来初始化结果true的值。有效的方法是: 抱歉重复,但过一段时间后,有人可以找到此主题,而不是上一个主题
for (int i=2; i < number/2; i++)
此外,您可能希望返回结果,而不是将其存储在变量中,因为代码将在第一个条件后继续执行。。。因此,以下是可行的解决方案:
public static boolean isPrime(int number) {
//Everything less or equal 1 is not prime number
if (number <= 1) {
return false;
}
//2 is very special case, so I check it separately
if (number == 2) {
return true;
}
//This will help me rid off all even numbers
if (number % 2 == 0) {
return false;
}
//It is important to count the sqrt before using it in for-loop condition.
//If you use it in for-loop condition, it will be counted every single iteration.
int square = (int) Math.sqrt(number);
//I already checked %2, so now I need to check only odd numbers
for (int i = 3; i <= square; i += 2) {
if (number % i == 0) {
//If I find one number, I do not have to continue
return false;
}
}
return true;
}
public static boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i=2; i*i <= number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
更好更快的代码版本:
public static boolean isPrime(int number) {
if (number <= 1) { /* Since 1 isn't technically a prime number */
return false;
}
for (int i=2; i <= number/2; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
另一个解决方案:
public static boolean isPrime(int number) {
//Everything less or equal 1 is not prime number
if (number <= 1) {
return false;
}
//2 is very special case, so I check it separately
if (number == 2) {
return true;
}
//This will help me rid off all even numbers
if (number % 2 == 0) {
return false;
}
//It is important to count the sqrt before using it in for-loop condition.
//If you use it in for-loop condition, it will be counted every single iteration.
int square = (int) Math.sqrt(number);
//I already checked %2, so now I need to check only odd numbers
for (int i = 3; i <= square; i += 2) {
if (number % i == 0) {
//If I find one number, I do not have to continue
return false;
}
}
return true;
}
public static boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i=2; i*i <= number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
你就不能用笔和纸来写吗?取数字=4。那么i=2。那么数字%i=…如果数字是4,for循环执行多少次?@SotiriosDelimanolis这正是没有发生的事情。1。不要将结果的默认值设置为true。对于4,For循环将不会执行,因此您将返回result的默认值,即true@arunmoezhi如果不将默认值设置为true,则不会将任何数字报告为素数。@libik:为什么不呢?1不是素数,因此,非常确定您可以使用intMath.sqrtnumber而不是number/2:或者甚至添加一个额外的检查,将3作为因子,然后将其用于int i=5,d=2;我