[Back to MATH SWAG index] [Back to Main SWAG index] [Original]

    {           Prime v1.1 (C) 1997 Allen Cheng. All Rights Reserved.

       Please feel free to use this unit on your program,
       give me Credit if you like.... Enjoy!

     This is quite fast, and is about 50-80% faster than the fastest one in SWAG.
     As this Function is optimized for large numbers, you may not see any
     differents is small numbers, but it only takes about 6 seconds to find all
     the primes from 1000000 to 1020000. A newer version will be out soon
     which should be about 10-20% faster.

    Homepage:  http://www.geocities.com/SiliconValley/Park/8979/
    Email:     ac@4u.net

    You can always download the newest version from my Homepage.

    P.S. If you've found some ways to optimized this unit, please feel free to
    change anything, it's nice if you can send me a copy.
    }
    Unit Prime;

    Interface
    Function PrimeChk(Num: LongInt): Boolean;

    Implementation

    Function PrimeChk(Num: LongInt): Boolean;
    Var x : Longint;
        y : Integer;
    Begin
     x := -1; y := 0;
     Case Num Of
      2,3 : Begin PrimeChk := True; Exit; End;
      1 : Begin PrimeChk := False; Exit; End;
     End;
    If (Num mod 2)=0 Then Begin PrimeChk := False; Exit; End; {Check if Even #}

    While (Sqr(x) < Num) And (y < 2) Do
    Begin
       x := x + 2; { Only check with Odd numbers }
       If (Num mod x)=0 Then y:=y+1;
    End;
     If y <> 1 Then PrimeChk := False Else PrimeChk := True;
    End;

    End.

    { ------------ DEMO --------------- }

    Program Example;
    Uses Prime;
    Var Number : LongInt;
    Begin
    {List all Primes from 1000000 to 1020000}
    For Number := 1000000 to 1020000 Do
    If PrimeChk(Number) = True Then Write(Number,' ');
    End.

[Back to MATH SWAG index] [Back to Main SWAG index] [Original]