Contributor: MATTIAS AXNER

{
I have made a program that calculates Primes, I think it is quite
fast and would like to have it included in SWAG.
On a P120 it calculates all primes up to 1.000.000 in 10.3 s.

And if somebody knows how to optimize it please tell me. }

program prime;

uses dos,crt;

var      prmtal         : array[1..16142] of longint;
         a              : longint;
         sq,qq,x,tst    : longint;
         h,m,s,hu       : word;    {time}
         xx             : longint;
         b              : word;
         till           : longint;  {check primes up to..}
         g              : string[10];


procedure Putstr(s:string);assembler;   {This routine was made by}
asm                                     {     JAMIE MORTIMER     }
  push ds

  mov ax,$b800
  mov es,ax
  xor di,di

  lds si,s
  mov cl,byte ptr [si]
  inc si
  mov ah,7
@1:
  mov al,byte ptr [si]
  mov word ptr es:[di],ax

  inc si
  add di,2
  dec cl
  jnz @1

  pop ds
end;


procedure prm1;
begin
  tst:=121;
  repeat
    repeat
      inc(a,4);
      if tst16100;

  repeat
    repeat
      inc(a,4);
      if tsttill;
end;

begin
  prmtal[16142]:=3;
  xx:=0;
  a:=25;
  qq:=5;

  gettime(h,m,s,hu);
  sq:=hu+100*s+6000*m+360000*h;
  prmtal[1]:=5;    {2 and 3 is not included..}
  prmtal[2]:=7;
  prmtal[3]:=11;
  prmtal[4]:=13;
  prmtal[5]:=17;
  prmtal[6]:=19;
  prmtal[7]:=23;
  till:=1000000;
  x:=7;
  clrscr;

  prm1;     {begin testing}

  writeln;
  Writeln('Primes found:',x,'   ');
  Gettime(h,m,s,hu);
  sq:=(hu+100*s+m*6000+h*360000)-sq;
  writeln('Time ',round(int(sq/100)),'.',round(100*frac(sq/100)),'s');
  writeln;
  writeln(' Dx/33  = 53.34s');
  writeln(' Dx/40  = 43.61s');
  writeln('Dx4/75  = 23.53s');
  writeln('Dx4/100 = 17.67s');
  writeln('Dx4/120 = 14.71s');
  writeln(' P120   = 10.32s');
end.