确定素数的问题[Java]

时间:2014-09-19 04:11:42

标签: java

我听说你可以通过检查它是否可以被2或3整除然后6k + 1或6k - 1(17 - > 6(3) - 1)

来确定数字是否为素数

当我尝试这个时,它说1125是素数。它在if语句中将num - 1%6计算为true,但在print函数中不是。语法与num + 1%6 if语句相同,因此我不确定发生了什么。

boolean prime = false;
    if(num%2 != 0){
        if(num%3 != 0){
            if(((num+1)%6) == 0)
                prime = true;
            if(((num-1)%6) == 0)
                prime = true;
            System.out.print((1124%6 == 0));
        }
    }

1 个答案:

答案 0 :(得分:2)

您的代码永远不会在1125上超过(num % 3 != 0),因为1125可以被3整除。因此,在该数字上,您的System.out永远不会被执行。

在这里,我调整了一下你的代码:

  public static void main(String[] args) {
    for (int num = 2; num < 2000; num++) {
      boolean prime = false;
      if (num % 2 != 0) {
        if (num % 3 != 0) {
          if (((num + 1) % 6) == 0) prime = true;
          if (((num - 1) % 6) == 0) prime = true;
        }
      }
      System.out.println(num + " prime? " + prime);
    }
  }

示例输出:

1124 prime? false
1125 prime? false
1126 prime? false
1127 prime? true

1127不是素数(7 * 161)所以算法不起作用。虽然我怀疑它在寻找优秀候选人方面非常擅长。