Числа-близнецы — это такие простые числа, которые отличаются друг от друга на . Найдите все пары чисел-близнецов в диапазоне [17 000 000; 23 000 000], сумма которых будет кратна
. В ответ запишите найденные пары, числа в которых записаны по возрастанию.
Неэффективное решение
def prime(x):# функция для проверки, что число - простое
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
ans = 0
flag = True
for i in range(17000000, 23000000+1):
if prime(i):
if flag:
last = i
flag = False
else:
if i - last == 2:
if (last + i) % 50000 == 0:
print(last, i)
last = i
Эффективное решение
def prime(x):# функция для проверки, что число - простое
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
# Мы знаем, что в ответе x и x + 2 — простые числа с
# суммой кратной 50000, то есть x + x + 2 = 50000t
# то есть x = 25000t - 1.
# t можно оценить как правая граница // 25000
for i in range(1, 23*10**6 // 25000):
x = 25000*i - 1
if 17*10**6 <= x <= 23*10**6 - 2:
if prime(x) and prime(x + 2):
print(x, x + 2)
Ответ: 22049999 22050001 22424999 22425001 22574999 22575001 22949999 22950001