Se ti interessa questo codice, molto semplice, applica il Crivello su un range di 500 milioni partendo da una qualsiasi cifra pari
che in questo caso è "nbb=105000000000 ".
Lo scopo del programma è individuare tutti i numeri primi che si trovano dentro questo range e cioè da (nbb a nbb+500000000)
e memorizzarli dentro un file (ava=1) che si incrementa a seconda di quanti cicli vuoi far fare al programma (while ava<=1:)
Per ogni ciclo ci vogliono circa 10 minuti, naturalmente questo dipende anche dal tipo di computer che usi e dalla grandezza del numero di partenza, e puoi partire da un qualsiasi numero pari senza dover sempre partire da 1.
Tieni presente che i numeri primi da analizzare su un range di 500.000.000 sono comunque meno della metà se tolti i numeri pari e i numeri che finiscono con 5.
Nap=? è il numero da cui vuoi cominciare a memorizzare i file con i numeri primi
Se ad esempio nap=15 e (while ava<=10), i file che memorizzerà il programma partiranno da 15 fino a 25, questo per permetterti di memorizzare file di numeri primi interrompendo e riprendendo il programma a tuoi piacimento
#Crivello
from datetime import datetime
import math
now = datetime.now().time()
print("ora inizio =", now)
#***************************
nbb=105000000000
ava=1
nap=1
matrice=[]
limite=500000000
print('riempimento matrice')
for i in range(limite):
matrice.append(0)
while ava<=1:
nb=nbb
print('---------------->',nb)
nb=nb//30*30
limite=limite//30*30
np=2
npp=3
cont=1
limite2=nb+limite
print('prima parte')
while cont>0:
if np%2==0:
n=npp*np+1
else:
n=npp*np+2
t1=nb//n
if (t1-1)%3==0:
molt=(t1-1)//3
if (t1-2)%3==0:
molt=(t1-2)//3
if (t1-3)%3==0:
molt=(t1-3)//3
if n*n>limite2:
break
cont2=1
molt3=3
while cont2>0:
if molt%2==0:
a=molt3*molt+1
else:
a=molt3*molt+2
if n*a>limite2:
break
if a>n and n*a%5!=0 and n*a>nb:
matrice[n*a-nb]=n*a-nb
# print(n,"x",a,"=",n*a,'----->',n*a-nb)
molt=molt+1
np=np+1
#-------------------------------------------
print('parte finale')
scrivi=open(str(nap)+'.txt','w')
dividi=0
qt=0
for i in range(limite):
if matrice[i]==0 and i%2!=0 and i%5!=0:
if (i+nb)%3!=0:
#print(i+nb)
scrivi.write(str(i+nb)+' ')
dividi=dividi+1
qt=qt+1
if dividi==28:
scrivi.write('\n')
dividi=0
matrice[i]=0
scrivi.close()
print('-------------------------')
print('numeri primi ',qt)
print('-------------------------')
now = datetime.now().time()
print("ora fine =", now)
limite=500000000
nbb=nbb+limite
ava=ava+1
nap=nap+1