Page 1 of 2 12 LastLast
Results 1 to 15 of 22

Thread: numeri primi

  1. #1
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default numeri primi

    Qualcuno conosce qualche algoritmo intelligente per calcolare i primi n numeri primi?
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  2. #2
    Warrant Officer dariuz's Avatar
    Join Date
    Jun 2004
    Location
    Padova (PD!)
    Posts
    3.384

    Default

    ci sono premi in $ astronomici per chi riesci a trovare i numeri primi (se non sbaglio siamo tipo al 42mo numero primo di Mersenne)

    cmq Prime95 il software per benchmark se non sbaglio calcola numeri primi per sfruttare la cpu

    se N è abbastanza contenuto qualcosa puoi fare http://it.wikipedia.org/wiki/Algorit...i_numeri_primi

    cmq per moar info leggiti le robe sul GIMPS
    Last edited by dariuz; 16th November 2011 at 00:24.
    -He who makes a beast of himself, gets rid of the pain of being a man
    -I pity those that don't drink, for when they wake up in the morning, thats as good as they're going to feel all day!
    -Silence is golden but duct tape is silver

  3. #3
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Non esistono algoritmi per il calcolo dei numeri primi, esistono i test di primalità.
    Dai un occhio all'algoritmo di Miller-Rabin.

    Btw è utile se vuoi sapere se un dato numero è primo o no, per calcolarli tutti dovresti testarli tutti. Puoi escludere tutti i numeri pari e sicuramente esiste qualche altro modo più furbo per ridurre lo spazio di ricerca, ma in ogni caso rimane sempre un qualcosa di gigantesco.

    edit:
    Chiaro che se vuoi trovare tutti i numeri primi compresi tra 1 e 100 non c'è problema, non capisco a cosa ti possa servire ma vabbè

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  4. #4
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Si, ho pensato di escludere tutti i numeri che finiscono per 0 2 4 5 6 8.
    Attualmente con tempi di calcolo umani(max 10 minuti) sn riuscito a calcolare senza fare impallare tutto i numeri primi tra i "primi 2.000.000" di numeri (149.000 numeri primi).
    Già sapere se è primo o no potrebbe essere perfetto per i miei scopi, poi ci do un occhio. Thx mille, quando venderò i miei brevetti in tutto il mondo avrete laut compensi :P
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  5. #5
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    esistono diversi modi per ridurre lo spazio di ricerca e diversi modi per farlo parallelamente. Google e passa la paura. A sentimento direi che è un esercizio...
    10 minuti per 2000000 me pare tantino...

  6. #6
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Brcondor View Post
    Si, ho pensato di escludere tutti i numeri che finiscono per 0 2 4 5 6 8.
    lol?
    Fare modulo 2 e vedere se il resto è 0 no eh?

    Attualmente con tempi di calcolo umani(max 10 minuti) sn riuscito a calcolare senza fare impallare tutto i numeri primi tra i "primi 2.000.000" di numeri (149.000 numeri primi).
    Già sapere se è primo o no potrebbe essere perfetto per i miei scopi, poi ci do un occhio. Thx mille, quando venderò i miei brevetti in tutto il mondo avrete laut compensi :P
    No ma forse non hai capito, oltre un certo livello manco coi supercomputer ci arrivi. 2.000.000 è un numero ridicolo, quando ho implementato RSA testavo la primalità su numeri di ALMENO 150 cifre.
    Cmq son curioso di sapere a cosa ti serve ^^,

    Quote Originally Posted by Hador View Post
    esistono diversi modi per ridurre lo spazio di ricerca e diversi modi per farlo parallelamente. Google e passa la paura. A sentimento direi che è un esercizio...
    10 minuti per 2000000 me pare tantino...
    Si ma anche se riduci lo spazio di ricerca non vai un po' da nessuna parte, idem andando parallelamente. Magari invece di metterci 4 miliardi di anni ce ne metti 2, yay!

    edit:
    dimenticavo, stai ben attento che miller-rabin (ma direi con ragionevole certezza tutti gli algoritmi per il test di primalità un pelo efficienti) è probabilistico.. non ti basta eseguirlo una volta per ogni numero che testi.

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  7. #7
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Boh, poi provo a cronometrare. Ma verificare se 2.000.000 di numeri sono primi o meno richiede un bel po' di tempo credo.
    In maniera standard(mettendosi a testa bassa senza ragionare) per ogni i-esimo numero devo verificare che non sia multiplo di tutti gli i-1 numeri che lo precedono: sono un fottio di operazioni... anche perchè andando su con le cifre i conti diventano sempre piu computazionalmente onerosi. 7/2 + 7/3 + 7/5 != 2.000.003 / 2 + 2.000.003 /3 + .... + 2.000.003 /2000002
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  8. #8
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    bhe considerando che arrivi fino a 18.446.744.073.709.551.615 e che han scoperto numeri primi ben più grandi, secondo me è fattibile
    comunque pensavo fosse per uni o simile, se hai bisogno i numeri, ci sono le liste...
    Last edited by Hador; 16th November 2011 at 00:36.

  9. #9
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    è per uni e per quel che serve a me non mi interessa neanche lontanamente superare il 10^12 come massimo numero da testare se è primo...
    Cmq thx mille.
    @ axet è un progetto per un corso, progetto che col corso non centra molto. Mi servirebbe implementare una serie di funzioni che vadano a mostrare alcune proprietà di alcuni particolari numeri naturali: alla base di tutto è che il numero sia primo. Non mi interessa sapere se un numero di ordine 30 è primo.
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

  10. #10
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Brcondor View Post
    Boh, poi provo a cronometrare. Ma verificare se 2.000.000 di numeri sono primi o meno richiede un bel po' di tempo credo.
    In maniera standard(mettendosi a testa bassa senza ragionare) per ogni i-esimo numero devo verificare che non sia multiplo di tutti gli i-1 numeri che lo precedono: sono un fottio di operazioni... anche perchè andando su con le cifre i conti diventano sempre piu computazionalmente onerosi. 7/2 + 7/3 + 7/5 != 2.000.003 / 2 + 2.000.003 /3 + .... + 2.000.003 /2000002
    Buongiorno eh, come già detto esistono i test di primalità apposta. L'algoritmo naive che hai scritto è, appunto, naive.

    Quote Originally Posted by Hador View Post
    bhe considerando che arrivi fino a 18.446.744.073.709.551.615 e che han scoperto numeri primi ben più grandi, secondo me è fattibile
    comunque pensavo fosse per uni o simile, se hai bisogno i numeri, ci sono le liste...
    18.446.744.073.709.551.615 è minuscolo
    Come già detto per RSA servono numeri primi di almeno 150 cifre, e sebbene possano sembrare grandi sono in ogni caso una briciola.
    Per capirci, riporto da wiki:
    <<In 2009, the Great Internet Mersenne Prime Search project was awarded a US$100,000 prize for first discovering a prime with at least 10 million digits.[19] The Electronic Frontier Foundation also offers $150,000 and $250,000 for primes with at least 100 million digits and 1 billion digits, respectively.>>

    10 milioni di cifre. Auguri brcondor

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  11. #11
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Brcondor View Post
    è per uni e per quel che serve a me non mi interessa neanche lontanamente superare il 10^12 come massimo numero da testare se è primo...
    Cmq thx mille.
    @ axet è un progetto per un corso, progetto che col corso non centra molto. Mi servirebbe implementare una serie di funzioni che vadano a mostrare alcune proprietà di alcuni particolari numeri naturali: alla base di tutto è che il numero sia primo. Non mi interessa sapere se un numero di ordine 30 è primo.
    Vabbè 10^12 è isi.
    Il metodo più semplice che mi viene in mente è: dividi facile facile lo spazio di ricerca in due (consideri solo i numeri dispari) senza farti altri calcoli strani che tanto per una cifra così bassa non ti servono, poi spari miller-rabin a raffica per ogni numero. Magari ci mette qualche ora ma ce la fa senza patemi

    edit:
    di nuovo un appunto sul fatto che MB è un test probabilistico.
    La probabilità di errore per una singola applicazione è 1/4. Applicalo N volte (in maniera indipendente obv) e la probabilità di errore diventa 1/(4^N). Tanto più alto N tanto più sarai sicuro che il numero è primo.. tienilo il più alto che riesci considerando anche i tempi di calcolo
    Last edited by Axet; 16th November 2011 at 00:55.

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  12. #12
    Lieutenant Commander San Vegeta's Avatar
    Join Date
    Oct 2003
    Location
    Bologna
    Posts
    12.153

    Default

    aggiungo solo che al posto di "modulo 2", se fai uno shift a destra e ottieni 0, il numero è pari e quindi da escludere, operazione velocissima
    I rubinetti a casa di Chuck Norris non perdono, vincono.

    In the beginning there was nothing...then Chuck Norris Roundhouse kicked that nothing in the face and said "Get a job". That is the story of the universe.

    Quote Originally Posted by Wolfo View Post
    Concordo e propongo ban temporanei per chi critica la topa , la topa non si critica , dal trombabile in su non si commenta in modo sgradevole.
    la tua ignoranza in materia e' raccapricciante
    -cit. Estrema, 2022

  13. #13
    Master Chief Petty Officer Dr.Doomed's Avatar
    Join Date
    Jul 2005
    Location
    Latveria
    Posts
    2.067

    Default

    Quote Originally Posted by San Vegeta View Post
    aggiungo solo che al posto di "modulo 2", se fai uno shift a destra e ottieni 0, il numero è pari e quindi da escludere, operazione velocissima
    Giusto per fare la punta al cazzo, 2 e` un numero primo.
    Ad ogni modo, se parte da 3 e itera calcolando il numero da verificare successivo aggiungendo 2, modulo 2 o rightshift se li puo` evitare del tutto, cosa piu` veloce in assoluto.
    Le masse saranno sempre al di sotto della media. La maggiore età si abbasserà, la barriera del sesso cadrà, e la democrazia arriverà all'assurdo rimettendo la decisione intorno alle cose più grandi ai più incapaci.
    Sarà la punizione del suo principio astratto dell'uguaglianza, che dispensa l'ignorante di istruirsi, l'imbecille di giudicarsi, il bambino di essere uomo e il delinquente di correggersi. Il diritto pubblico fondato sulla uguaglianza andrà in pezzi a causa delle sue conseguenze.
    Perché non riconosce la disuguaglianza di valore, di merito, di esperienza, cioè la fatica individuale: culminerà nel trionfo della feccia e dell'appiattimento. L'adorazione delle apparenze si paga.
    "Frammenti di diario intimo", 12 giugno 1871

    They are entitled to their opinion but they suffer from the notable disadvantage of being completely wrong

    Discutere con certe persone è come giocare a scacchi con un piccione. Puoi essere anche il campione del mondo ma il piccione farà cadere tutti i pezzi, cagherà sulla scacchiera e poi se ne andrà camminando impettito come se avesse vinto lui.

    ~-~-~ νῦν μὴ κακά στοχάζομαι ~-~-~

  14. #14
    Master Chief Petty Officer Abby's Avatar
    Join Date
    Aug 2004
    Location
    Roma (Italy)
    Posts
    2.392

    Default

    Se l'intervallo è da 1 al numero n, e se hai memoria il crivello di Eratostene è sufficientemente semplice e veloce (mi raccomando che non usi modulo ma elimini i multipli) complessità O(n(logn)(loglogn))

    Massima
    Avere libertà di espressione non significa poter offendere qualcuno, questa è maleducazione unita ad ignoranza.

    I am nerdier than 91% of all people.

  15. #15
    Lieutenant Brcondor's Avatar
    Join Date
    Mar 2005
    Posts
    4.610

    Default

    Per evitare questi problemi ho usato un trucchetto che funziona da dio.
    Come vettore di numeri primi ne do uno fino a 11(1 2 3 5 7 11).
    Per vedere se un numero maggiori di 11 è primo prendo una i che parte da 11+k e arriva fino a questo numero testando la primalità di ogni numero.
    k varia: vale 2 se l'ultima cifra è 1,7,9 e vale 4 se l'ultima cifra del numero primo i-1 è 3. Cosi farei 11 - 13- 17 -19 -21-23-27-29 saltando cioè i multipli di 2 e 5 senza fare un conto.
    Una volta che ho testato chessò 44 (che non è primo ma mi permette di allungare il vettore di numeri primi con 13 17 19 23 29 31 37 39 41 43) e voglio testare il 49 riparto da 43(quindi i=47 e poi i=49). Andando avanti per iterazioni successive posso scrivere enormi vettori di numeri primi minimizzando i conti. Avete qualche consiglio/idea/suggerimento?
    " ...e mai un pensiero non al denaro, non all'amore né al cielo... " Fabrizio de Andrè

Page 1 of 2 12 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
[Output: 105.61 Kb. compressed to 90.15 Kb. by saving 15.46 Kb. (14.63%)]