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

Signaler
Messages postés
13
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
21 juillet 2010
-
 Raja -
Bonjour,

comment Vérifier si un nombre entier est un nombre premier, en pascal.

un programme s.v.p.

merci bcp d'avance.

10 réponses

Messages postés
113
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
19 décembre 2011
8
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
25
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57086 internautes nous ont dit merci ce mois-ci

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
Messages postés
15974
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 août 2020
2 648
@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.
merci beaucoup
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.
Messages postés
270
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
3 mai 2011
38
a oui tu peux aller plus vite encore si tu parts de la racine du nombre que tu test
Messages postés
270
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
3 mai 2011
38
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.
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.
Messages postés
270
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
3 mai 2011
38
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.
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
Messages postés
5
Date d'inscription
dimanche 25 mars 2012
Statut
Membre
Dernière intervention
3 novembre 2013

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.
Messages postés
15974
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 août 2020
2 648
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.
Messages postés
3
Date d'inscription
mardi 30 août 2011
Statut
Membre
Dernière intervention
8 septembre 2011

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
Messages postés
15974
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 août 2020
2 648
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 !
Messages postés
113
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
19 décembre 2011
8
salut, cliquez sur problème résoulu svp.