Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou non.




  1. #1
    Abou_youcef

    'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou non.

    je suis débutant en langage c ,
    g essayer à écrire ce programme mais y a un problème que je le trouve pas
    voila mon programme :
    Code:
    #include<stdio.h>
    int m,i,n,j;
    int main ()
    {
        do{
        printf("entrer votre nombre:");
        scanf("%d",&n);
        for(j=1;j<=n;j++){
        if(j==1 || j==2)
        printf("ce nombre est premier\n");
        else{
        for(i=2;i<j;i++){
        m=j%i;
        if(m==0){
        printf("ce nombre est non premier\n");
        i=j;}
        }
        if(m!=0)
        printf("ce nombre est premier\n");}}
        }while(1);
    return 0;}
    Merci.

    -----

    Dernière modification par JPL ; 09/12/2013 à 14h26. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. Publicité
  3. #2
    danyvio

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    99 n'est pas premier, mais tu commmences par le diviser par 2, le reste m n'est pas nul et tu dis : nombre premier

    IL faut tester que TOUTES les divisions de n par i depuis de 2 à j-1 (et même de pour optimiser mais c'est dans un premier temps facultatif) rendent un reste non nul pour affirmer que n est premier


    En fait tant que le reste n'est pas nul il faut continuer à tester jusqu'à épuisement de l'indice i (ou trouver un reste nul qui signifie nombre composé)
    Si je peux me permettre, ce n'est pas ton niveau de C qui est en cause, c'est l'approche du problème. Bon courage
    Dernière modification par danyvio ; 09/12/2013 à 09h25.
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  4. #3
    whoami

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Bonjour,

    De plus, quand je vois un programme avec une boucle sans condition de sortie
    Code:
    do{....}while(1);
    ça me frise le poil, et d'autant plus que c'est un programme interactif.


  5. #4
    Abou_youcef

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    je pense que vous avez mal compris le programme ou j'arrive pas à vous comprendre , en tous je vous remercie danyvio ;g trouver le problème et le programme marche très bien;maintenant je veux savoir s'il y a un programme olus court que celui ci;
    le programme après (la mise à jour)

    Code:
    #include<stdio.h>
    int m,i,n,j;
    int main ()
    {
        do{
        printf("entrer votre nombre:");
        scanf("%d",&n);
        for(j=1;j<=n;j++){
        if(j==1 || j==2)
        printf("ce nombre:%d est premier\n",j);
        else{
        for(i=2;i<j;i++){
        m=j%i;
        if(m==0){
        printf("ce nombre:%d est non premier\n",j);
        i=j;}
        }
        if(m!=0)
        printf("ce nombre:%d est premier\n",i);}}
        }while(1);
    return 0;}
    Dernière modification par JPL ; 09/12/2013 à 14h27. Motif: Ajout de la balise Code (#) pour garder l'indentation

  6. #5
    Abou_youcef

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    whoami
    De plus, quand je vois un programme avec une boucle sans condition de sortie
    Code:
    do{....}while(1);
    ça me frise le poil, et d'autant plus que c'est un programme interactif.

    do{....}while(1); elle n'a pas d'importance ,on peut surpasé.
    sur DEV quand il exécute il sort est je peut pas voir le résultat donc (ce n'est qu'un outil pour rester sur l'exécution ) .

  7. A voir en vidéo sur Futura
  8. #6
    bisou10

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Ca m'a l'air correct. Mets les balises [ code ]
    Bon tu as un algo basique mais qui doit fonctionner.

    Si tu prends un grand nombre il va afficher X fois ce nombre n'est pas premier, mais bon dans l'ensemble tu as un résultat exact.

  9. #7
    danyvio

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    L'amélioration sera de programmer une seule boucle for i etc.

    De laquelle tu sortiras dès que tu détecteras un reste nul (nombre composé)

    Dans laquelle tu persisteras jusqu'à épuisement de l'indice et tu diras alors (une seule fois !!!) "nombre premier"
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  10. Publicité
  11. #8
    danyvio

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Petit détail de puriste (les matheux apprécieront) : Le nombre 1 n'est pas premier... Mais ne tiens pas compte de cette remarque dans ton programme.
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  12. #9
    Chanur

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Bonjour,
    Quand tu dis "plus court", tu veux dire avec moins d'instructions (ce qui à mon avis n'est pas très utile) ou plus rapide ?
    Parce qu'il existe des algorithmes plus rapides, mais plus compliqués et qui donne des programmes plus longs.
    Dernière modification par Chanur ; 09/12/2013 à 13h50.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  13. #10
    JPL

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    L'ajout de la balise Code que j'ai fait à ta place montre que le programme est mal indenté.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  14. #11
    danyvio

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Suggestion : avant d'écrire en C rédige ta pensée en pseudo-code :
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  15. #12
    RiketRok

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Pour une idée d'algorithme un peu plus rapide, il est possible de calculer une racine carrée approchée (avec quelques itérations de la méthode de Newton, arrondir à l'unité supérieure) et ne pas la dépasser puisque un nombre qui n'est pas divisible par les nombres premiers inférieurs à sa racine carrée est premier.

  16. #13
    Abou_youcef

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    si tu traduit ça en langage tu vas être trouvé avec plus d'instructions , mais elle reste une bon idée sur l'algorithme

  17. #14
    Abou_youcef

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Citation Envoyé par JPL Voir le message
    L'ajout de la balise Code que j'ai fait à ta place montre que le programme est mal indenté.
    g pas compris ce que tu viens de dire (explique un peux)

  18. #15
    Abou_youcef

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Citation Envoyé par Chanur Voir le message
    Bonjour,
    Quand tu dis "plus court", tu veux dire avec moins d'instructions (ce qui à mon avis n'est pas très utile) ou plus rapide ?
    Parce qu'il existe des algorithmes plus rapides, mais plus compliqués et qui donne des programmes plus longs.
    il arrive que l’enseignant dit :"ecrivez un programme avec peu d'instructions possible".

  19. #16
    RiketRok

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Tout dépend du nombre. Imaginons que tu envois 2 000 000 000 à ton programme. La racine carrée de 2 000 000 000 est 44 721 et des poussières.

    Or, pour trouver cette racine carrée, il te suffit de ~20 itérations de .
    Donc pour 20 calculs, tu auras gagné 1999955279 itérations sur ta sous-boucle. Bien que le programme demande une fonction en plus, les gains en temps de calcul sont considérables à partir d'un certain rang.

    Aussi, si tu veux vraiment accélérer ton programme à moindre coût, ajoute un else if dans ta boucle :

    Code:
    else if ((j % 2) == 0)
    printf("Ce nombre n'est pas premier...
    Et aussi, commence ton i à 3, et monte le de deux en deux (i += 2), puisque si le nombre n'est pas pair, alors son diviseur ne peut qu'être impair.

    Si tu applique mes optimisations, et que ton prof te dit "C'est mauvais, ton code est trop long.", eh bien c'est un c*n. Parce que gagner des lignes, c'est très facile avec des ternaires, ternaires imbriquées etc.
    Mais gagner en temps de calcul, ça, c'est pas donné et c'est le plus important.
    Dernière modification par RiketRok ; 09/12/2013 à 17h41.

  20. #17
    JPL

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Citation Envoyé par JPL Voir le message
    L'ajout de la balise Code que j'ai fait à ta place montre que le programme est mal indenté.
    La balise Code, tu as vu ce que ça donne. Pour l'indentation il est évident que tes if...printf...else ne sont pas indentés à l'intérieur du do....while. Donc ce n'est pas propre pour la lecture.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  21. #18
    bisou10

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Citation Envoyé par RiketRok Voir le message
    (...)
    Si tu applique mes optimisations, et que ton prof te dit "C'est mauvais, ton code est trop long.", eh bien c'est un c*n. Parce que gagner des lignes, c'est très facile avec des ternaires, ternaires imbriquées etc.
    Mais gagner en temps de calcul, ça, c'est pas donné et c'est le plus important.
    En général, l'enseignant va plutôt dire: tu t'es fais aider, donc c'est limite.
    Difficile de courir un marathon quand tu apprends à marcher

    Au passage, merci pour cette méthode trés intéressante.

  22. #19
    Chanur

    Re : 'c' Ecrire un programme qui traite tout les nombre < à un nombre choisi, s'ils sont premiers ou

    Citation Envoyé par Abou_youcef Voir le message
    il arrive que l’enseignant dit :"ecrivez un programme avec peu d'instructions possible".
    Tout à fait d'accord.
    C'est pour ça que je posais la question.
    Pour qu'on ne parte pas dans une mauvaise direction.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. Ecrire sous la forme d'une puissance du nombre 10.
    Par yasser-lwa3r dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 02/05/2012, 23h54
  2. écrire un nombre dans une base
    Par 369 dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 10/06/2011, 00h38
  3. nombre de diviseurs premiers positifs d un nombre
    Par ludovic BOURGOIN dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 23/09/2007, 17h08
  4. Ecrire en nombre rationnel
    Par tariq_qui dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 10/09/2006, 14h09
  5. Ecrire un nombre de deux façon différentes
    Par mbollaert dans le forum Science ludique : la science en s'amusant
    Réponses: 21
    Dernier message: 06/10/2004, 16h28