Mersenne Primes using Lucas Lehmer Primality Test in Python

Himanshu Sharma
2 min readApr 18, 2019

--

“Some numbers, even large ones, have no factors — except themselves, of course, and 1. These are called prime numbers because everything they are starts with themselves. They are original, gnarled, unpredictable, the freaks of the number world.”

A Mersenne number is a number which one less than some power of 2 or in simple words of the form (2^n)-1. Also, there is no constraint on ‘n’.

Mersenne Prime is a prime number of the same format that is (2^n)-1 for some integer n (not all). Mersenne primes help in generating large prime numbers which are very helpful while encryption. The largest known prime number 2⁸²⁵⁸⁹⁹³³−1 is a Mersenne prime. So to test the primality of a number, checking each and every possible factor is too old fashioned and time-consuming process, so we will take a different approach.

# function to return a mersenne number
def mersenne_number(p):
return (2**p) - 1

Here comes the Lucas Lehmer Test(LLT) in the picture, to test the primality of a Mersenne number. Suppose we have to test the primality of Mp where p is a prime number. It is easy to test the primality of ‘p’ using our usual methods as ‘p’ is exponentially smaller than Mp. Then we have to generate a sequence used in the test which is as follows:

Sequence is up to i = (p-2) inclusive
import math# function to generate lucas lehmer series
def lucas_lehmer_series(p):
ll_seq = [4]
if p>2:
for i in range(1, (p-2)+1):
n_i = ((ll_seq[i-1]) ** 2 - 2) % ((2 ** p) - 1)
ll_seq.append(n_i)
return ll_seq
# function to find whether number 'p' is prime or not
def is_prime(number):
if number <= 1 or (number > 2 and number % 2 == 0):
return False

for factor in range(2, int(math.sqrt(number))+1):
if number%factor == 0:
return False
return True
# primality test of mersenne number using above generated series
def ll_prime(p):
if lucas_lehmer_series(p)[-1] == 0:
return True
return False

Mersenne prime will be a prime number only if the last element of the sequence generated is 0 otherwise it is only a Mersenne number.

Please let me know in case I have missed something or there is some error.

--

--