簡體   English   中英

檢查數字是否是兩個素數的總和

[英]Check whether a number is a sum of two prime numbers

問題是檢查隨機數n可以是2個隨機素數的總和。 例如,

如果n = 34,則可能是(3 + 31),(5 + 29),(17 + 17)......

到目前為止,我已設法將素數保存到數組中,但不知道如何檢查,如果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方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM