Tu vérifies si le nombre est divisible par lui même. Tous les nombres sont divisibles par eux-mêmes. et tu vérifies si le nombre est divisible par 1. Tous les nombres sont divisibles par 1. Donc ton test revient à faire:
if ( true )
Un nombre premier est divisible par lui-même, par 1 et par aucun autre diviseur. C'est ça qu'il faut vérifier!
Ce n'est pas comme ça que j'ai appris à vérifier si un nombre est premier. Une chance que je ne te demande pas pour n = un milliard ... Le realloc va te coûter très cher. Et tu déborderais la pile. À la rigueur, je ferais un malloc de n nombre et je ferais un realloc à la fin pour réduire. Faire un malloc de int(1.2 * n / log(n)) n'est pas mal (ça donne un bon résultat jusquà 10^9).
Le Tout est souvent plus grand que la somme de ses parties.
D'abord dans la fonction premier, tu remets i=2. Ça risque de boucler indéfiniment?
Tu ne laisse aucune place pour l'optimisation dans la fonction premier. Tu pourrais au moins tester que i*i <= n. Si c'est plus grand, le nombre est premier. Ta fonction remplir semble fonctionner mais, comme je l'ai dit, ça va te couter cher de realloc. Tu retournes un pointeur au main mais r n'est pas défini comme tel. afficher prend T comme paramètre, où a-t-il été défini? La fonction afficher n'a pas de } juste avant le main. Ton copier-collé est correct?
Voici ma version de la fonction premier:
-
int premier(int n, int i) { if(i*i > n) return 1; if(n%i == 0) return 0; // si c'est 2, je passe à 3, sinon je passe à i+2 return premier(n, i + (i&1) + 1); }
- Edité par PierrotLeFou 20 avril 2022 à 5:04:04
Le Tout est souvent plus grand que la somme de ses parties.
fonction récursive nombres premiers inferieurs à n
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.