问题是检查一个随机数n可以是2个随机素数的和。例如,



到目前为止,我已经设法将质数保存到数组中,但是不知道n是否是2个质数之和。

这是我的代码的一部分:

public static void primeNumbers(int n) {
    int i = 0, candidate = 2, countArray = 0, countPrime = 0;
    boolean flag = true;

    while (candidate <= n) {
        flag = true;
        for (i = 2; i < candidate; i++) {
            if ((candidate % i) == 0) {
                flag = false;
                break;
            }
        }
        if (flag) {
            countPrime++;
        }
        candidate++;
    }
    int[] primeNumbers = new int[countPrime];


    while (candidate <= n) {
        flag = true;
        for (i = 2; i < candidate; i++) {
            if ((candidate % i) == 0) {
                flag = false;
                break;
            }
        }
        if (flag) {
            primeNumbers[countArray] = candidate;
        }
        candidate++;
        countArray++;
    }

    for (i = 0; i <= primeNumbers.length; i++) {

    }
}

首先,我计算了1-n之间有多少个质数,因此可以声明和初始化素数数组。然后,我将质数保存到数组中。但是现在我不知道如何检查n是否是2个质数的和。

最佳答案

鉴于您已经有“素数小于给定数”的列表,检查两个素数是否可加到给定数上是很容易的任务。

for(int i=0; i<array.length; i++){

    int firstNum = array[i];
    int secondNum = givenNum - firstNum;

    /* Now if it is possible to sum up two prime nums to result into given num, secondNum should also be prime and be inside array */

    if(ArrayUtils.contains(array, secondNum)){
        System.out.println("Yes, it is possible. Numbers are "+ firstNum + " and " + secondNum);
    }
}

编辑:ArrayUtils是Apache Commons Lang库的一部分
但是,您可以改用ArrayList来使用contains方法。

关于java - 检查一个数字是否是两个质数的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48594089/

10-11 04:11