Ecco qui di seguito una lista di numeri primi fino a 15.000, scaricabili gratuitamente in formato excel (zippati). Tranquilli, il file non eseguirà alcun aggiornamento, finché non cambierà la matematica percepita alla base del nostro universo
Lista dei numeri primi fino a 15.000 in formato Excel
DOWNLOAD: lista_numeri_primi.zip
Per tutti coloro che volessero conoscere come produrre numeri primi con il VBA (Visual Basic for Application) di Excel, eccovi il codice per generare un numero a piacere di numeri primi, ed il relativo file XLSM (Excel con macro), in cui troverete il codice pronto a girare con un semplice F5.
DOWNLOAD: genera_numeri_primi_macro.zip
' ============== CODICE GENERA PRIMI 235711.org ================
Private Sub genera_primi()
Cells.Select
' svuota il foglio excel
Selection.ClearContents
' imposta il limite entro il quale produrre tutti i numeri primi
Z = 15000
'itera per trovare i primi numeri fino a 15.000
For x = 1 To Z
p = x
switch1 = False
For I = 2 To p - 1
If p Mod I = 0 Then
switch1 = True
End If
Next I
If switch1 = True Then
' non è un numero primo
Else
'scrive il numero primo nella colonna A
Range("a" & x).FormulaR1C1 = x
Range("a" & x).Select
End If
Next
' ordina la colonna così ottenuta producendo la lista dei primi minori di Z
Columns("A:A").Select
Range("A16479").Activate
ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Add Key:=Range( _
"A1:A16493"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Foglio1").Sort
.SetRange Range("A1:A16493")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("a1").Select
' ============== CODICE GENERA PRIMI 235711.org ================
End Sub
Codice che genera primi in macro Excel
Il sistema utilizzato è quello del calcolo modulare che introduce il test di primalità basato sul resto (uno dei più semplici ma dei più scomodi in termini di prestazioni computazionali). Per numeri fino a qualche milione, anche VBA continua a dare numeri con velocità e grandi performance.
Ho notato che da alcuni numeri primi, con le loro stesse cifre, se ne possono formare altri : 743 e 347 ; 971 e 179 e 197 ; 199 e 991 e 919 ; 1103 e 3011 e 1031 ; 137 e 317 e 173 ; ( ecc.ecc. )
Bene, quello è l’algoritmo peggiore in termini di costo, perchè il ciclo x di divisioni va da 2 a p-1, dove p è il numero da analizzare. Vorrei consigliarvi di modificarlo in modo che x NON vada da 2 a p-1, ma vada DA 2 ALL’INTERO DELLA RADICE DI P. In basic dovrebbe essere così: for x= 2 to int(sqr(p)).
Questo è sicuramente MOLTO piu’ veloce, pur rimanendo non il migliore. La dimostrazione matematica dell’algoritmo che vi propongo è data dal crivello di Erastotene!
Ottimo grazie, l’ho utilizzato per il mio progetto di verifica della distribuzione dei primi secondo una mia teoria, che ovviamente, ancora non rivelo. Intanto grazie!
1 non è un numero primo ma nella tabella è inserito!
minimo errore ma fondamentale.
per il resto bel programma.
ciao!