[c++] Les nombres de Fermat
Résolu/Fermé
widi70
Messages postés
649
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
22 juillet 2019
-
19 mars 2008 à 17:53
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 19 mars 2008 à 22:34
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 19 mars 2008 à 22:34
A voir également:
- Rémi et safia ont découvert le code binaire des nombres en cours d'informatique. ils l'utilisent pour se donner des rendez-vous secrets. ils ont décidé que : un message comporte 5 bits et donne le jour puis le moment les jours et les moments sont traduits par les nombres comme ci-dessous
- Le code ascii en informatique - Guide
- Message - Guide
- Code binaire des nombres - Guide
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
9 réponses
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 828
19 mars 2008 à 18:09
19 mars 2008 à 18:09
On va apporter quelques corrections...
Conseils de programmation
- Personnellement je trouve que tu ferais mieux d'écrire std::cout std::endl et std::cin et supprimer le using namespace std, mais tant que ça se cantonne à un .cpp pourquoi pas... Disons qu'il serait plus propre de taper :
- On peut utiliser 2.0 au lieu de cast en double, ça suffit à lever l'ambiguité en terme de compilation (entre int et double). A priori quand on caste en C++ on utilise plutôt les cast du C++ par exemple static_cast<double> ou dynamic_cast<double> selon les besoins...
- Utilise des unsigned au lieu des int quand c'est forcément un entier positif (je pense en particulier à i et n qui sont sensés être positifs). Parce que là si l'utilisateur prend un n négatif avec un int ça fait une boucle infinie... Par ailleurs i ne devrait en toute rigueur être déclaré que pour le for (cf notion d'horizon (scope) en c++). En l'occurrence si tu saisis une valeur négative celle-ci sera convertie en entier positif, ce qui évitera au moins une boucle infinie.
- Pour la compilation n'oublie pas de linker avec la librairie math (option -lm). Par exemple si tu compiles avec g++ (donc par exemple devcpp ou code::blocks sous windows) :
Bonne chance
#include <iostream> #include <cmath> // header c++ pour pow #include <cstdio> // header c++ pour getchar() int main(){ unsigned n; // entier entré par l'utilisateur double calcul; std::cout << "Veuillez entrer un entier n" << std::endl; std::cin >> n; std::cout << "Les nombres de Fermat sont: " << std::endl; for(unsigned i=0;i<=n;i++){ calcul = pow(2.0,pow(2.0,n)); // je calcule 2^2^n std::cout << calcul << " ce nombre est premier" << std::endl; } // <--- j'imagine que c'est un oubli ? getchar(); // standard contrairement à system("pause"); return 0; // n'oublie pas le code de retour }
Conseils de programmation
- Personnellement je trouve que tu ferais mieux d'écrire std::cout std::endl et std::cin et supprimer le using namespace std, mais tant que ça se cantonne à un .cpp pourquoi pas... Disons qu'il serait plus propre de taper :
using std::endl; using std::cout; using std::cin;
- On peut utiliser 2.0 au lieu de cast en double, ça suffit à lever l'ambiguité en terme de compilation (entre int et double). A priori quand on caste en C++ on utilise plutôt les cast du C++ par exemple static_cast<double> ou dynamic_cast<double> selon les besoins...
- Utilise des unsigned au lieu des int quand c'est forcément un entier positif (je pense en particulier à i et n qui sont sensés être positifs). Parce que là si l'utilisateur prend un n négatif avec un int ça fait une boucle infinie... Par ailleurs i ne devrait en toute rigueur être déclaré que pour le for (cf notion d'horizon (scope) en c++). En l'occurrence si tu saisis une valeur négative celle-ci sera convertie en entier positif, ce qui évitera au moins une boucle infinie.
- Pour la compilation n'oublie pas de linker avec la librairie math (option -lm). Par exemple si tu compiles avec g++ (donc par exemple devcpp ou code::blocks sous windows) :
g++ -W -Wall -lm plop.cpp
Bonne chance
widi70
Messages postés
649
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
22 juillet 2019
65
19 mars 2008 à 19:58
19 mars 2008 à 19:58
bonjour et merci bcp de ton aide.
Donc j'ai fait toutes les modif que tu m'as conseillé sauf pour "std::cout std::endl et std::cin" j'ai appris comme ça et les prof aiment bien enfin...
Sinon lorsque j'ecrit les pow avec 2.0 le compilateur n'aime pas je voit pas trop pourquoi d'ailleur mais enfin bon.
Et sinon mon for se ferme bien juste apres mon cout (entre mon cout et mon getchar) pour qu'il m'affiche tous les nombres.
Sinon la fonction getchar() ne me permet pas d'avoir mon terminal ouvert assez longtemp pour que je puisse voir ce qu'il y a d'ecrit.
Et sinon lors de l'execution j'ai toujours le même probleme il m'affiche:
1.#INF ce nombre est premier
Donc je voit pas trop de quoi ça vient
Merci encore de ton aide
Donc j'ai fait toutes les modif que tu m'as conseillé sauf pour "std::cout std::endl et std::cin" j'ai appris comme ça et les prof aiment bien enfin...
Sinon lorsque j'ecrit les pow avec 2.0 le compilateur n'aime pas je voit pas trop pourquoi d'ailleur mais enfin bon.
Et sinon mon for se ferme bien juste apres mon cout (entre mon cout et mon getchar) pour qu'il m'affiche tous les nombres.
Sinon la fonction getchar() ne me permet pas d'avoir mon terminal ouvert assez longtemp pour que je puisse voir ce qu'il y a d'ecrit.
Et sinon lors de l'execution j'ai toujours le même probleme il m'affiche:
1.#INF ce nombre est premier
Donc je voit pas trop de quoi ça vient
Merci encore de ton aide
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 mars 2008 à 20:34
19 mars 2008 à 20:34
Salutations,
Pour un double, il y a un bit de signe, 11 bits d'exposant et 52 bits de mantisse.
L'exposant peut être positif ou négatif, ce qui laisse 10 bits de marge. L'ordre de grandeur maximal d'un double est alors 2^(2^10)
Essaie donc avec de très petites valeurs pour ton n au risque de très vite dépasser la capacité de codage d'un double.
Wikipedia: Nombres flottants à double précision
M.
Pour un double, il y a un bit de signe, 11 bits d'exposant et 52 bits de mantisse.
L'exposant peut être positif ou négatif, ce qui laisse 10 bits de marge. L'ordre de grandeur maximal d'un double est alors 2^(2^10)
Essaie donc avec de très petites valeurs pour ton n au risque de très vite dépasser la capacité de codage d'un double.
Wikipedia: Nombres flottants à double précision
M.
widi70
Messages postés
649
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
22 juillet 2019
65
19 mars 2008 à 20:42
19 mars 2008 à 20:42
bonjour et merci de ton aide. Donc en effet il y avait bien un probleme de "place"
Donc j'ai essaye avec des petits chiffres mais malheureusement mon for ne m'affiche que la même chose et je ne comprend pas trop pourquoi
Si je met n =3 il devrait ecrire:
2^2^0
2^2^1
2^2^2
2^2^3
enfin les resultats non?
Merci bcp
Donc j'ai essaye avec des petits chiffres mais malheureusement mon for ne m'affiche que la même chose et je ne comprend pas trop pourquoi
Si je met n =3 il devrait ecrire:
2^2^0
2^2^1
2^2^2
2^2^3
enfin les resultats non?
Merci bcp
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 828
19 mars 2008 à 21:19
19 mars 2008 à 21:19
Non :-) Pour ca il faudrait écrire :
Bonne chance
std::cout << "2^2^" << i << " = " << calcul << std::endl;
Bonne chance
widi70
Messages postés
649
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
22 juillet 2019
65
19 mars 2008 à 21:29
19 mars 2008 à 21:29
honte a moi lol (j'ai melangé i et n )
merci bcp
et sinon t'aurais pas un algo qui dit si un nombre est premier ou non
merci enormement de votre aide
merci bcp
et sinon t'aurais pas un algo qui dit si un nombre est premier ou non
merci enormement de votre aide
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 828
19 mars 2008 à 21:54
19 mars 2008 à 21:54
Donc ton problème est résolu ?
widi70
Messages postés
649
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
22 juillet 2019
65
19 mars 2008 à 22:02
19 mars 2008 à 22:02
oui oui mon probleme est resolu:
le premier probleme etait au niveau de mes nombres il etait trop grand donc pas assez de place.
et le deuxieme probleme etait dans "calcul" ou j'ai mis n a la place de i
voila merci bcp
bonne soiree
le premier probleme etait au niveau de mes nombres il etait trop grand donc pas assez de place.
et le deuxieme probleme etait dans "calcul" ou j'ai mis n a la place de i
voila merci bcp
bonne soiree
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 mars 2008 à 22:34
19 mars 2008 à 22:34
Pour les nombres premiers, le Wikipédia fr donne un algo assez bateau.
M.
M.