[Renommé] Nombres premiers

Fermé
blackdiamont Messages postés 5 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 20 octobre 2015 - Modifié par Whismeril le 29/05/2015 à 21:10
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 mai 2015 à 20:01
Bonjour,
svp j'aimerais avoir votre aide sur ce code. je suis en premiere annee informatique medicale et jai ecrit ce programme mai ca ne compile pas. aidez moi svp
on me demande d'écrire un programme permettant d'afficher les nombres premiers allant de 2 à 100 et d'afficher le temps ke fait pour afficher ces nombres.

voici mon code que jai essayer d'écrire:

long long nbrePremiers(long long max);
long long test(long long t);

int _tmain(int argc, _TCHAR* argv[])
{
 long long nbre;
 double t1, t2;
 long long max = 440000000;
 t1 = clock();
 nbre= nbrePremier(max);
 t2 = clock();
 printf("nbrePremier maximal %i ", nbre);
 printf("\ntemps: %8.3f sec \n", (double)(t2 - t1) / CLOCKS_PER_SEC);

 return 0;
}

long long primzahl( long long max)
{

 long long i;
 for (i = max; i > 1; i--)
 {
  if (test(i) == 1) return i;
 }
 return 2;
}


long long test( long long t) {

 long long j;
 for (j = 2; j*j<=t; j++)
 {
  if (t%j == 0) return 0;
 }
 return 1;
}


EDIT: Ajout de la coloration syntaxique.

2 réponses

NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 331
29 mai 2015 à 21:28
Quel est le message d'erreur ?
0
blackdiamont Messages postés 5 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 20 octobre 2015
29 mai 2015 à 22:54
erreur: reference indéfinie du nbrePremier
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 331
29 mai 2015 à 23:13
Tu as déclaré le prototype de la fonction, mais tu ne l'as pas implémentée.
0
blackdiamont Messages postés 5 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 20 octobre 2015
29 mai 2015 à 23:20
desoler jai ecrit le code en allemand et jetai obligé de traduire en francais pour ke vs comprenez
long long nbrepremier( long long max)
maintenan kan je compile ca me donne le dernier nbre premier et non ce ke tous les nbres que je demande
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 331
29 mai 2015 à 23:43
Peux-tu poster ton code tel qu'il est ? Car là, je peine à tout comprendre.
(Mettre des commentaires en français, ça devrait aller)
0
Salut, normal qu'il t'envoi q'un nombre, tu as mit une valeur dans nbre puis tu l'as affiché, il faudrait une boucle ou bien stocker dans un tableau puis afficher le tableau. il faudrait nous redonner le code version corrigé. par contre je te conseille la crible d'Ératosthène si tu veux tous les nombres premiers jusqu'à 440000000 ...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 31/05/2015 à 20:04
Bonjour,

int _tmain(int argc, _TCHAR* argv[])
Le prototype standard est : int main(void) ou int main(int argc, char *argv[]).

Attention le type long long ne marche qu'en C99. Vérifie bien que c'est le cas de ton compilateur. Sinon, il faudra mettre des long en lieu et place. Si tout est ok, tu peux même utiliser unsigned long long pour augmenter le nombre maximum.

printf("nbrePremier maximal %i ", nbre);
Remarque générale : %i n'est pas correct pour les long long. Il faut plutôt utiliser %lld (L minuscule). Vérifie pour les autres printf().

long long max = 440000000;
Remarque générale également, pour les assignations il faut apposer LL. Par exemple : 440000000LL (important pour les nombres supérieurs à INT_MAX.

Attention à ta fonction test() qui ne fonctionne pas pour le cas 2. 2 est un nombre premier. Pourtant ta fonction considèrera qu'il est non premier... Utilise un if.
Note : Fonctionnellement, ça changera rien car ta fonction primzahl() retourne 2 quand même. Il n'empêche qu'algorithmiquement, test() est fausse et ne pourra pas être ré-utilisée...

Corrige tout ça et dis-nous si cela règle ton problème. Si non, reposte ton programme avec les corrections et dis-nous précisément ce qui ne fonctionne pas.

Sinon c'est normal que ton programme ne retourne qu'un nombre puisque tu lui demandes d'afficher le nombre premier le plus grand. Si tu veux afficher tous les nombres premiers, il te suffit de mettre un printf() dans primzahl() en plus du return i;

Cdlt,

Google is your friend
0