5 votes

Vérifier si un nombre est une somme de deux nombres premiers

Le problème consiste à vérifier un nombre aléatoire n peut être la somme de 2 nombres premiers aléatoires. Par exemple,

si n=34, les possibilités sont (3+31), (5+29), (17+17)...

Jusqu'à présent, j'ai réussi à enregistrer les nombres premiers dans le tableau, mais je n'ai aucune idée de la manière dont je pourrais vérifier si n est la somme de 2 nombres premiers.

Voici une partie de mon code :

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++) {

    }
}

Tout d'abord, j'ai compté le nombre de nombres premiers compris entre 1-n afin de pouvoir déclarer et initialiser mon tableau de nombres premiers. Ensuite, j'ai enregistré les nombres premiers dans le tableau. Mais maintenant, je n'ai aucune idée de la façon dont je pourrais vérifier si n est la somme de 2 nombres premiers.

3voto

Rahul Kumar Points 138

Etant donné que vous disposez déjà de la liste des "nombres premiers inférieurs au nombre donné", il est très facile de vérifier si la somme de deux nombres premiers est égale au nombre donné.

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

EDIT : ArrayUtils fait partie de la bibliothèque Apache Commons Lang Vous pouvez cependant utiliser Liste de tableaux au lieu d'utiliser la méthode contains.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X