Rechercher : dans
Par :

Nombres premiers en language c

Dernière réponse le 6 jun 2009 à 21:02:46 moi, le 13 jan 2005 à 14:33:29 
 Signaler ce message aux modérateurs

Déjà bonjours à tous,
Mon problème est de trouver des nombres premiers. En fait sur des entiers de 0 à 100, je dois faire un programme (en language c)qui compte le nombre de nombres premiers et qui ensuite les affiches. Mais moi je ne sais pas du tout comment trouver ces nombres, comment les calculer. On m'a vaguement parler des modulos etc. mais je n'ai jamais appris réellement à m'en servir alors si quelqu'un pouvais m'aider...
merci d'avance.

Meilleures réponses pour « nombres premiers en language c » dans :
Vérifier si un nombre entier est un nombre premier en C Voir Définition nombre premier Algorithme 1 : les diviseurs compris entre 2 et N-1 seront testés Algorithme 2 : les diviseurs pairs ne seront pas testés, la recherche se limitant aux diviseurs impairs Algorithme 3 : les diviseurs impairs jusqu'à la...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Introduction au langage C VoirPetite histoire du C Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage qui permettrait d'obtenir un système d'exploitation de type UNIX portable. D.Ritchie...

1

Inconnito, le 13 jan 2005 à 14:56:36
  • +1

Je ne voudrais pas dire de bétise, j'avais fait ce programme en Turbo Pascal il y a un petit moment, en gros l'algo c'est ça je crois :

Pour i de 1 à 100
Diviser i par 2
Diviser i par 3
Diviser i par 5
Diviser i par 7
Si un seul des restes de ces divisions est égal à 0 le nombre n'est pas premier.
Aprés c'est logique si aucun est égal a 0 ben tu l'affiches car il est premier ;)
J'espère que ça pourras t'aider.
Après je connais pas ton niveau en c++, si tu as des problème avec la syntaxe demande, peut être que quelqu'un pourra t'aider plus que moi.

----
L'orthographe est primordiale sur un forum,
la politesse l'est encore plus.

Répondre à Inconnito

2

blux, le 13 jan 2005 à 14:57:11
  • +1

Salut,

les nombres premiers sont ceux qui ne sont divisibles que par eux-mêmes et par 1.

Il faut donc exclure tous ceux qui sont pairs (divisibles par deux), divisibles par 3 (somme des chiffres divisible par 3), qui se terminent par 5 (multiples de 5) ainsi que tous les nombre que l'on a pu tester jusqu'à présent et qui se sont révélés premiers (7, 11, 13...)

Pour savoir si un nombre est divisible par un autre, il faut appliquer la fonction 'modulo' qui renvoie le reste de la division.

Exemple :

10 modulo 3 = 1, le reste est non nul, donc le nombre n'est pas divisible.

12 modulo 4 = 0, le reste est nul, 12 est donc divisible par 3.

Cette fonction s'appelle aussi 'division euclidienne' ou 'division entière'...

Tu trouveras facilement avec google des exemples de programmes calculant les nombres premiers, ainsi que des méthodes pour accélérer les traitement (cette recherche est la base de nombreux systèmes de cryptographie...)

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

8

blux, le 13 jan 2005 à 15:57:59
  • +1

12 modulo 4 = 0, le reste est nul, 12 est donc divisible par 3.

Divisible par 4, bien sûr et non par 3... ;-)
Enfin, il est divisible par 3, mais c'est pas avec 'modulo' qu'on le sait...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

3

Inconnito, le 13 jan 2005 à 15:04:46

Comme je l'ai écrit, je pense que 2,3,5 et 7 suffisent, innutil de tenter de diviser par tous les nombres premiers déjà trouver :)

----
L'orthographe est primordiale sur un forum,
la politesse l'est encore plus.

Répondre à Inconnito

4

blux, le 13 jan 2005 à 15:15:44

Voui, si on s'arrête à 100, mais au-delà, non !

143 = 13 x 11, par exemple, n'est divisible ni par 2, 3, 5 ou 7...

J'ai parlé du cas général...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

5

random, le 13 jan 2005 à 15:20:16
  • +2

Si ton échantillon est petit tu peux utilser un crible
tu définis une array de boolean de 2 à cardinal de l'ensemble valeur true
testé par exemple 1000 000
ensuite tu demarres à 2
et tu fais une boucle step 2 à 1000000 tous les nombres trouvés
sont mutilpes de 2 et tu les mets à faux
tu recherches le premier premier dans ton array ce sera 3 puis 5
toujours une boucle 3 et 5 qui met à faux leurs mutilples
l'algo s'arrete quand tu arrives à la racine du nombre
c'est le crible d'eratosthène (?)
par contre pour les grands nombres c'est lèger comme solution

Répondre à random

6

Inconnito, le 13 jan 2005 à 15:22:20
  • +2

Dans ce cas oui tu as raison, c'est utile de le préciser. ;)

----
L'orthographe est primordiale sur un forum,
la politesse l'est encore plus.

Répondre à Inconnito

7

moi, le 13 jan 2005 à 15:27:07

Merci...
je crois que j'ai pigé le truc alors je vais essayer. a+

Répondre à moi

9

mohammed, le 15 jan 2005 à 12:10:49

Salut,
voilà tous simplement un nombre premier accepte la division par 1 et pa lui même donc le nbre de diviseurs est 2
voici en pascal
cptenp:=0;
for i:=1 to 100 do
begin
s:=0;
for j:=1 to i do
begin
if i mod j =0 then
s:=s+1;
end;{boucle de j}
if s=2 then
begin
cptenp:=cptenp+1;
A[cptenp]:=i
end;{fin de la boucle i}
writeln ("le nombre des nombres premiers",cptenp);
for i:=1 to cptenp do
writeln ("A[",i,"]",A[i]);
end.
bonne chance.
Merci
bonne chance.
Merci.

Répondre à mohammed

10

random, le 16 jan 2005 à 07:52:17

C'est assez stupide tu mets le point d'arret de la seconde boucle
à la valeur de la première
or aucun nombre ne peut avoir un diviseur supérieur à sa racine
sans avoir un diviseur inférieur à sa racine
donc tu aurais du écrire
for j:=1 to entiere(racine(j))

Répondre à random

16

mohammed, le 17 jan 2005 à 11:49:22

Chère random,
à part la stupidité de 1 autres remarques.
A[1]=1
cptenp=1
Bonne chance.
Merci

Répondre à mohammed

18

scorpionsfax, le 3 sep 2007 à 17:32:44

Pourquoi aucun nombre ne peut avoir un diviseur supérieur à sa racine
pourquoi tu ne fais pas 100 div 2

Configuration: Windows XP
Internet Explorer 6.0

Répondre à scorpionsfax

11

aldo13, le 16 jan 2005 à 09:18:46

Salut ,

"un nombre premier accepte la division par 1 et pa lui même "

et le cas du 1 ?

Répondre à aldo13

12

random, le 16 jan 2005 à 10:00:45

1 répond à la définition
il ne connaît que deux diviseurs 1 et lui même

elle est pas belle, la vie ?

Répondre à random

13

aldo13, le 16 jan 2005 à 10:11:14

1 ne devrait pas etre listé comme nombre premier.

Répondre à aldo13

14

Ravachol, le 16 jan 2005 à 10:33:53

Salut,
1 n'est effectivement pas premier car justement il ne correspond pas à la définition puisqu'il n'admet qu'un diviseur (1 et lui-même étant identique en l'occurence).

A++

Répondre à Ravachol

15

random, le 16 jan 2005 à 15:11:07

1 est premier comme deux est pair


elle est pas belle, la vie ?

Répondre à random

17

bidule, le 25 fév 2007 à 00:07:07

Un nombre premier est >1
et je suis formel..

Répondre à bidule

19

Nri, le 27 sep 2007 à 18:31:08
  • +1

En effet, 1 contredit la définition des nombres premiers qui est
"Un nombre est premier ssi il admet exactement deux diviseurs distincts, 1 et lui-même"
Donc 1 n'est pas premier

PS: je sais que je réouvre un vieux topic mais c'est pour clore la discussion à ce sujet

Répondre à Nri

20

MaXX, le 17 oct 2008 à 22:00:28

L'algorithme le plus rapide : Le Crible d'Ératosthène

http://fr.wikipedia.org/wiki/Crible_d%27%C3%89ratosth%C3%A8n­e

Répondre à MaXX

21

Amine, le 12 mai 2009 à 18:08:30

voici un petit programme que j'ai codé en langage c pour repondre à votre question :

#include<stdio.h>
#include<conio.h>
main()
{
      int i,p;
    p=1;
    printf("( ");
    for(i=2;i<100;i++)
 {
      
        if((i==2)||((i%2!=0)&&(i%3!=0)&&(i%5!=0)&&(i%7!=0)))
        {
            p=p+1      ;                              
                  printf("%i ",i);
                  }
                  }
                  printf(")");
                  printf("\nle nombre des entiers premier compris entre 0 et 100 est : %i",p);
        getch();
        return 0;
        }         
      

Répondre à Amine

22

KX, le 12 mai 2009 à 19:57:29

Désolé d'avoir à te le dire Amine, mais ton programme est pas terrible !
En effet le résultat que tu obtiens n'est pas correct (il manque le 3, le 5 et le 7)
De plus un bon algorithme doit pouvoir être utilisé aussi largement que possible (c'est à dire qu'il doit resté vrai si on considère un intervalle plus grand) or ici à peine arrivé à 121 (multiple de 11) on se retrouve avec des nombres premiers qui n'en sont en fait pas ! La confiance n'exclut pas le contrôle 

Répondre à KX

23

cristiano1707, le 16 mai 2009 à 13:49:20

Tu me donner le programme en caml light svp j'ai besoin la solution
merci

Répondre à cristiano1707

25

KX, le 16 mai 2009 à 14:37:16

let EstPremier n =
    let b=ref true in
    for i=2 to n-1 do
        b := !b && (n mod i>0)
    done;
    n>1 && !b;;
La confiance n'exclut pas le contrôle 

Répondre à KX

24

the F, le 16 mai 2009 à 14:09:01

JE vais parler de la part du théorie : le 1 N'EST PAS UN NOMBRE PREMIER
LE 2 EST PREMIER
Mettez ca en tete .

Répondre à the F

26

blux, le 16 mai 2009 à 18:25:23

Et alors, c'est une raison pour être aussi agressif ?

A+ Blux           

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

27

the F, le 16 mai 2009 à 20:21:03

Non pas ca mais j'ai constaté cette grave erreure qui ne doit pas psser inapercue

Répondre à the F

28

KX, le 16 mai 2009 à 20:25:35

Mais cette erreur avait déjà été corrigée à plusieurs reprises...
Inutile de retourner indéfiniment le couteau dans la plaie (surtout sur un vieux post) La confiance n'exclut pas le contrôle 

Répondre à KX

29

the F, le 16 mai 2009 à 20:29:17

Ok Ok

Répondre à the F

30

 nounou, le 6 jun 2009 à 21:02:46

Salut le modulos c le rest de la division d'un nombre sure un autre nombre
et pour les chiffres premiers il faux que le modulos du chiffre=0 avec deux nombres seulement donc il est divisable sur lui meme et sur 1 et voici le code en c qui définis les nombrs premiers qui sont inférieur du nombres saisis
*******************************
#include<stdio.h>
void main ()
{
int nbr;
int m=0;
printf("Veuillez entrer un nombre entier:");
scanf("%i",&nbr);
printf("Les nombres premiers sont:\n");
while(nbr>=2){
for(int i=1;i<=nbr;i++){
if(nbr%i==0){m++;}
}
if(m==2){
printf("%i\n",nbr,"Ce nombre est premier.");
}
m=0;
nbr--;
}
}
*****************************
si tu trouve le programme de simplexe stp tu me l'nvois sur mon e-mail j'en ai vraiment besoin
merci nounou-03@live.com

Répondre à nounou