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 .
0 votes
Ouaip, tu ne pourrais pas les trouver un par un de manière consécutive, ce qui est mon objectif.
0 votes
@KrzysztofKraszewski "(les nombres qui sont divisibles par exactement 3 nombres)" Les nombres qui sont exactement divisibles par trois nombres distincts, ou le nombre
3
?1 votes
@FrédéricHamidi Oui, mais en mathématiques cela a un sens différent. Mais vous avez soulevé un bon point.
0 votes
@guest271314 Nombre qui est divisible par exactement trois autres nombres, par exemple.
4
qui est divisible par1
,2
y4
.2 votes
Je ne pense pas qu'il ait cette signification en mathématiques en dehors de ce problème - citation s'il vous plaît ?
1 votes
Si l'on prend la définition du nombre à trois telle que donnée par le code, il n'y a même pas deux nombres à trois consécutifs. Si l'on ne compte pas 1 comme diviseur (ce qui est fait implicitement par le code), il n'y a pas deux nombres à trois consécutifs.
numberOfDivisions = 1
et en commençantj
à 2), alors, par exemple, 6 est un nombre à trois (les diviseurs sont 2, 3 et 6) et la première séquence de trois nombres à trois consécutifs commence à 33.