Listenversion:
Code: Select all
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]
Code: Select all
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]

wobei y0 PrimeTable und y1 PrimeTable2 ist
Warum? numpy.array ist so langsam, und wie kann ich es verbessern?