Задача (№ 25, ЕГЭ по информатике)
Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, которые являются степенью простого числа с натуральным показателем степени, большим 1.
В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующие им простое число.
Например, число 27 = 33
Количество строк в таблице для ответа избыточно.
Алгоритм решения
Перебираем числа, начиная с 700 001.
Для каждого числа находим его разложение на простые множители с учётом кратности (функция
f(n)).Проверяем два условия:
Количество множителей в разложении больше 1 (показатель степени > 1).
Все множители одинаковые (число является степенью одного простого числа).
Как только находим 5 таких чисел, завершаем перебор.
Программа решения задачи на языке Python
def f(n):
d = []
for k in range(2, int(n**0.5) + 1):
while n % k == 0:
d.append(k)
n //= k
if n > 1:
d.append(n)
return d
k = 0
x = 700001
while k != 5:
y = f(x)
y1 = set(y)
if len(y) > 1 and len(y1) == 1:
print(x, y[0])
k += 1
x += 1Функция
f(n)возвращает список простых делителей числа (например, для числа 72 →[2, 2, 2, 3, 3]).y1 = set(y)оставляет только уникальные делители. Если все делители одинаковые, длина множества будет равна 1.Условие
len(y) > 1гарантирует, что показатель степени больше 1.
Результат выполнения программы
703921 839
704969 89
707281 29
727609 853
734449 857