версия списка:
Код: Выделить всё
import math
def PrimeTable(n:int) -> list[int]:
nb2m1 = n//2 - 1
l = [True]*nb2m1
for i in range(1,(math.isqrt(n)+1)//2):
if l[i-1]:
for j in range(i*3,nb2m1,i*2+1):
l[j] = False
return [2] + [i for i,v in zip(range(3,n,2), l) if v]
Код: Выделить всё
import math, numpy
def PrimeTable2(n:int) -> list[int]:
nb2m1 = n//2 - 1
l = numpy.full(nb2m1, True)
for i in range(1,(math.isqrt(n)+1)//2):
if l[i-1]:
for j in range(i*3,nb2m1,i*2+1):
l[j] = False
return [2] + [i for i,v in zip(range(3,n,2), l) if v]

где y0 — это PrimeTable, а y1 — PrimeTable2
Почему numpy.array такой медленный, и как его улучшить?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ata-inside
Мобильная версия