Задача к ЕГЭ по информатике на тему «делители числа» №12

Назовем число добрым, если среди его делителей есть хотя бы три квадрата простых чисел. Найти 5 минимальных добрых чисел, больших 21317  . В ответе запишите найденные числа через пробел в порядке возрастания.

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 divs(x): # функция возврающая список делителей числа
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d.add(i)
            d.add(x//i)
    return sorted(d)
count = 0
for x in range(21318,100000):
    d = [i for i in divs(x) if int(i**0.5) == i**0.5 and prime(i**0.5)] # список, в котором хранятся только квадраты простых делителей числа
    if len(d) >= 3:
        print(x)
        count += 1
        if count == 5:
            break

Ответ: 21600 21780 22050 22500 22932
Оцените статью
Я решу все!