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

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

Один нечетный натуральный делитель имеют только степени 2, так что наша задача — посчитать, сколько степеней 2 находится в заданном промежутке.

Решение 1

s = 1
ans = 1 # т.к. у 1 тоже один нечетный натуральный делитель, то изначально ans=1
while s * 2 <= 10000:
    s *= 2
    ans += 1


print(ans)

Решение 2

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(1,10001):
    d = [i for i in divs(x) if i % 2 != 0 ] #список, в котором храняться только нечётные делители числа
    if len(d) == 1:
        count += 1
print(count)

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