Найти первые 5 чисел, больших , которые имеют ровно 5 делителей. Запишите в ответ найденные числа в порядке возрастания через пробел.
Обычное решение
def count_div(n): # функция для подсчёта количества делителей
k = 2
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
k += 1
if n // i != i:
k += 1
if k > 5: # для оптимизации выходим из функции если кол-во делителей больше 5
return 0
return k
counter = 0
for i in range(35799, 1000000000000):
if count_div(i) == 5:
counter += 1
print(i, end=’ ’)
if counter == 5:
break
Решение на основе ОТА
def is_prime(n): # функция для проверки, что число - простое
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return n > 1
counter = 0
for i in range(1000):
if is_prime(i) and i ** 4 > 35798 and counter < 5:
print(i ** 4)
counter += 1
Ответ: 83521 130321 279841 707281 923521