Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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)