25 lines
589 B
Text
25 lines
589 B
Text
;;; returns TRUE(1) if p is prime by Wilson's theorem, FALSE(0) otherwise
|
|
;;; computes the factorial mod p at each stage, so as to allow
|
|
;;; for numbers whose factorial won't fit in 16 bits
|
|
BYTE FUNC isWilsonPrime( CARD p )
|
|
CARD i, factorial_mod_p
|
|
BYTE result
|
|
|
|
factorial_mod_p = 1
|
|
FOR i = 2 TO p - 1 DO
|
|
factorial_mod_p = ( factorial_mod_p * i ) MOD p
|
|
OD
|
|
|
|
IF factorial_mod_p = p - 1 THEN result = 1 ELSE result = 0 FI
|
|
|
|
RETURN( result )
|
|
|
|
PROC Main()
|
|
CARD i
|
|
|
|
FOR i = 1 TO 100 DO
|
|
IF isWilsonPrime( i ) THEN
|
|
Put(' ) PrintC( i )
|
|
FI
|
|
OD
|
|
RETURN
|