(И. Женецкий) Назовём J-простым число, которое отличается не более, чем на \(5,\) от числа, являющегося степенью двойки. Например, \(11\) является J-простым числом, т.к. оно простое и от отличается на \(3\) от числа \(8 = 2^3\) (и на \(5\) от числа \(16 = 2^4 ).\) Найдите все J-простые числа в диапазоне \([99999;~1048571]\) и выведите их в порядке возрастания. Справа от каждого числа выведите ближайшее число, которое является степенью двойки.
Решение:
Python
from math import isqrt
def is_prime(n: int) -> bool:
if n == 2:
return True
if n & 1 == 0:
return False
for x in range(3, isqrt(n) + 1):
if n % x == 0:
return False
return True
p2 = [2**i for i in range(17, 21)] # 2^17 = 131 072 2^20 = 1 048 576
for p in p2:
for n in range(p - 5, p+6, 2):
if 99_999 <= n <= 1_048_571 and is_prime(n):
print(n, p)
Ответ:
\(131071 \,\, 131072\)
\(262139 \,\, 262144\)
\(262147 \,\, 262144\)
\(524287 \,\, 524288\)
\(1048571 \,\, 1048576\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене