Ускорить код:
n = int(input())
i = 1
z = 1
spisok = []
a = []
while i <= n:
while z <= i:
if i % z == 0:
a.append(z)
z += 1
if len(a) % 2 == 0:
spisok.append(i)
a = []
z = 1
i += 1
print(len(spisok))


Rediska873: код с отступами дай
mcuhov: n = int(input())
i = 1
z = 1
spisok = []
a = []
while i <= n:
while z <= i:
if i % z == 0:
a.append(z)
z += 1
if len(a) % 2 == 0:
spisok.append(i)
a = []
z = 1
i += 1
print(len(spisok))
mcuhov: блин
mcuhov: n = int(input())
i = 1
z = 1
spisok = []
a = []
while i <= n:
----while z <= i:
--------if i % z == 0:
------------a.append(z)
--------z += 1
----if len(a) % 2 == 0:
--------spisok.append(i)
----a = []
----z = 1
----i += 1
print(len(spisok))

Ответы

Ответ дал: nikdissv
1

import array

spisok = array.array('I')  # Массив положительных чисел.

for i in range(int(input())):

   if not len([0 for z in range(1, i + 1) if not i % z]) % 2: spisok.append(i)

   # not len(...) % 2 тоже что и len(...) % 2 == 0, но быстрее в 2 раза.

   # [0 for z in ...] поскольку z нам не нужен, нам нужна лишь длина, я заменил его 0-ом.

print(len(spisok))

Или

Есть способ, ускорить код в 20 раз, cython.

from cpython.array cimport array

n = int(input()) + 1

spisok = array('I')

cdef unsigned int i, z

for i in range(n):

   if not len([0 for z in range(1, i + 1) if not i % z]) % 2: spisok.append(i)

print(len(spisok))

Сохранишь этот код в файл с расширением pyx (например my_file.pyx)

В консоли введёшь команду:

pip install cython  # библиотека

cythonize -i my_file.pyx || py -m cythonize -i main.pyx

И создай любой .py файл, добавь туда import того файла:

import my_file


mcuhov: Спасибо большое)
nikdissv: Есть способ, ускорить код в 20 раз, cython.
nikdissv: from cpython.array cimport array
n = int(input()) + 1
spisok = array('I')
cdef unsigned int i, z
for i in range(n):
----if not len([0 for z in range(1, i + 1) if not i % z]) % 2: spisok.append(i)
print(len(spisok))
nikdissv: Сохранишь этот код в файл с расширением pyx (например main.pyx)
В консоли введёшь команду:

pip install cython
cythonize -i main.pyx
mcuhov: Ещё большее спасибо, стало интересно, что такое cython, нужно почитать)
nikdissv: Я тут от скуки.. отшлифовал cython-овский код до придела, быстрее вряд ли получиться. На числе 50000, средняя скорость 5 сек (Замерял библиотекой timeit):
nikdissv: # cython: language_level = 3
## ^^ language_level=3 указывает на то, что это Python3 (тоже + к скорости)
from cpython.array cimport array
cdef unsigned int i, z, ZERO, n # unsigned int - это только положительные числа.
nikdissv: ZERO = 0 # как оказалось, если создать типизированный 0, он будет быстрее добавляться к массиву.
cdef int _n = int(input('> ')) # Поскольку n не может быть меньше нуля, я сначала это проверяю...
n = abs(_n) if _n < 0 else _n # и если он меньше нуля, убераю его (|n|)
spisok = array('I')
for i in range(1, n + 1):
if not len([ZERO for z in range(1, i + 1) if not i % z]) % 2: spisok.append(i)
print(spisok.__len__())
# как оказалось, вызов len(spisok) значительно медленнее spisok.__len__()
Вас заинтересует