NumeriPrimi a gogo

MastroLindo

Utente abituale
12 Aprile 2018
130
18
venezia
EXCEL 2016
0
NumeriPrimi a gogo un piccolo programma in excel vba ideale per studenti di matematica e non studenti.

Innanzitutto ringrazio tutti gli users che mi hanno aiutato: Ges, dracoscrigno, in particolare Bruno che mi ha aiutato con le matrici.

Questo piccolo programma calcola i numeri primi da 1 a 9.223.372.036.854.775.807 (se partiamo da 1 per ragioni di calcolo omette il 2 e 5 se guardate il codice si capisce subito). Comunque si può partire da qualsiasi numero ed arrivare a calcolare i numeri primi fino al numero desiderato.

Attenzione se l’intervallo dei numeri e molto grande il calcolo può durare anche ore.

Io ho un portatile con 6 giga di memoria e cpu i7 e per alcuni calcoli impiego:

da 1 a 300 000 impiego 0,21875 secondi.

da 1 a 1 000 000 impiego 1,031 secondi.

da 1 a 10 000 000 impiego 23,625 secondi.

da 1 a 1 000 000 000 impiego 3h 56m 36s,87 secondi. Ecc. ecc.

Ho lasciato il computer di notte lavorare da solo, quindi più alti sono i numeri più tempo impiega.

Es. da 8 500 000 001 a 9 000 000 000 impiego 8h 13m 13s,664.

Però se mi interessa sapere se un numero molto alto è primo digito solo il numero oppure digito un piccolo intervallo tra un numero e l’altro.

Sono lontano anni luce a scoprire il numero primo più grande come già scoperto, ma comunque ho fatto un piccolissimo passo.

Accetto volentieri qualunque suggerimento per velocizzare i calcoli.

Spero sia di aiuto a qualcuno.

Grazie

Ciao a tutti
 

Allegati

  • Like
Reactions: Rubik72 and ges

MastroLindo

Utente abituale
12 Aprile 2018
130
18
venezia
EXCEL 2016
0
Ciao a tutti gli users.
Ecco un'altra versione del file NumeriPrimi_a_gogo con file txt esterno.
Ho provato ad usufruire del file TXT di dracoscrigno contenente una lista di numeri primi che richiamati da codice diventano i divisori per il calcolo di numeri primi stessi. L'ultimo numero del file divisori.text è: 499649 che se elevato al quadrato mi da 249.649.123.201 che è il numero limite per il calcolo dei numeri primi (salvo miei errori di calcolo). Mentre con la prima versione posso calcolare i numeri primi fino a : 9.223.372.036.854.775.807. In allegato i due i files.
Ho notato che la prima versione è più veloce della seconda.
Come sempre accetto volentieri qualunque suggerimento per velocizzare e semplificare i calcoli.
Grazie
Ciao
 

Allegati

MastroLindo

Utente abituale
12 Aprile 2018
130
18
venezia
EXCEL 2016
0
Ciao a tutti per chi interessa propongo un'altra versione per il calcolo dei numeri primi.
Questa versione è velocissima ed ha un solo handicap cioè e' limitata , calcola i numeri primi fino al numero di:' 1.0172.000.000 circa.
Premetto la formula del calcolo è stata copiata da un sito giapponese e rielaborata e adattata al mio programma.
Pertanto chiedo cortesemente agli esperti se si può' andare oltre a numero sopra scritto.( almeno per quelli che hanno installato excel 64 bit). Accetto consigli da tutti.
grazie.
 

Allegati

  • Like
Reactions: Bruno and ges

muni

VBA Expert
Expert
25 Novembre 2018
240
18
Roma
2013
14
Cosa succede oltre quel numero? Un problema di memoria?

P.S. non capisco nel codice la frase relativa al LongLongPtr che non usi nel tuo codice ...
 

MastroLindo

Utente abituale
12 Aprile 2018
130
18
venezia
EXCEL 2016
0
Cosa succede oltre quel numero? Un problema di memoria?

P.S. non capisco nel codice la frase relativa al LongLongPtr che non usi nel tuo codice ...
Ciao.
Scusami le prime tre righe di spiegazioni sono da ignorare mi sono dimenticato di cancellarle, pertanto non hanno niente a che vedere con il codice, erano riferite alla prima versione. Perché con la voce del menu sostituisci si è aggiunto un Long ad LongPtr .
Comunque:
Succede Overflow cioè Problema di memoria.
Per chi ha excel 32 bit accetta solo la funzione Long o inferiore allora va in overflow con numeri più bassi.
per chi ha excel 64 bit non accetta la funzione LongLong da problemi con le matrici.
Con il codice iniziale potevo calcolare i numeri primi fino a 9.223.372.036.854.775.807 usando la funzione LongLong. I calcoli duravano ore e il tempo era in proporzione alla grandezza del numero. Cioè io calcolavo i numeri primi per 1.000.000.000 alla volta e cosi via. Poi man mano il numero da calcolare diventava sempre più grande passavo a 500.000.000 per volta, poi a 250.000.000 per volta e cosi via.
Sono lontano anni luce a scoprire il numero primo più grande come già scoperto, ma comunque ho fatto un piccolissimo passo.
 
Ultima modifica:

muni

VBA Expert
Expert
25 Novembre 2018
240
18
Roma
2013
14
Succede Overflow cioè Problema di memoria.
No, un overflow non è un problema di memoria.

In quale riga esattamente hai quell'errore?

funzione Long
Il Long è un tipo di dato non una funzione. E che vengano trattati, al massimo, i Long (come tipo di dato intero) è normale perché in un sistema a 32 bit i Long sono a 32 bit.

funzione LongLong da problemi con le matrici.
Anche il LongLong è un tipo di dato intero a 64 bit. Dai maggiori dettagli circa questi "problemi".

Sono lontano anni luce a scoprire il numero primo più grande come già scoperto, ma comunque ho fatto un piccolissimo passo.
Non vorrei deluderti ma questo non si fa con Excel e VBA ma ci vogliono particolari algoritmi implementati con linguaggi molto più efficienti e hardware molto più veloci.

Se vogliamo dare una soluzione agli errori, si può dare un'occhiata ma per i numeri primi, con Excel/VBA e i sistemi casalinghi, non potrai mai andare oltre un certo limite. Esistono limiti di memoria utilizzabile e tanti altri problemi che rendono la faccenda una mera "curiosità" che può andare bene come divertimento ...
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!