Pollard’s P-1 Factorization Algorithm
July 21, 2009
Fermat’s little theorem states that for any prime number , and any other number
,
. Rearranging terms, we have
, which means that
divides the left-hand side of the equation, thus
is a factor of the left-hand side.
John Pollard used this idea to develop a factoring method in 1974. His idea is to choose a very large number and see if it has any factors in common with , thus giving a factor of
. A systematic way to test many very large numbers is by taking large factorials, which have many small factors within them. Thus, Pollard’s
factorization algorithm is this:
1) Choose , which is known as the smoothness bound, and calculate the product of the primes to
by
.
2) Choose a random integer such that
.
3) Calculate . If
is strictly greater than 1, then it is a non-trivial factor of
. Otherwise, continue to the next step.
4) Calculate . If
, then
is a non-trivial factor of
. If
, go to Step 1 and choose a larger
. If
, go back to Step 2 and choose another
.
In Step 4, you can quit with failure instead of returning to Step 1 if becomes too large, where “too large” is probably somewhere around
; in that case, you will need to continue with some other factoring algorithm.
Your task is to write a function that factors integers by Pollard’s method. What are the factors of
? When you are finished, you are welcome to read or run a suggested solution, or to post your solution or discuss the exercise in the comments below.