{ Although a very trivial program : still copyrighted ;-) } { Copyright 1999, Henk Postma } PROGRAM Prime; TYPE Primenumber = ^PrimeRec; PrimeRec = RECORD Number : Longint; Next : Primenumber; END; VAR Einde, Flag : Boolean; Last, First, Index : Primenumber; Noofprimes, Cutoff, Count : Longint; F2, F : Text; BEGIN Write ('Do you have any idea how far you would like to go ? [Y/N] '); IF upcase (readkey) = 'Y' THEN BEGIN Writeln; Write (' Until which number ? '); Readln (cutoff); IF CutOff < 0 THEN cutoff := 2147483640; END ELSE Cutoff := 0; Writeln; Assign (F, 'prime.dat'); Assign (F2, 'prime2.dat'); Rewrite (F); Rewrite (F2); ClrScr; New (First); First^.Number := 2; Noofprimes := 1; First^.Next := NIL; Last := First; Count := 3; IF Cutoff <> 0 THEN CutOff := Round (1+sqrt(Cutoff)); TextColor (15); Write (2 : 10); Writeln (F, First^.Number); Writeln (F2, First^.number, #9, noofprimes); Einde := FALSE; REPEAT Index := First; Flag := FALSE; WHILE (Index <> NIL) AND (Index^.Number*Index^.Number <= Count) AND NOT Flag DO BEGIN Flag := (count MOD Index^.number = 0); Index := Index^.Next; END; IF NOT Flag THEN BEGIN TextColor (7); IF (Cutoff = 0) OR (Count <= Cutoff) THEN BEGIN New (Last^.Next); Last := Last^.Next; Last^.number := Count; Last^.Next := NIL; TextColor (15); END; Write (Count : 10); Inc (Noofprimes); Writeln (F, Count); Writeln (F2, Count, #9, Noofprimes); END; Inc (Count); IF Keypressed THEN BEGIN Writeln; WHILE Keypressed DO Readkey; Write (' Are you sure you want to terminate this calculation ? [Y/N] '); Einde := (UpCase (Readkey) = 'Y'); Writeln; END; UNTIL Einde OR ((Count >= Cutoff*Cutoff) AND (Cutoff <> 0)); WHILE First <> NIL DO BEGIN Index := First; First := First^.Next; Dispose (Index); END; Close (F); Close (F2); END.