1. Renommez vos variables.
Tout d'abord, si c'est des devoirs que vous obtiendrez de mauvaises notes (si votre professeur vaut son sel) parce que vous avez des noms de variables vides de sens (oui, même numberOfPrimes
est faux et devrait être nommé requiredNumberOfPrimes
. Quand je vois cette variable I Je me demande 'Est-ce combien il veut, ou combien il a trouvé?'). Deuxièmement, cela vous aidera à comprendre où vous allez mal. Les variables doivent être nommées logiquement en fonction de ce qu'elles représentent. Si vous ne pouvez pas expliquer ce que vos variables représentent (par exemple, un & b) alors vous ne pouvez probablement pas expliquer ce que vous faites avec eux.
2. Regardez vos boucles.
for (int x = 0; x < numberOfPrimes; x++)
La structure d'une boucle est (initialise; 'should I continue?'; 'each loop do this')
. Par conséquent, dans votre boucle
- Vous continuez jusqu'à ce que x soit égal ou supérieur à
numberOfPrimes
*. Chaque fois que vous parcourez la boucle, vous ajoutez 1 à x
.
Etes-vous sûr que c'est ce que vous voulez faire? x
semble représenter le nombre de nombres premiers que vous avez trouvés. Alors pourquoi ne pas l'incrémenter quand vous trouvez un premier, plutôt que lorsque vous démarrez une boucle?
for (int a = 2; a <= x ; ++a)
for (int b = 2; b < a; ++b)
Vous êtes à la recherche à chaque entier compris entre 2 et x
, y compris. Et pour chacun de ces entiers a
, vous regardez chaque entier entre a
et 2 inclus. Qu'allez-vous faire avec ces entiers?
Chaque fois que vous boucle dans votre boucle de niveau supérieur (la boucle x
), vous allez commencer votre boucle a
à partir de zéro, et chaque fois que vous en boucle dans votre boucle a
vous commencerez votre boucle b
à partir de zéro. Donc, si x
est 10, vous passez à travers une fois (a = 2), puis vous passez à nouveau à travers (a = 2, a = 3), puis vous passez à nouveau à travers (a = 2, a = = 3, a = 4), puis ...
3. Collectez vos résultats plutôt que de les écrire sur la console.
var primes = new List<int>();
C'est tellement simple. Lorsque vous trouvez un nombre premier, primes.Add(a);
.Ensuite, vous savez combien de nombres premiers vous avez trouvés (primes.Count
), vous pouvez utiliser la liste des nombres premiers pour déterminer efficacement le nombre premier suivant, et vous pouvez utiliser la liste plus tard si nécessaire.
Quel est exactement le problème que vous rencontrez? Obtenez-vous des résultats erronés? Nombres composés? Pas assez de chiffres? –
Je ne pense pas que je gère correctement la partie définie par l'utilisateur avec la première boucle for. il sort 2 puis 23 puis 235 et ainsi de suite. – Covertpyro