1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| PROGRAM Liste_Nombres_Impairs_Composes;
USES Crt, E_Texte;
CONST Nmax = 50000000;
TYPE Tab_E = ARRAY[1..Nmax] OF LongInt;
VAR Nic: LongInt; Liste: Tab_E;
FUNCTION Test_Prim(n: LongInt): Bool;
VAR Lim: LongInt; Test, Test3: Bool;
Delta, q, r: LongInt;
BEGIN
Lim:= Trunc(Sqrt(n)); Test3:= ((n MOD 3)>0);
q:= 1; Delta:= 4;
REPEAT
Inc(q, Delta); Delta:= 6 - Delta; r:= n MOD q;
UNTIL ((r=0) OR (q>Lim));
IF (Test3 AND (r>0)) THEN Test:= True ELSE Test:= False;
Result:= Test
END;
PROCEDURE Enumeration(N_: LongInt; VAR L_: Tab_E);
CONST C1 = 5; L1 = 3; L2 = L1 + 2;
T = 'Rang du nombre impair compos: r = ';
VAR p, r: LongInt;
BEGIN
p:= 7; r:= 0;
IF Test_Prim(N_) THEN BEGIN
E(0010); Wt(50, L1, 'Nombre premier')
END
ELSE BEGIN
REPEAT
Inc(p, 2);
IF (NOT Test_Prim(p)) THEN BEGIN
Inc(r);
L_[r]:= p
END
UNTIL (p=N_);
E(0015); Wt(C1, L2, T);
E(0010); Write(r:9)
END;
END;
PROCEDURE Saisie(VAR N_: LongInt);
CONST C1 = 5; C2 = C1 + 35; L1 = 3;
VAR n: LongInt;
BEGIN
E(1015); Wt(C1, L1, 'Entier impair envisag: Nic = ');
REPEAT
GotoXY(C2, L1); ClrEol; Read(n)
UNTIL (Odd(n) AND (n>7));
N_:= n; E(0012); We(C2, L1, Nic, 9)
END;
PROCEDURE Init_L(VAR L_: Tab_E);
VAR j: LongInt;
BEGIN
FOR j:= 1 TO Nmax DO L_[j]:= 0
END;
BEGIN
REPEAT
Init_L(Liste); // Mise
zro de tous les termes de la liste
Saisie(Nic); // Saisie de l'entier impair
Enumeration(Nic, Liste); // Affichage du rsultat
A_
UNTIL (Nic<10);
A_
END. |
Partager