(М. Ишимов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
Например, маске \(123{*}4{?}5\) соответствуют числа \(123405\) и \(12300405.\)
Среди натуральных чисел, превышающих \(10^9,\) найдите \(5\) наименьших чисел, соответствующие маске \(1{*}2{*}7{*}04\) и имеющих ровно \(45\) делителей. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им максимальные делители, не считая самого числа.
Решение:
Так как \(45 = 5 \cdot 3 \cdot 3,\) то число, имеющее ровно \(45\) делителе по ОТА должно иметь вид $$p_1^4 \cdot p_2^2 \cdot p_3^2,$$ где \(p_1,\) \(p_2\) и \(p_3\) — различные простые числа. Из вида маски заключаем, что все искомые числа должны быть чётными, а из требования, что они минимальные и превышающие \(10^9\) получаем, что \(2\) входит в разложение числа и она стоит там в \(4\) степени.
Python
from math import isqrt
def factor(n):
res = []
for d in range(2, isqrt(n) + 1):
while n % d == 0:
res.append(d)
n //= d
if n > 1:
res.append(n)
return res
q = 0
for n in range(10**3 + 1, 10**100, 2):
divs = factor(n)
if len(divs) == len(set(divs)) == 2:
cand = 16 * divs[0]**2 * divs[1]**2
ns = str(cand)
a = ns.find('2', 1)
b = ns.find('7', a)
if cand > 10**9 and ns[0] == '1' and ns[-2:] == '04' \
and a > 0 and b > 0:
print(cand, cand // 2)
q += 1
if q == 5:
break
Ответ:
\(1027330704 \,\, 513665352\)
\(1132457104 \,\, 566228552\)
\(1242703504 \,\, 621351752\)
\(1271065104 \,\, 635532552\)
\(1328748304 \,\, 664374152\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене