PDA

View Full Version : Lavorare con numeri di 7 milioni di cifre


luca90
06-12-2006, 19:14
salve a tutti....mi è salita la mania di trovare numeri primi per tanti motivi.....ho iniziato allora a crearmi un programmino per trovarli con visual basic.....il tutto funziona....ora però sono arrivato al limite dei numeri che riesce a calcolare il programma......e io vorrei andare oltre.....

mi sapete dire come? mi hanno detto che per ciò visual basic non va bene.....sapete qualcosa?


grazie mille

fsdfdsddijsdfsdfo
06-12-2006, 19:17
salve a tutti....mi è salita la mania di trovare numeri primi per tanti motivi.....ho iniziato allora a crearmi un programmino per trovarli con visual basic.....il tutto funziona....ora però sono arrivato al limite dei numeri che riesce a calcolare il programma......e io vorrei andare oltre.....

mi sapete dire come? mi hanno detto che per ciò visual basic non va bene.....sapete qualcosa?


grazie mille
ti conviene usare c.

il tuo problema di numeri troppo grandi lo puoi risolvere con una serie di classi di resto e un vettore.

Ma la cosa piu importante è capire che algoritmo hai usato. E' la cosa che incide di piu.

luca90
12-12-2006, 08:47
ma con il c posso farlo lavorare con cifre simili? si può anche in pochi passaggi fargli fare un operazione semplice tipo 1000000000/3?

cmq...io al programma faccio fare questo....io gli do un numero e glielo faccio dividere per tutti i numeri partendo da 1 fino alla sua metà...se diviso tutti quei numeri da un numero non intero allora è un numero primo altrimenti non lo è...arrivato alla fine aggiunge un unità al numero che gli ho dato e continua a dividere.....il progrmma si ferma quando ha compiuto un determinato numero di cicli da me impostato....


si può semplificare?

^TiGeRShArK^
12-12-2006, 11:10
Usa Java.
Con le classi BigInteger e BigDecimal hai a disposizione tutto quello ke ti serve ;)

marco.r
12-12-2006, 11:49
ti conviene usare c.

il tuo problema di numeri troppo grandi lo puoi risolvere con una serie di classi di resto e un vettore.

Ma la cosa piu importante è capire che algoritmo hai usato. E' la cosa che incide di piu.
Cosi' fa prima a farsele in VB. Piuttosto che provi ad usare un linguaggio che supporta nativamente interi non limitati (python, ruby...)

mynos79
12-12-2006, 11:59
Piuttosto che provi ad usare un linguaggio che supporta nativamente interi non limitati (python, ruby...)
Quoto ... python o ruby sono fenomenali da questo punto di vista, senza sbattimenti di dichiarazioni o dimensionamento.

Altrimenti in VB bisogna usare delle librerie apposite, io conosco una libreria della Rebex.net ottima, ma costa un casino (infatti la uso al lavoro) ...

cj++
12-12-2006, 15:23
449688144159898862101712998294841417437
561482447046960908609275971547647741574292939
2151973494810921559152256043867494594397873865175781
412248594934922522056454329496420782459560992351741152283
1421795517317557927818937952265992517105267830654968956429999271

Possono andar bene cm numeri primi pseudocasuali o sono ancora troppo corti?

luca90
13-12-2006, 13:32
quello è corto....fino a quelli con il programma che ho adesso ci arrivo tranquillamente....quarda li ke numero...
http://www.mersenne.org/prime8.txt

ma se utilizzo java posso usare il programma in ambiente windows? anche in versione x64?

^TiGeRShArK^
13-12-2006, 14:16
quello è corto....fino a quelli con il programma che ho adesso ci arrivo tranquillamente....quarda li ke numero...
http://www.mersenne.org/prime8.txt

ma se utilizzo java posso usare il programma in ambiente windows? anche in versione x64?
basta vedere se è uscita una versione x windows x64 sul sito java.sun.com
Immagino di si ma non ne ho la sicurezza :D

mamo139
13-12-2006, 14:41
ma con il c posso farlo lavorare con cifre simili? si può anche in pochi passaggi fargli fare un operazione semplice tipo 1000000000/3?

cmq...io al programma faccio fare questo....io gli do un numero e glielo faccio dividere per tutti i numeri partendo da 1 fino alla sua metà...se diviso tutti quei numeri da un numero non intero allora è un numero primo altrimenti non lo è...arrivato alla fine aggiunge un unità al numero che gli ho dato e continua a dividere.....il progrmma si ferma quando ha compiuto un determinato numero di cicli da me impostato....


si può semplificare?

beh... così su due piedi intanto puoi duplicare la velocità o meglio dimezzare i numeri da controllare scartando i numeri pari...

poi ad esempio i numeri che finiscono per 5
o anche i numeri la cui somma delle cifre sia un multiplo di tre (ovvero ne salti uno ogni tre)...

cj++
13-12-2006, 15:29
quarda li ke numero...
hai la vaga idea delle risorse (tempo e spazio) necessarie per lavorare su dati del genere?

[The Black]
13-12-2006, 15:50
449688144159898862101712998294841417437
561482447046960908609275971547647741574292939
2151973494810921559152256043867494594397873865175781
412248594934922522056454329496420782459560992351741152283
1421795517317557927818937952265992517105267830654968956429999271

Possono andar bene cm numeri primi pseudocasuali o sono ancora troppo corti?
ha detto 7 MILIONI di cifre :D

luca90
13-12-2006, 17:29
hai la vaga idea delle risorse (tempo e spazio) necessarie per lavorare su dati del genere?

sisi ma non sono un problema....

cj++
13-12-2006, 22:19
']ha detto 7 MILIONI di cifre :D
si lo so che ha detto 7 milioni, ma nn ne ha detto l'utilita e personalmente nn la vedo, visto che gli stessi numeri che ho messo io sono ben piu che sufficienti per la crittografia.

in ogni caso lo stesso algoritmo che ho usato io... basta continuare a farlo andare avanti ed il numero è sempre piu grande... e dispendioso da gestire.

Angus
14-12-2006, 11:11
sisi ma non sono un problema....

Spiegami come fai a non avere problemi di spazio/tempo che ti offro una birra. :cincin:

luca90
14-12-2006, 13:36
ho più di un pc a casa...se uno rimane a cercare numeri primi non è un problema....cmq grazie a tt....ora mi cerco qualcuno che sappia programmare con python, ruby o java e si vedrà.....

marco.r
14-12-2006, 13:50
Il 18 Febbraio 2005, il Dr. Martin Nowak dalla Germania, ha trovato il nuovo numero primo più grande: 2^(225,964,951-1).
Non mi sembra un numero molto primo quello li' :D,
probabilmente si tratta di 2^(225,964,951)-1

luca90
14-12-2006, 20:29
un ultima cosa..... potreste consigliarmi un testo abbastanza semplice che spieghi come usare python, ruby o java? preferisco avere qualcosa di scritto che cercare guide in internet.....mi basta imparare a fargli fare quelle poche operazioni......
preferirei imparare ke kiedere a qualcuno.....


ps. Agnus....m devi una birra :D

Johnn
14-12-2006, 21:55
ma con il c posso farlo lavorare con cifre simili? si può anche in pochi passaggi fargli fare un operazione semplice tipo 1000000000/3?

cmq...io al programma faccio fare questo....io gli do un numero e glielo faccio dividere per tutti i numeri partendo da 1 fino alla sua metà...se diviso tutti quei numeri da un numero non intero allora è un numero primo altrimenti non lo è...arrivato alla fine aggiunge un unità al numero che gli ho dato e continua a dividere.....il progrmma si ferma quando ha compiuto un determinato numero di cicli da me impostato....


si può semplificare?

Se non vado errato, puoi fermarti nella ricerca alla radice quadrata del numero e non alla sua metà.

P.S. Ma un numero di 7 milioni di cifre occupa circa 30Mbit!!!

mamo139
14-12-2006, 22:20
Se non vado errato, puoi fermarti nella ricerca alla radice quadrata del numero e non alla sua metà.
vero

luca90
17-12-2006, 21:49
Se non vado errato, puoi fermarti nella ricerca alla radice quadrata del numero e non alla sua metà...

come alla radice quadrata del numero?!? non ti seguo......

mamo139
17-12-2006, 21:53
vuol dire che per sapere se 100 è un numero primo basta che provi a dividerlo per tutti i numeri da 1 a 10!