(А. Кабанов) Обозначим через \(M(N)\) сумму максимального и минимального числа среди простых делителей целого числа \(N,\) не считая самого числа. Если таких делителей у числа нет, то считаем значение \(M(N)\) равным нулю. Найдите первые \(6\) чисел, больших \(23~600~000,\) для которых значение \(M(N)\) при делении на \(213\) даёт в остатке \(171.\) В ответе запишите найденные числа в порядке возрастания, справа от каждого запишите соответствующее значение \(M(N).\)
Решение:
Python
def is_prime(n):
if n < 2:
return False
if n == 2:
return True
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def M(N):
div_prime = set()
for i in range(2, int(N ** 0.5) + 1):
if N % i == 0:
d = N // i
if is_prime(d):
div_prime.add(d)
if is_prime(i):
div_prime.add(i)
return max(div_prime) + min(div_prime) if div_prime else 0
i = 0
n = 23_600_000
while i < 6:
n += 1
t = M(n)
if t and t % 213 == 171:
print(n, t)
i += 1
Ответ:
\(23600182 \,\, 694125\)
\(23600442 \,\, 28713\)
\(23600478 \,\, 357585\)
\(23600570 \,\, 1449\)
\(23600838 \,\, 135639\)
\(23600970 \,\, 29139\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене