Cita:
Empezado por Robert01
Me gustaría probar que pasa compilandolo con Freepascal bajo linux pero hay partes del código que no se como modificar para que compile sin errores
|
Pues para linux solo hay que quitar la función GetTickCount que es propia de Windows.
(primos.pas)
Código Delphi
[-]
program Primos;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Limit = 15000000;
procedure WriteTable(T: PInteger);
begin
Writeln(1);
while T^<>0 do
begin
Writeln(T^);
inc(T);
end;
end;
procedure SaveTable(T: PInteger; Filename: String);
var
F: Text;
begin
AssignFile(F, Filename);
{$I-}
Rewrite(F);
{$I+}
if IOResult = 0 then
begin
Writeln(F,1);
while T^<>0 do
begin
Writeln(F,T^);
inc(T);
end;
CloseFile(F);
end;
end;
function Test(N: Integer; T: PInteger): Boolean;
var
i: Integer;
begin
Result:= TRUE;
i:= Trunc(Sqrt(N));
while (T^<>0) and (T^<=i) do
if N mod T^ = 0 then
begin
Result:= FALSE;
break;
end else
inc(T);
end;
procedure Generate(T: PInteger);
var
i,j: Integer;
P: PInteger;
begin
P:= T;
P^:= 2;
inc(P);
j:= 3;
i:= 2;
while i <= Limit do
begin
if Test(j,T) then
begin
Write(Format('Generados: %d Ultimo: %d %s',[i,j,#13]));
P^:= j;
inc(P);
inc(i);
end;
inc(j,2);
end;
end;
var
Table: PInteger;
Marca: TDateTime;
begin
GetMem(Table,(Limit + 1) * Sizeof(Integer));
try
FillChar(Table^,(Limit + 1) * Sizeof(Integer),#0);
Writeln('Generando numeros primos ...');
Marca:= Now;
Generate(Table);
Writeln;
Writeln;
Writeln('Se han empleado un tiempo de: ' + FormatDateTime('hh:nn:ss',Now-Marca));
SaveTable(Table,ChangeFileExt(ParamStr(0),'.txt'));
finally
FreeMem(Table);
end;
end.