TheAlgorithms-Python
46 строк · 1.3 Кб
1"""
2The first known prime found to exceed one million digits was discovered in 1999,
3and is a Mersenne prime of the form 2**6972593 − 1; it contains exactly 2,098,960
4digits. Subsequently other Mersenne primes, of the form 2**p − 1, have been found
5which contain more digits.
6However, in 2004 there was found a massive non-Mersenne prime which contains
72,357,207 digits: (28433 * (2 ** 7830457 + 1)).
8
9Find the last ten digits of this prime number.
10"""
11
12
13def solution(n: int = 10) -> str:14"""15Returns the last n digits of NUMBER.
16>>> solution()
17'8739992577'
18>>> solution(8)
19'39992577'
20>>> solution(1)
21'7'
22>>> solution(-1)
23Traceback (most recent call last):
24...
25ValueError: Invalid input
26>>> solution(8.3)
27Traceback (most recent call last):
28...
29ValueError: Invalid input
30>>> solution("a")
31Traceback (most recent call last):
32...
33ValueError: Invalid input
34"""
35if not isinstance(n, int) or n < 0:36raise ValueError("Invalid input")37modulus = 10**n38number = 28433 * (pow(2, 7830457, modulus)) + 139return str(number % modulus)40
41
42if __name__ == "__main__":43from doctest import testmod44
45testmod()46print(f"{solution(10) = }")47