Назовем число любопытным, если оно представимо в виде произведения простых чисел, взятых в первой степени. Найти на промежутке
количество любопытных чисел и наибольшее из любопытных чисел. Числа в ответе запишите через пробел.
def prime(n): # функция для проверки, что число - простое
if n == 1: return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def three_prime_divs(n): # функция, которая проверяет можно ли получить число произведением трёх его простых делителей
a = []
k = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
if prime(i):
k += 1
a.append(i)
if n // i != i and prime(n // i):
k += 1
a.append(n // i)
if k > 3:
return False
if k == 3 and a[0] * a[1] * a[2] == n:
return True # Произведение трех простых делителей в 1 степени
# чтобы не посчитать числа, такие как 3 * 3 * 5 * 7
return False
counter, maxim = 0, 0
for i in range(312311, 524322):
if three_prime_divs(i):
counter += 1
maxim = max(maxim, i)
print(counter, maxim)
Ответ: 44151 524318
