Trouver une explication

Résolu
djokov93 Messages postés 7 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 8 août 2017 - Modifié le 30 juil. 2017 à 19:23
djokov93 Messages postés 7 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 8 août 2017 - 30 juil. 2017 à 20:30
Bonjour tt le monde

je suis débutant en informatique je essaye de faire une exercice qui afficher les nombre premier compris entre 1 et 100 j'ai trouver la solution:
  int i,j,a;
    for(i=1;i<=100;i++){
a=0;
    for(j=1;j<=100;j++){
        if(i%j==0){
            a=a+1;
        }

        }
            if(a==2){
            printf("%d\n",i);
        }

        }

le problème c que je voudrais savoir pourquoi on fait initialisation de a après la première boucle pourquoi on initialise a des la déclaration

Et Merci

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié le 30 juil. 2017 à 19:27
Bonjour,

Ce code est très mauvais en terme de performance. On peut faire beaucoup mieux.

Quant à ta question "pourquoi on fait initialisation de a après la première boucle" c'est parce qu'il doit être réinitialisé pour chaque valeur de
i
pour pouvoir faire le même calcul pour chaque nombre indépendamment des résultats des nombres d'avant.La confiance n'exclut pas le contrôle
0
djokov93 Messages postés 7 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 8 août 2017
30 juil. 2017 à 19:32
Merci
Mais tu peux m'expliquer encore mieux
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié le 30 juil. 2017 à 20:28
Normalement si le code était bien fait les variables devraient être bien nommés parce que "a", "i", "j" ça ne veut rien dire donc on ne sait pas bien à quoi servent chaque valeur dans le calcul.

Un nombre est premier s'il possède deux diviseurs (1 et lui même), ici "a" représente le nombre de diviseurs de l'entier "i" ce qui explique pourquoi on fait un test (a==2) pour savoir si "i" est premier ou pas.

Mais pour chaque entier on doit compter le nombre de diviseurs à partir de zéro, parce que c'est spécifique à l'entier que l'on considère, le nombre de diviseur d'un entier ne dépend jamais du nombre de diviseurs de l'entier qu'on a calculé avant.

Si on ne réinitialisait pas "a" pour chaque entier mais qu'on laissait les +1 s'accumuler, il y aurait un moment où on dépasse la valeur 2 mais jamais on ne redescendra en dessous de 2, donc au mieux le test (a==2) ne pourrait être vrai qu'une seule fois, puisque après "a" sera toujours de plus en plus grand. C'est pour ça qu'il faut remettre à zéro la valeur de "a" au début du calcul de chaque entier.
0
djokov93 Messages postés 7 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 8 août 2017
30 juil. 2017 à 20:30
Merci beaucoup mon frère c très gentil de ta part
0
Rejoignez-nous