You can simplify by using just one matrix $$P(i,j)=6ij+i-j$$ with $i\geq 2$ and $j\geq 1$ We can find primes (except $2$ and $3$) simply by picking numbers $k$ which do not appear in this array (except $21$) with: $p= \frac{(6k-1)}{5}$ if $k\equiv 1 \bmod 5$ and $p=6k-1$ otherwise However a faster method is obtained using this code in python: n=10000000 primes5m6 = [True] * (n//6+1) primes1m6 = [True] * (n//6+1) for i in range(1,int((n**0.5+1)/6)+1): if primes5m6[i]: primes5m6[6*i*i::6*i-1]=[False]*((n//6-6*i*i)//(6*i-1)+1) primes1m6[6*i*i-2*i::6*i-1]=[False]*((n//6-6*i*i+2*i)//(6*i-1)+1) if primes1m6[i]: primes5m6[6*i*i::6*i+1]=[False]*((n//6-6*i*i)//(6*i+1)+1) primes1m6[6*i*i+2*i::6*i+1]=[False]*((n//6-6*i*i-2*i)//(6*i+1)+1) where for $i>0$ $ p = 6i-1 $ is prime if $ primes5m6 [i] = True $ and $ p = 6i + 1 $ is prime if $ primes1m6 [i] = True $