//Autor: Artur Czekalski (Sator) www.epokaY.net/artur artur@epokaY.net //Generowanie liczb doskonałych program Project1; {$APPTYPE CONSOLE} uses SysUtils, windows, Math; //--------------------------------------------------------------------------- var q, nS, SumaP, Liczba :Integer; s: double; czas: Cardinal; begin writeln('Liczby doskonale:'); Liczba := 3; czas := GetTickCount; while Liczba < 500000 do begin SumaP := 1; //suma podzielników; każda liczba dzieli się przez 1 s := sqrt(Liczba); nS := Floor(s); //zapamiętuje s w int nS dla szybszego porównywania w pętli q := 2; //zaczynam dzielenie od 2 while q <= nS do begin if Liczba mod q = 0 Then Inc(SumaP, q + Liczba div q); Inc(q); end; if q = s Then Inc(SumaP, q); if SumaP = Liczba Then writeln(Liczba); //suma podzielników Liczby = Liczba Inc(Liczba); end; czas := GetTickCount - czas; writeln; writeln('Delphi 7: Czas=', czas); readln; end.