Лучший способ вычисления простых чисел Мерсенна использует тест Лукаса-Лемера:
def primes(n): # sieve of eratosthenes
i, p, ps, m = 0, 3, [2], n // 2
sieve = [True] * m
while p <= n:
if sieve[i]:
ps.append(p)
for j in range((p*p-3)/2, m, p):
sieve[j] = False
i, p = i+1, p+2
return ps
def lucas_lehmer(p):
if p == 2: return True
m, i, s = pow(2,p) - 1, 3, 4
while i <= p:
i, s = i+1, (pow(s,2) - 2) % m
return s == 0
print [p for p in primes(256) if lucas_lehmer(p)]
, который печатает [2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107 , 127], которые являются индексами простых чисел Мерсенна менее 2 ** 256.