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
| PROGRAM N_Parfait; // 6 28 496 8128 33550336 8589869056
USES Crt, E_Texte;
PROCEDURE Aff_NP(k: Word; Np: LongInt);
VAR y: Byte;
BEGIN
y:= 2; Inc(y, k);
E(0015); Wt(5, y, 'Rang: k = '); // Affichage d'un texte Wt(x, y, '******')
E(0009); Write(k:5);
E(0015); Write(' Nombre parfait: Np = ');
E(0010); Write(Np:+10); E(0012)
END;
PROCEDURE Calc_Sdiv(VAR k_: Word; N_: Z_32);
VAR K1: Word; d, q, r, s: LongInt;
BEGIN
d:= 1; s:= 1; K1:= k_;
REPEAT
Inc(d); q:= N_ DIV d; r:= N_ MOD d;
IF (r=0) THEN
IF (d<q) THEN Inc(s, d + q)
ELSE IF (d=q) THEN Inc(s, d)
UNTIL (d>q);
IF (s=N_) THEN BEGIN
k_:= K1 + 1; Aff_NP(k_, N_)
END
END;
PROCEDURE Enumeration;
CONST N1 = 2; N2 = 40000000;
VAR k: Word; Nombre: LongInt;
BEGIN
E(1012); // Couleurs du texte, du fond / effacement de l'écran
FOR Nombre:= N1 TO N2 DO BEGIN
IF ((Nombre MOD 1000)=0) THEN
We(60, 3, Nombre, 10); // Affichage d'un entier We(x, y, N, format)
Calc_Sdiv(k, Nombre)
END;
We(60, 3, Nombre, 10); A_
END;
BEGIN
Enumeration
END. |
Partager