在java中的Prime Number测试

时间:2014-03-02 22:26:27

标签: java

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;
}

任何想法为什么当int number = 4时,结果返回true?我该怎么做才能解决这个问题?我对我的代码感到满意,但为什么4返回为真呢?

7 个答案:

答案 0 :(得分:3)

for (int i=2; i < number/2; i++)

如果您在此输入4,它将永远不会进入循环,因为

2 < 4 / 2 

永远不等于true(2不小于2)。

相反,请使用<=

答案 1 :(得分:2)

如何做到这个方法的有效方法是: (对不起重复,但过了一段时间后,有人可以找到这个主题而不是之前的主题)

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;
}

答案 2 :(得分:1)

for时,number = 4循环永远不会执行。这是因为:

for (int i=2; i < number/2; i++)

i == 2i < 2时执行。如果number == 4,则永远不会发生这种情况,因为它会i < 4 / 2 i < 2。要解决此问题,请删除/2或执行其他操作...不太确定您的目标是什么。

答案 3 :(得分:1)

当number == 4时,第一个if的布尔条件为false,for条件的第一次评估也为false。因此,结果是您用于初始化结果的值(true)。

答案 4 :(得分:1)

此外,您可能希望返回结果而不是将其存储在变量中,因为代码将在第一个条件之后继续执行...所以这是工作解决方案:

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;
}

答案 5 :(得分:0)

更好更快的代码版本:

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;
    }

答案 6 :(得分:0)

另一种解决方案:

public static boolean isPrime(int number) {
    if (number < 2) {
        return false;
    }

    for (int i=2; i <= (int)Math.sqrt(number); i++) {
        if (number % i == 0) {
            return false;
        }
    }

    return true;
}