Nombres premiers [C++] Helppppp
Dernière réponse : dans Programmation
Salut tout le monde !
J'ai un gros problème ! J'essaye de faire un programme sur les nombres premiers en C++ mais j'y arrive pas :-(:-(
Je vos explique ce que je cherche à faire afin que vous puissiez m'aider svp !
Tout d'abord je veux créer une fonction booléenne qui test si le nombre est premier ou pas.
Ensuite dans ma fonction principale main je veux que l'utilisateur saisisse un entier (ex:20) et que ça appelle la fonction est que ça m'écrive la liste de tous les nombres premiers entre 0 et n (ex:si n=20, ça affiche 7, 11,13,17,19).
Je souhaite aussi essayer une variante de ce programme, c'est a dire que l'utilisateur entre un entier, et que le programme le decompose en facteurs premiers, et donc que le programme dise si c'est un nombre premier ou pas (ex: 30=2*3*5, donc 30 n'est pas premier)
Mais J'AI TROPS DE MALLLLLLLL :-(
Si quelqu'un pouvait avoir l'amabilité de m'ecrire un exemple de ce que ça donnerait en C++
MERCI D'AVANCE ;-)
J'ai un gros problème ! J'essaye de faire un programme sur les nombres premiers en C++ mais j'y arrive pas :-(:-(
Je vos explique ce que je cherche à faire afin que vous puissiez m'aider svp !
Tout d'abord je veux créer une fonction booléenne qui test si le nombre est premier ou pas.
Ensuite dans ma fonction principale main je veux que l'utilisateur saisisse un entier (ex:20) et que ça appelle la fonction est que ça m'écrive la liste de tous les nombres premiers entre 0 et n (ex:si n=20, ça affiche 7, 11,13,17,19).
Je souhaite aussi essayer une variante de ce programme, c'est a dire que l'utilisateur entre un entier, et que le programme le decompose en facteurs premiers, et donc que le programme dise si c'est un nombre premier ou pas (ex: 30=2*3*5, donc 30 n'est pas premier)
Mais J'AI TROPS DE MALLLLLLLL :-(
Si quelqu'un pouvait avoir l'amabilité de m'ecrire un exemple de ce que ça donnerait en C++
MERCI D'AVANCE ;-)
Autres pages sur : nombres premiers helppppp
Lassé par la pub ? Créez un compte
Pour le moment j'ai que ça ! Je sais c'est vraiment peu mais je débute ...
Please Help
#include<iostream>
using namespace std;
bool testPremier(int nb)
{
//la je sais pas
}
int main()
{
int nb;
cout << "Veuillez saisir un nombre entier : " << endl;
cin >> nb;
if (testPremier(nb))
cout << "Ce nombre est premier" << endl;
else
cout << "Ce nombre n'est pas premier" << endl;
Please Help
#include<iostream>
using namespace std;
bool testPremier(int nb)
{
//la je sais pas
}
int main()
{
int nb;
cout << "Veuillez saisir un nombre entier : " << endl;
cin >> nb;
if (testPremier(nb))
cout << "Ce nombre est premier" << endl;
else
cout << "Ce nombre n'est pas premier" << endl;
alors j'ai réfléchi a ce que tu ma répondu, mais il y a un probleme, en effet tu prends par exemple 15, si tu fais 15/2 ca fait 7 et le reste est 1. Donc le reste n'est pas égal à 0, pourtant 15 n'est pas premier puisqu'il est divisible par 3.
Je pense que pour trouver si le nombre est premier ou pas, il faut dire que s'il y a un reste après l'avoir divisé par 2, ou par 3, ou par 5 ou par 7, il est premier.
Mais mon rpoblème est surtout dans le fait de traduire ça en C++ dans ma fonction "testPremier" et aussi de pouvoir afficher ses facteurs premiers.
Merci quand meme mdy ;-)
Je pense que pour trouver si le nombre est premier ou pas, il faut dire que s'il y a un reste après l'avoir divisé par 2, ou par 3, ou par 5 ou par 7, il est premier.
Mais mon rpoblème est surtout dans le fait de traduire ça en C++ dans ma fonction "testPremier" et aussi de pouvoir afficher ses facteurs premiers.
Merci quand meme mdy ;-)
bon bah, tu prends ton nombre n
i, un compteur
divisible, un booleen (faux, par defaut)
pour i de 2 à n (n non compris)
si n modulo i = 0
alors c'est divisible (divisible= vrai)
fin si
fin pour
pour afficher ces facteurs premiers, sans les stocker
n ton nombre
i, un compteur
pour i de 2 à n (n non compris)
si n modulo i = 0
alors affiche i
et n= n/i
fin si
fin pour
le n restant est forcement indivisible donc on l'affiche
voilà, avec ces bouts tu dois pouvoir facilement arriver a tes fins
i, un compteur
divisible, un booleen (faux, par defaut)
pour i de 2 à n (n non compris)
si n modulo i = 0
alors c'est divisible (divisible= vrai)
fin si
fin pour
pour afficher ces facteurs premiers, sans les stocker
n ton nombre
i, un compteur
pour i de 2 à n (n non compris)
si n modulo i = 0
alors affiche i
et n= n/i
fin si
fin pour
le n restant est forcement indivisible donc on l'affiche
voilà, avec ces bouts tu dois pouvoir facilement arriver a tes fins
Bein déjà un nombre premiers (mis à part 2) ne peut être premier donc déjà tu peux éliminé tous les multiples de 2n avec n aléatoires. et pour les nombres restants tu peux éliminé également tous les nombres étant des multiples de 2n+1(nombres impairs) avec n aléatoires mais dans les deux n il faut exclure la possibilité n=0 sinon tu obtients soit 0 soit 1 qui ne sont pas premiers. Tiens vois ce que tu peux faire avec cela et tiens au courant le forum. Et pour la décomposition en facteur premier il faut que tu fasses une boucle de division en sachant que tu ne dois obtenir que des nombres premiers.
Les nombres aléatoires peuvent être généré à l'aide de srand().
Les nombres aléatoires peuvent être généré à l'aide de srand().
De plus pour limiter n, tu calcules la racine carré du nombre en prenant le nombre entier inférieur, de cette façon tu as le nombre qu'il ne faut pas dépasser, ainsi cela te permet d'éviter la boucle infini du for car cela te donne ts les nombres à tester, un exemple illustrera mieu ce concept. 27, sa racine vaut environ 5.2 en arrondissant à l'entier inférieur on retiendra 5. Donc tu généres ts les n tels que 2n<5 et 2n+1<5 ainsi tu as peu de nombre à généré. Enfin tu vois quoi.
Et à mon avis tu peux très bien développé cela sans fonction bouléenne, néanmoins cela peut être un bonne entrainement pour un débutant
Et à mon avis tu peux très bien développé cela sans fonction bouléenne, néanmoins cela peut être un bonne entrainement pour un débutant
en C, avec des macros :
FALSE et TRUE, entiers
MAX_N, le nombre le plus grand qu'on va donner, entier
En ocaml :
Une autre version ocaml de tous_les_premiers est :
FALSE et TRUE, entiers
MAX_N, le nombre le plus grand qu'on va donner, entier
int testpremier(int n)
{
assert(n > 0);
int i;
for(i = 0; i <= sqrt(n); i++)
if ((n % i) == 0) return FALSE
}
int tous_les_premiers(int n)
{
assert(n > 0);
int i;
int crible[MAX_N];
for(i = 0; i < MAX_N; i++)
crible[i] = TRUE; //on dechoche toutes les cases du tableau
for(i = 2; i < (MAX_N/2); i++)
{
if crible[i] = FALSE continue; //si le nombre n'est pas premier (est coché) on passe au suivant
int j;
for(j = 2; j*i < MAX_N; j++) //on coche tous les multiples du nombre
crible[i*j] = FALSE;
printf("%d\n", i); //on affiche le nombre premier
}
}
En ocaml :
let est_premier nombre =
assert(nombre > 0);
let rec test = function
1 -> true
| i -> (nombre mod i = 0) && test (i-1) //si i est un diviseur alors le nombre est un premier, sinon on regarde si (i-1) est diviseur etc...
in test (floor (sqrt float(nombre))
in
let tous_les_premiers nombre =
assert(nombre > 0);
let crible = Array.make nombre true;
Array.iteri
(fun indice est_premier ->
if est_premier then begin
let multiples = ref indice in
while (!multiples * indice) < nombre do
multiples := !multiples + indice;
crible[!multiples] <- false;
done;
print_int indice; print_newline();
end
)
crible;
in
Une autre version ocaml de tous_les_premiers est :
let tous_les_premiers m =
let rec crible l = function
| n when n > m -> l
| n ->
let p = List.fold_left (fun a b -> (n mod b <> 0) && a) true l in
crible (if p then n :: l else l) (n + 1) in
List.iter (fun i -> print_int i; print_newline();) (crible [] 2);;
en C, avec des macros :
FALSE et TRUE, entiers
MAX_N, le nombre le plus grand qu'on va donner, entier
En ocaml :
Une autre version ocaml de tous_les_premiers est :
FALSE et TRUE, entiers
MAX_N, le nombre le plus grand qu'on va donner, entier
int testpremier(int n)
{
assert(n > 0);
int i;
for(i = 0; i <= sqrt(n); i++)
if ((n % i) == 0) return FALSE
}
int tous_les_premiers(int n)
{
assert(n > 0);
int i;
int crible[MAX_N];
for(i = 0; i < MAX_N; i++)
crible[i] = TRUE; //on dechoche toutes les cases du tableau
for(i = 2; i < (MAX_N/2); i++)
{
if crible[i] = FALSE continue; //si le nombre n'est pas premier (est coché) on passe au suivant
int j;
for(j = 2; j*i < MAX_N; j++) //on coche tous les multiples du nombre
crible[i*j] = FALSE;
printf("%d\n", i); //on affiche le nombre premier
}
}
En ocaml :
let est_premier nombre =
assert(nombre > 0);
let rec test = function
1 -> true
| i -> (nombre mod i = 0) && test (i-1) //si i est un diviseur alors le nombre est un premier, sinon on regarde si (i-1) est diviseur etc...
in test (floor (sqrt float(nombre))
in
let tous_les_premiers nombre =
assert(nombre > 0);
let crible = Array.make nombre true;
Array.iteri
(fun indice est_premier ->
if est_premier then begin
let multiples = ref indice in
while (!multiples * indice) < nombre do
multiples := !multiples + indice;
crible[!multiples] <- false;
done;
print_int indice; print_newline();
end
)
crible;
in
Une autre version ocaml de tous_les_premiers est :
let tous_les_premiers m =
let rec crible l = function
| n when n > m -> l
| n ->
let p = List.fold_left (fun a b -> (n mod b <> 0) && a) true l in
crible (if p then n :: l else l) (n + 1) in
List.iter (fun i -> print_int i; print_newline();) (crible [] 2);;
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumProgramme nombres premiers
- ForumTelecharger mes nombres premiers mnp
- ForumProgrammation nombres premiers c
- ForumProgramme sur les nombres premiers
- ForumEcrire un algorithme qui nombres premiers
- ForumProgramme casio nombres premiers
- ForumAlgo nombres premiers
- ForumDecomposition en nombres premiers java
- articlesAlgorithme de 50 nombres premiers
- ForumJava n premiers nombres premiers
- Voir plus