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

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [20211209; 20220126], числа, имеющие ровно 3 различных делителя, которые являются квадратами простых чисел. Программа должна вывести количество таких чисел.

def divs(n):
 
    div = []    # Массив делителей
 
    for i in range(2,int(n**0.5)+1):
 
        if n % i == 0:
 
            div.append(i)
 
            if i != n//i:
 
                div.append(n//i)
 
    return div
 

 
def is_prime(n):
 
    for j in range(2, int(n ** 0.5) + 1):
 
        if n % j == 0:
 
           return False
 
    return True
 

 
def is_sqrt_prime(n):
 
    if int(n**0.5)**2 == n and is_prime(int(n**0.5)):
 
        return True
 
    return False
 

 
def count_sqrt_divs(n):
 
    counter = 0
 
    for i in divs(n):
 
        if is_sqrt_prime(i):
 
            counter += 1
 
    return counter
 

 
a = 20211209  # Задаю границы цикла
 
b = 20220126
 
ans = 0   # Будущий ответ
 
for i in range(a, b + 1):
 
    if count_sqrt_divs(i) == 3:
 
        ans += 1
 
print(ans)

Ответ: 29
Оцените статью
Я решу все!