Python/project_euler/problem_097/sol1.py
Dhruv 44254cf112
Rename Project Euler directories and other dependent changes (#3300)
* Rename all Project Euler directories:

Reason:
The change was done to maintain consistency throughout the directory
and to keep all directories in sorted order.

Due to the above change, some config files had to be modified:
'problem_22` -> `problem_022`

* Update scripts to pad zeroes in PE directories
2020-10-15 12:43:28 +05:30

47 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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 * (2 ** 7830457 + 1)).
Find the last ten digits of this prime number.
"""
def solution(n: int = 10) -> str:
"""
Returns the last n digits of NUMBER.
>>> solution()
'8739992577'
>>> solution(8)
'39992577'
>>> solution(1)
'7'
>>> solution(-1)
Traceback (most recent call last):
...
ValueError: Invalid input
>>> solution(8.3)
Traceback (most recent call last):
...
ValueError: Invalid input
>>> solution("a")
Traceback (most recent call last):
...
ValueError: Invalid input
"""
if not isinstance(n, int) or n < 0:
raise ValueError("Invalid input")
MODULUS = 10 ** n
NUMBER = 28433 * (pow(2, 7830457, MODULUS)) + 1
return str(NUMBER % MODULUS)
if __name__ == "__main__":
from doctest import testmod
testmod()
print(f"{solution(10) = }")