java中的素数测试

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 ==

知道为什么当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 == 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;我