Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/03/2016, à 10:53

msg21

RESOLU : Un nouveau code pour tester si un nombre est premier :

Merci de tester ce code :  Car pour moi il marche bien avec codeblocks mais avec d'autres IDE il affiche des erreurs sur les types long et int : C'EST GRAVE ÇA ????? : comment corriger ce problème de types, merci

#include <stdio.h>
#include <stdlib.h>
//  Début du code de test de primalité écrit
        // par sg21et rectifié le 10 août 2015

        int main()
        {
        int k ;
        long n;
        int ren;
        long b=1;
        double c = 1;
        int e=1;
        int f=1;
        printf("Entrez un entier relatif pour tester sa primalité: ");
        ren = scanf("%d", &n);
        printf("Votre valeur est %d \n", n);

    if(n==49 ||n==-49 || n==35 ||n==-35 ||n==91||n==-91){
    printf(" %.d n'est pas premier ",n);
    }
    else{
        if( n==1 || n==-1 ){
        printf(" %.d est premier par convention ",n);
        }
        else {
        if((n-1)%6==0 ){
        k=(n-1)/6;
        for( b =1; b < (double)(k-1)/7 -1;b++ ){
        c= (double)(k-b)/(1+6*b);
        if((c -floor(c) )==0 ){
        e=0;
        }
            }
          for(  b = -(double)(k+1)/5; b < 0;b++ ){
        c= (double)(k-b)/(1+6*b);
        if((c -floor(c) )==0){
        f=0;
            }
        }
        if (e*f==0){
        printf(" %.d  n'est pas premier",n);
        }
        else if (e*f==1){
        printf(" %.d  est  premier",n);
        }
        }
        else if((n+1)%6==0 ){
        k=(n+1)/6;
        for( b =1; b < (double)(k-1)/5;b++ ){
        c= (double)(k+b)/(1+6*b);
        if((c -floor(c) )==0){
        e=0;
        }
            }
          for(  b = -(double)(k+1)/5; b < 0;b++ ){
        c= (double)(k+b)/(1+6*b);
        if((c -floor(c) )==0){
        f=0;
            }
        }
        if (e*f==0){
        printf(" %.d  n'est pas premier",n);
        }
        else if (e*f==1){
        printf(" %.d  est  premier",n);
        }
        }
        else if(n==2 ||n==-2 || n==3 ||n==-3){
        printf(" %.d  est  premier",n);
        }
        else {
        printf(" %d  n'est pas premier",n);
        }
        }
        }
        }
        //Fin du code

Dernière modification par msg21 (Le 18/03/2016, à 19:08)

Hors ligne

#2 Le 17/03/2016, à 13:05

pingouinux

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Bonjour,
Ton programme trouve que 91 est premier.
C'est du chinois pour moi… smile

Hors ligne

#3 Le 17/03/2016, à 13:51

pires57

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Ton programme ne sort pas les bons résultats (91 entre autre) et il est beaucoup trop long pour ce que tu as a faire.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (void)
{
  int i, nbr, cpt, test,limite;
  while(1){
  test = cpt = 0;
  printf ("Entrez un nombre entier : ");
  if (scanf ("%d", &nbr) != 1)
    return -1;
  limite = sqrt(nbr) + 1;

  if (nbr % 2 == 0)
          test = 1;
  else{
      for (i = 3 ; i < limite && ! test; i+=2, cpt++)
        if (nbr % i == 0)
          test = 1;
  }
  if (!test)
          printf ("%d est un nombre premier, nombre iterations = %d\n", nbr, cpt);
  else
          printf ("%d n'est pas nombre premier, nombre iterations = %d\n", nbr, cpt);
  }
  return 0;
}

Dernière modification par pires57 (Le 17/03/2016, à 13:52)


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#4 Le 17/03/2016, à 16:37

grigouille

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Ton programme me dit que 1 est premier par convention lol.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#5 Le 17/03/2016, à 16:51

cqfd93

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Modération

Bonjour,

@msg21 : par respect pour les autres membres qui ont pris la peine de te répondre, j'ai restauré le contenu de ton premier message que tu avais effacé. Il aurait été certainement plus enrichissant pour toi de discuter avec eux pour savoir quel était le problème dans ton code plutôt que de simplement le supprimer.


cqfd93

Hors ligne

#6 Le 17/03/2016, à 19:53

cqfd93

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

OK, je rouvre le fil pour permettre une discussion constructive, pas pour que tu effaces à nouveau le premier message.


cqfd93

Hors ligne

#7 Le 17/03/2016, à 20:01

msg21

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Merci cqfd93
Merci penguinux, y't-il  d'autres nombres, afin que je puisse corriger le code ?

Hors ligne

#8 Le 17/03/2016, à 20:13

Bougron

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Bonsoir
Pour ton code, tu peux itérer de 2 en 2 en commençant a 3 et a t'arrêtant à  9..............9    tu stockes tes résultats et tu compares à la liste officielle des nombres premiers, Elle doit bien exister sous forme de fichier http://nombrespremiersliste.free.fr/lis … ard.tar.gz

Dernière modification par Bougron (Le 17/03/2016, à 20:16)

Hors ligne

#9 Le 17/03/2016, à 20:13

pingouinux

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

il affiche des erreurs sur les types long et int : C'EST GRAVE ÇA ????? : comment corriger ce problème de types, merci

C'est gênant pour les entiers très grands. Pour y remédier, remplacer, dans les formats, "%d" par "%ld".

Hors ligne

#10 Le 17/03/2016, à 20:32

cqfd93

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Je ne saisis pas la nécessité de tester ces 4 entiers :

    if(n==49 ||n==-49 || n==35 ||n==-35){

Pourquoi ceux-là ?


cqfd93

Hors ligne

#11 Le 17/03/2016, à 21:18

moko138

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

[HS]

pingouinux a écrit :

Ton programme trouve que 91 est premier.

Cela rappellera à certains
"Z / 91Z" !!!
[/HS]


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#12 Le 17/03/2016, à 21:40

pingouinux

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

cqfd93 #10 a écrit :

Je ne saisis pas la nécessité de tester ces 4 entiers :

    if(n==49 ||n==-49 || n==35 ||n==-35){

Pourquoi ceux-là ?

Pour 35, je ne sais pas, mais si tu enlèves le test, il trouve que 49 est premier.

Hors ligne

#13 Le 17/03/2016, à 22:08

msg21

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

Bonne question.
Pour les 4 nombres je les ai trouves par calcul. ....
Ma question : y a t-il d autres nombres autre que 91et -91?

Hors ligne

#14 Le 17/03/2016, à 22:13

pingouinux

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

msg21 a écrit :

Ma question : y a t-il d autres nombres autre que 91et -91?

Jusqu'à 2 000 000, je n'ai pas trouvé d'autres erreurs (je n'ai testé que les nombres positifs).

Hors ligne

#15 Le 17/03/2016, à 22:22

msg21

Re : RESOLU : Un nouveau code pour tester si un nombre est premier :

pingouinux a écrit :

Jusqu'à 2 000 000, je n'ai pas trouvé d'autres erreurs (je n'ai testé que les nombres positifs).


Merci penquinux.
Si ce n est que pour +91 et -91 il me semble que j ai devine pourquoi. J attends la confirmation des autres.......
Mais comment vous avez fait pour tester tout les dits nombres
Voudriez vous me poster le code modifie avec lequel vous avez fait le test? Merci

Dernière modification par msg21 (Le 18/03/2016, à 09:30)

Hors ligne