Algorithme de Fermat.
fonction Premier(N) paramètre N: entier à valeur: booléen entier x, y, r booléen OK si N mod 2=0 alors OK ß FALSE sinon x ß 1+2*[ÖN] y ß1 rß[ÖN]²-N tant que NOT (r=0) faire si r>0 alors rßr-y yßy+2 sinon rßr+x xßx+2 fsi ftant OK ß x-y=2 fsi résultat((N=2) ou OK) tableau Tabi i=1,..,1000 de entier entier i, j, NMAx Nmax ß 1000 j ß 1 Tab1 ß 2 i ß 1 tant que NOT (j=NMax) faire i ß i+2 si Premier(i) alors j ß j+1 Tabj ß i fsi ftant pour i de 1 à NMax faire écrire Tabi fpour
Voici la traduction en Pascal de la fonction décrite ci-dessus:
FUNCTION Premier(N:WORD):BOOLEAN;
VAR x,y,r,N2: WORD;
OK:BOOLEAN;
BEGIN
IF N mod 2=0 THEN OK <-- FALSE
ELSE BEGIN
N2:=N;
N2:=SQRT(N2);
x:=1+2*TRUNC(N2);
y:=1;
r:=TRUNC(N2)*TRUNC(N2)-N;
WHILE NOT (r=0) DO
IF r<0 THEN BEGIN
r:=r+x;
x:=x+2
END
ELSE BEGIN
r:=r-y;
y:=y+2
END
OK <-- x-y=2
END;
Premier:= (N=2) ou OK
END;
Cliquez ici pour récupérer une archive contenant une implémentation en Delphi
de la décomposition d'un nombre entier par l'amgorithme de Fermat.