№25
Примеры решений прототипа №1
Маски и делители
ПРИМЕРЫ РЕШЕНИЙ
№ 22 Демоверсия 2021 (Уровень: Базовый)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных
натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в таблицу на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке таблицы также должны следовать в порядке возрастания.
def divs(n):
r = set()
for d in range(2, int(n ** 0.5) + 1):
if n % d == 0:
r.add(d)
r.add(n // d)
return sorted(r)
for n in range(174_457, 174505 + 1):
ds = divs(n)
if len(ds) == 2: print(*ds)
№ 2590 (Уровень: Базовый)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [6080068; 6080176], простые числа. Выведите все найденные простые числа в порядке возрастания.
def is_prime(num):
for d in range(2, int(num ** 0.5) + 1):
if num % d == 0:
return False
return True
for n in range(6080068, 6080176 + 1):
if is_prime(n): print(n)
Рекурсивная функция разложения на простые множители
def fact(n, p=2):
for i in range(p, int(n**0.5) + 1):
if n % i == 0:
return [i] + fact(n // i, i)
return [n]
№ 23425
Напишите программу, которая перебирает целые числа, большие 15 381 264, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно трёх простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру 1.
В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующий им наибольший из найденных множителей.
Количество строк в таблице для ответа избыточно.
def divs(num, p=2):
for d in range(p, int(num ** .5) + 1):
if num % d == 0:
return [d] + divs(num // d, d)
return [num]
for n in range(15_381_265, 15_384_000):
prime_ds = divs(n)
if len(prime_ds) == 3 and all(str(x).count('1') == 1 for x in prime_ds):
print(n, max(prime_ds))