More
    AlgorithmsWilson's Theorem | Mathematics

    Wilson’s Theorem | Mathematics

    Wilson’s theorem states that a natural number p > 1, is a prime number, if and only if,

    (p - 1) ! is congruent to (-1)      mod p

    That is,

    (p - 1) ! ≡ -1      mod p

    Or,

    (p - 1) ! ≡ (p -1)      mod p

    Examples:

    Example 1:
    Let p = 11
    (p - 1) ! ≡ (p -1)      mod p
    (11-1) ! = 10 ! = 3628800
    3628800 % 11 = 10
    (-1) % 11 = 10
    Hence, LHS and RHS are congruent, as p = 11 is a prime number.
    
    Example 2:
    Let p = 7
    (p - 1) ! ≡ (p -1)      mod p
    (7-1) ! = 6 ! = 720
    720 % 7 = 6
    (-1) % 7 = 6
    Hence, LHS and RHS are congruent, as p = 7 is a prime number.
    
    Example 3:
    Let p = 4
    (p - 1) ! ≡ (p -1)      mod p
    (4-1) ! = 3 ! = 6
    6 % 4 = 2
    (-1) % 4 = 3
    Hence, LHS and RHS are not congruent, as p = 4 is not a prime number.
    

    How can it be used practically in solving competitive programming or algorithmic questions?

    Consider the problem of computing factorial under modulo of a prime number which is close to input number, i.e., we want to find value of “n! % p” such that n < p, p is a prime and n is close to p. For example (67! % 71). From Wilson’s theorem, we know that 70! is -1. So we basically need to find [ (-1) * inverse(70, 71) * inverse(69, 71) * inverse(68, 71) ] % 71. The inverse function inverse(x, p) returns inverse of x under modulo p.

    You can compute the Multiplicative Modulo Inverse using the Extended Euclidean Algorithm. Read more applications of the Extended Euclidean Algorithm.

    Sponsored

    LEAVE A REPLY

    Please enter your comment!
    Please enter your name here

    Subscribe Today

    GET EXCLUSIVE FULL ACCESS TO PREMIUM CONTENT

    Get unlimited access to our EXCLUSIVE Content and our archive of subscriber stories.

    Exclusive content

    Latest article

    More article