Trouver une explication [Résolu]

djokov93 7 Messages postés dimanche 30 juillet 2017Date d'inscription 8 août 2017 Dernière intervention - 30 juil. 2017 à 18:40 - Dernière réponse : djokov93 7 Messages postés dimanche 30 juillet 2017Date d'inscription 8 août 2017 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
KX 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par KX le 30/07/2017 à 19:27
0
Utile
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
Commenter la réponse de KX
djokov93 7 Messages postés dimanche 30 juillet 2017Date d'inscription 8 août 2017 Dernière intervention - 30 juil. 2017 à 19:32
0
Utile
Merci
Mais tu peux m'expliquer encore mieux
Commenter la réponse de djokov93
KX 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par KX le 30/07/2017 à 20:28
0
Utile
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.
Commenter la réponse de KX
djokov93 7 Messages postés dimanche 30 juillet 2017Date d'inscription 8 août 2017 Dernière intervention - 30 juil. 2017 à 20:30
0
Utile
Merci beaucoup mon frère c très gentil de ta part
Commenter la réponse de djokov93

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.