While browsing the Project Euler problems, I found problem 97, which is an incredibly straightforward problem that is buried within a sea of much more challenging problems. It’s called “Large non-Mersenne Prime” and it states the following.

The first known prime found to exceed one million digits was discovered in 1999, and is a Mersenne prime of the form $2^{6972593}−1$; it contains exactly 2,098,960 digits. Subsequently other Mersenne primes, of the form $2^p−1$, have been found which contain more digits.

However, in 2004 there was found a massive non-Mersenne prime which contains 2,357,207 digits: $28433\times 2^{7830457}+1$.

Find the last ten digits of this prime number.

## Solution in Python

Since we’re only looking for the final ten digits of the number, we can form a solution modulo a sufficiently large number, effectively forgetting about any larger power digits. We’ll do all of the powers of two first, then multiply by the constant, then add one. We’ll take the first ten digits of the result and that should be the answer we’re looking for. I’d say that this one is pretty quick and painless.

#!/usr/bin/env python   import time   start = time.time()   n = 2 for i in range(7830456): n = (2 * n) % 10000000000   n *= 28433 n += 1   n = n % 10000000000   elapsed = time.time() - start   print "Result %s found in %s seconds" % (n, elapsed)

Then, executing, we have: