Task

Write a boolean function that tells whether a given integer is prime using Wilson's theorem.

By Wilson's theorem, a number p is prime if and only if p divides (p - 1)! + 1.

Remember that 1 and all non-positive integers are not prime.



See also

 Cut-the-knot: Wilson's theorem.
 Wikipedia: Wilson's theorem


function wilson_prime( n as uinteger ) as boolean
    dim as uinteger fct=1, i
    for i = 2 to n-1
        'because   (a mod n)*b = (ab mod n)
        'it is not necessary to calculate the entire factorial
        fct = (fct * i) mod n
    next i
    if fct = n-1 then return true else return false
end function
 
for i as uinteger = 2 to 100
    if wilson_prime(i) then print i,
next i