Wilson's Theorem, and introducing another standard term: the Wilson quotient, w[p] 

 

 

 

Wilson's (the discoverer, not the prover) theorem (around 1770). Every prime p satisfies factorial(`+`(p, `-`(1))) = -1 (mod p). 

 

 

Remark. It was something of a surprise for me to hear you had not encountered this in your second year NT course. 

 

 

> L := []: for p from 2 to 50 do if isprime(p) then

            R||p := PRFAC(1, p-1, p, 1):

          
### COMPUTES THE RESIDUE OF THE FACTORIAL

                L := [op(L), p]: fi od:

print(``); print(array([

['p', ``, ``, '(p-1)!', ``, ``, 'residue'],

seq([p, ``, ``, (p-1)!, ``, ``,R||p],

p = L)])): print(``);

lprint(`The final column show the LEAST ABSOLUTE residue of (p-1)! mod p.`);
 

 

 

 

array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
array( 1 .. 16, 1 .. 7, [( 3, 7 ) = (-1), ( 14, 2 ) = (``), ( 16, 1 ) = (47), ( 4, 6 ) = (``), ( 16, 7 ) = (-1), ( 2, 2 ) = (``), ( 14, 3 ) = (``), ( 3, 1 ) = (3), ( 7, 3 ) = (``), ( 1, 4 ) = (factori...
`The final column show the LEAST ABSOLUTE residue of (p-1)! mod p.`
 

>
 

 

 

A standard term. Following from the above, simply translating congruence into its equation equivalent, we have: 

 

factorial(`+`(p, `-`(1))) = `+`(`*`(M, `*`(p)), `-`(1)) 

 

for some integer M, giving: 

 

M = `/`(`*`(`+`(factorial(`+`(p, `-`(1))), 1)), `*`(p)) 

 

That integer M, is known as the Wilson quotient  w[p]: 

 

 

> L := []: for p from 2 to 50 do if isprime(p) then

            w||p := ((p - 1)! + 1)/p:

                L := [op(L), p]: fi od:

     print(``); print(array([['p', ``, ``, 'w[p]'],

          seq([p, ``, ``, w||p], p = L)])): print(``);
 

 

 

array( 1 .. 16, 1 .. 4, [( 14, 2 ) = (``), ( 12, 3 ) = (``), ( 11, 1 ) = (29), ( 5, 1 ) = (7), ( 6, 3 ) = (``), ( 5, 2 ) = (``), ( 13, 3 ) = (``), ( 8, 4 ) = (1230752346353), ( 11, 2 ) = (``), ( 4, 1 ...
(5.3.1)
 

>