Ускорить код: 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))

Riper165 Riper165    1   31.01.2022 01:18    0

Ответы
valeriehunt valeriehunt  31.01.2022 01:20

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

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика