Template:Prelude/is prime.a68

From Rosetta Code
Revision as of 16:57, 2 May 2009 by rosettacode>NevilleDNZ (Template:prelude/is_prime.a68 - used in more then one place.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
COMMENT
  This routine is used in more than one place, and is essentially a
  template that can by used for many different types, eg INT, LONG INT...
USAGE
  MODE ISPRIMEINT = INT, LONG INT, etc
  PR READ "prelude/is_prime.a68" PR
END COMMENT
PROC is prime = ( ISPRIMEINT p )BOOL:
  IF p <= 1 OR ( NOT ODD p AND p/= 2) THEN
    FALSE
  ELSE
    BOOL prime := TRUE;
    FOR i FROM 3 BY 2 TO ENTIER sqrt(p)
      WHILE prime := p MOD i /= 0 DO SKIP OD;
    prime
  FI