RosettaCodeData/Task/Primality-by-Wilsons-theorem/Action-/primality-by-wilsons-theorem.action
2023-07-01 13:44:08 -04:00

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