Création
d'entreprise
Posez votre question Signaler

Nombre premier en pascal [Résolu/Fermé]

max123456 12Messages postés 8 mars 2008Date d'inscription 21 juillet 2010Dernière intervention - Dernière réponse le 20 avril 2012 à 12:30
Bonjour,
comment Vérifier si un nombre entier est un nombre premier, en pascal.
un programme s.v.p.
merci bcp d'avance.
Lire la suite 

Nombre premier en pascal »

19 réponses
Réponse
+17
moins plus
salut, pour verifier si le nombre n est premier ou pas le principe est de tester tous les nombres inferieur à n qu'on, si le reste de la division de n/i est 0 donc i est un diviseur on compte les diviseurs avec la variable r,a la fin si le programme trouve plus de 2 diviseurs cela veut dire que n admet un diviseur a part 0 et lui même =>n n'est pas premier si non le nombre est premier.

program premier;
uses wincrt;
var n,r,i:integer;
begin
write('Donnez un entier naturel : ');
read(n);
r:=0;
for i:=1 to n do
if n mod i = 0 then r:=r+1;

if r=2 then write('le nombre est premier') else
write('le nombre n'est pas premier');
end.

Rq: cette algorithme peut s'améliorer pour gagner du temps

Mhamed - 24 févr. 2011 à 18:57
fahim juste tu as une faute en affichage pour ce msg ki sera comme ça :

write('le nombre n''est pas premier');
wafia - 23 août 2011 à 15:40
désolé votre algorithme est completement faux
si (n =7) on aura mod n/i si le compteur de i est 7 alors 7/7 =1 le reste c 0 et pourton 7 est un nombre premier mais d'aprés votre algorime le résultat est contraire
KX- 23 août 2011 à 18:04
@wafia : bien que ce ne soit pas la meilleure méthode, l'algorithme est correct !
Si n=7, on aura 7 mod 1=0 et 7 mod 7=0 (et 7 mod i > 0 pour les autres) d'où r=2 donc 7 est premier.
Réponse
+4
moins plus
a oui tu peux aller plus vite encore si tu parts de la racine du nombre que tu test

Réponse
+3
moins plus
ben tu le divise par tous les entiers inférieurs à lui-même, si t'en as un qui donne un résultat entier différent de 1, il est pas premier.

Réponse
+3
moins plus
J'essaie de proposer mieux mais je connais pas bien la syntaxe en Pascal alors j'm'inspire de ce que Fahim a écrit:
program premier;
uses wincrt;
var n,i,r,t,c:integer;
begin
  write('Donnez un entier naturel : ');         /On pourait tester si c'est un entier 
  read(n);  i:=1;   t:=1;  r:=0;                 /J'ai ajouté t pour 'test' et c pour 'carré'
  while(t=1) do                                /Tant que t ne change pas on refait la boucle 
  { i: = i+1; c:= i*i;                  /incrémentation de i, pas besoin de tester i=1 !
    if  if (c>n) then t:=3;   /si i² dépasse n on a fini le test sans trouver de diviseur
       else(n mod i = 0) then t:=0;  /si le reste de n/i est nul on fini le test
  };                                            /fin de la boucle
  if t=3 then write('le nombre est premier') /conclusion
  else write('le nombre n'est pas premier'); 
end.

havid - 22 nov. 2009 à 18:12
voila un petite touche d'amelioration du programme
program premier;
uses wincrt;
var n,i,t,c:integer;
begin
write('Donnez un entier naturel : '); {*On pourait tester si c'est un entier *}
read(n); t:=1;
if n mod 2 =0 then t:=0;
i:=1; {*J'ai ajouté t pour 'test' et c pour 'carré'*}
while(t=1) do {*Tant que t ne change pas on refait la boucle *}
Begin
i:= i+2; c:= i*i; {*incrémentation de i, pas besoin de tester i=1 ! *}
if (c>n) then t:=3 {*si i² dépasse n on a fini le test sans trouver de diviseur*}
else if (n mod i = 0) then t:=0; {*si le reste de n/i est nul on fini le test*}
End; {*fin de la boucle*}
if t=3 then write('le nombre est premier') {*conclusion*}
else write('le nombre n''est pas premier');
end.
Réponse
+3
moins plus
progarm premier;
uses wincrt;
i,n:integer;
begin
write('n= );
ead(n);
for i:=1 to n div 2 do
begin
if (n mod i )=1 then
writeln('-les nomber est premier: ')
else
writeln('-les nomber n'est pas premier: ');
end;
end.

Réponse
+1
moins plus
Plusieurs algorithmes sont possibles :
http://fr.wikipedia.org/...
Plus qu'à choisir et à implémenter...

Réponse
+1
moins plus
svp est ce que quelqu1 peut m aider a faire un algorithme qui cherche les nombres premiers avec le type booléen c urgent merci pour vs

Réponse
+0
moins plus
On peut encore améliorer la recherche en se servant d'un crible d'Erathostène, c'est à dire un tableau, que l'on remplit de tous les multiples des nombres premiers déjà identifiés.

À noter, qu'il faut adapter const n=10000, selon les besoins de la recherche...
program TestPrimalite;

const n=10000;

type crible=array[2..n] of boolean;

procedure Initialiser(var c:crible);
var k:integer;
begin
for k:=2 to n do c[k]:=false;
end;

procedure RayerMultiples(var c:crible;p:integer);
var k:integer;
begin
k:=p+p;
while k<=n do
      begin c[k]:=true; k:=k+p end;
end;

procedure Construire(var c:crible);
var k:integer;
begin
for k:=2 to n do
    if not c[k] then RayerMultiples(c,k);
end;

var c:crible;
    i:integer;
begin
write('Construction de la table d''Erathostene entre 2 et ',n,' : ');
Initialiser(c); Construire(c); writeln('Termine');
while true do
      begin
      writeln;
      write('Entier a tester : ');
      readln(i);
      if c[i] then writeln(i,' n''est pas premier')
              else writeln(i,' est premier');
      writeln;
      end;
end.

Dl14013- 2 sept. 2011 à 21:22
avec cette algorithme on a perdu le temps pour tester si le nombre premier par exemple le Numéro 1254789421 on a tester dans 3'22" mais avec mon application je teste le Nombre dans 6" ok
merci
KX- 2 sept. 2011 à 21:30
L'avantage de la crible d'Erathostène ce n'est pas de tester la primalité d'un nombre particulier mais de pouvoir tous les répertorier.
En gros en 6" tu as testé 1 nombre premier, et en 3'22" j'en ai distingué 1,25 milliards...
Une fois cette recherche effectuée, le test de primalité est immédiat vu que le calcul est déjà fait !
Réponse
+0
moins plus
salut, cliquez sur problème résoulu svp.

Réponse
+0
moins plus
program premier;
var x,nb:integer;
begin
writeln('donner le nombre à tester: ');
read(nb);
x:=nb;
while x<= nb do
begin
x:=x-2;
end;
if x=0 then writeln('le nombre est premier');
else writeln('le nombre n"est pas premier');
end.

Ce document intitulé « nombre premier en pascal » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?