|
|
|
|
Plusieurs algorithmes sont possibles :
|
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.
|
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.
|
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.
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.
La confiance n'exclut pas le contrôle |