33 votes

Meilleure solution pour trouver des nombres ayant exactement 3 diviseurs

J'étudiais la programmation et j'ai trouvé un exercice consistant à écrire un algorithme permettant de trouver les "nombres à trois" (nombres qui sont divisibles par exactement 3 nombres). J'ai écrit ceci :

function threesomeNumber(N) {
    var found = 0;
    var i = 1;
    var numberOfDivisions = 1;
    while (found < N) {
        for (var j = 2; j <= i; j++) {
            if (i % j === 0) {
                numberOfDivisions++;
            }
        }
        if (numberOfDivisions === 3) {
            found++;
            console.log(found + " = " + i);
        }
        numberOfDivisions = 1;
        i++;
    }
}

Le problème est qu'il fonctionne assez lentement et je me demandais s'il pouvait être fait plus rapidement. Quelqu'un connaît-il une solution plus optimisée ? Je veux qu'il trouve N nombres consécutifs à trois.

8 votes

Cela fait un moment que je cherche une meilleure solution pour trouver des trios. Mon approche habituelle n'a fonctionné qu'une seule fois, et au milieu de celle-ci, j'ai rencontré une erreur d'exécution.

0 votes

Ces noms de variables ne sont pas sérieux, je vais les éditer pour plus de clarté.

17 votes

@Krzysztof, je pense que cette question va recueillir beaucoup de votes rien que par son titre. Indice : en anglais, plan à trois ne signifie pas réellement les nombres qui sont divisibles par exactement 3 nombres .

0voto

Nikhil Vaidya Points 1
int threesomeNumber(int N)
{
    //Your code here

    int num =0;
    bool prime = true;

    for(int i=2; i<=sqrt(N); i++)
    {
        for(int j=2; j<i; j++)
        {
            if(i % j == 0)
            {
                prime = false;
                break;
            }
        }

        if(prime)
        {
            num++;
        }
        prime = true;
    }
    return num;  
}

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