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


def w_prime?(i)
  return false if i < 2
  ((1..i-1).inject(&:*) + 1) % i == 0
end
 
p (1..100).select{|n| w_prime?(n) }
 