孪生素数配对

时间:2014-11-29 17:36:55

标签: java primes

这个程序是在整个数字线上给定一个给定数值之前和之后找到一对孪生素数的基本尝试。代码看起来很好但是没有给出任何输出,也没有在运行后终止。我想知道它有什么问题。谢谢!

public class twin {

    public boolean prime(int num) { // function to check for a prime number

        if (num % 2 == 1 && (num % 3 == 2 || num % 3 == 1)) {
            return true;

        } else
            return false;

    }

    public static void main(String args[]) { // main
        int inp_num = 7; // given number too check for twin primes before or
                            // after it
        twin ob = new twin();
        int arr[] = new int[5];
        for (int x = inp_num; x > 0; x--) { // checking limit [o,inpnum)
            boolean b = ob.prime(x);
            if (b = true) {
                if (ob.prime(x - 2) == true) {
                    arr[0] = x;
                    arr[1] = x - 2;
                }

            }

        }
        for (int x = inp_num; x >= inp_num; x++) { // checking limit
                                                    // [inpnum,infinity]
            boolean b = ob.prime(x);
            if (b = true) {

                if (ob.prime(x + 2) == true) {
                    arr[2] = x;
                    arr[3] = x + 2;
                }

            }

        }
        for (int i = 0; i < 4; i++) {
            System.out.println(arr[i] + "\t");

        }
    }
}

3 个答案:

答案 0 :(得分:0)

for(int x=inp_num;x>=inp_num;x++){ //checking limit [inpnum,infinity]

这行代码将无限期地运行。

此外,

public boolean prime(int num)

此函数不会正确检查素数。我建议你查一些简单的方法来检查素性,比如Eratosthenes sieve

答案 1 :(得分:0)

关于 boolean prime(int n) 方法:

这种用于寻找素数的方法是错误的。知道每个数字都是一个或多个素数的乘积,我们实际上可以达到n的平方根,使事情更简单。

public boolean prime(int n) {
  if (n % 2 == 0) return false;

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

我们需要检查n是否可被2整除,因为任何偶数都是复合的;也就是说,它可以被除了一个以外的数字整除。

我们从3开始,因为1不是素数,我们已经检查过2.我们每步增加i 2,因为我们只检查奇数。

最后,我们只需要转到n的平方根,因为每个数字(如果是复合数)都保证具有小于或等于所述数字的平方根的素数因子。




关于您的循环 for (int x = inp_num; x >= inp_num; x++) { // checking limit

此循环不会执行。请记住您设置inp_num = 7的程序的开头部分。因为循环结束条件需要x >= 7,所以条件已经满足,因此不会执行。如果你想让循环执行一次,比如说

for (int x = inp_num; x > inp_num; x++) { // checking limit

答案 2 :(得分:0)

Private Sub CreateTable_Click()

DoCmd.RunSQL "CREATE TABLE Test( " & _
          "[id] AUTOINCREMENT PRIMARY KEY, " & _
          "[transaction_date] DATE, " & _
          "[reference] TEXT(255)," & _
          "[details] TEXT(255)," & _
          "[debit] CURRENCY," & _
          "[credit] INT);"

End Sub