Algoritmo numeri primi

di il
14 risposte

Algoritmo numeri primi

Salve, purtroppo non mi viene un algoritmo per trovare i numeri primi. mi spiego meglio: un algoritmo mi viene, ma è sfruttando un approccio troppo semplicistico; in pratica, per risolvere il problema tagliando la testa al toro, potrei introdurre una variabile che indichi il numero massimo, per poi trovare tutti i numeri primi da 0 al numero detto dall'utente, esempio da 0 a 100000. io vorrei, se possibile, un algoritmo, un consiglio o dello pseudocodice per riuscire a scrivere un metodo che individui un numero primo senza alcuna limitazione. un metodo che in pratica, inserito un numero mi dia true se numero primo e false in caso contrario. riconosco che devo utilizzare un ciclo, probabilmente un while, visto che l'iterazione va ripetuta infinite volte(o meglio un numero indefinito di volte). mi viene anche da pensare che un array non va bene per il mio scopo visto che opera su un numero definito di elementi. mi stavo chiedendo se un foreach potesse aiutarmi, ma non sono molto abituato ad usarlo, non lo preferisco e quindi(erroneamente) lo escludo apriori. Qualche consiglio o soluzione?(non preoccupatevi non chiedo codice, solo un algoritmo o un consiglio) grazie infinite a chiunque risponderà

14 Risposte

  • Re: Algoritmo numeri primi

    http://it.wikipedia.org/wiki/Crivello_di_Eratosten

  • Re: Algoritmo numeri primi

    Ciao, grazie per avermi risposto. avevo già letto la crivella di eratostene, ma è una procedura matematica applicabile ad un intervallo, come fa ben capire l'esempio riportato a fondo pagina, io cercavo qualcosa di ancor più "generale", qualcosa senza limitazioni e applicabile in ogni singolo caso di numero primo. prima di fare la domanda avevo pensato a qualcosa di simile, ossia:
    se il numero inserito da tastiera è divisibile per 2 o per 3, o 5, o 7 allora è composito, se non lo è sarà un numero primo, ma non so se è applicabile ad ogni caso.. il secondo link che mi hai dato è molto interessante e forse mi ha dato una soluzione, ma la vedo difficile da tradurre in java.. grazie ancora per i link, faccio delle prove nel pomeriggio e vi faccio sapere.
  • Re: Algoritmo numeri primi

    IL crivellO di erastotene, non la crivella
  • Re: Algoritmo numeri primi

    Ops, hai ragione, colpa mia!
  • Re: Algoritmo numeri primi

    fausto94 ha scritto:


    se il numero inserito da tastiera è divisibile per 2 o per 3, o 5, o 7 allora è composito, se non lo è sarà un numero primo ...
    E se è divisibile per 11?
  • Re: Algoritmo numeri primi

    schumy2000 ha scritto:


    IL crivellO di erastotene, non la crivella
    Non va ancora

    Si chiama:

    crivello di Eratostene

    NON eraSTotene
  • Re: Algoritmo numeri primi

    Oregon proprio di questo parlavo: probabilmente dovrei includere anche altri numeri o ancora meglio cambiare proprio metodo! mi rendo conto che quel metodo non va bene. non penso sia solo l'11 il problema. probabilmente ce ne sono altri(13-17...).
  • Re: Algoritmo numeri primi

    fausto94 ha scritto:


    oregon proprio di questo parlavo: probabilmente dovrei includere anche altri numeri o ancora meglio cambiare proprio metodo! mi rendo conto che quel metodo non va bene. non penso sia solo l'11 il problema. probabilmente ce ne sono altri(13-17...).
    @fausto

    1) dovresti leggere i link che ti vengono postati

    2) il concetto di numero primo e' roba da scuole medie? !!!

    Allora, ti rispolvero la memoria:

    un numero primo e' un numero divisibile solo per se stesso e per l'unita'.

    Quindi per scoprire se un numero N e' primo devi provare a dividerlo per 2, 3, 4, ... N-1,

    Non serve provare per 1 perche' tutti i numeri sono divisibili per 1, e non serve provarlo per N perche' tutti i numeri sono divisibili per se stessi.

    A partire da questa banalita', si possono fare un po' di ottimizzazioni

    1) non serve dividerlo per numeri multipli di 2, detti numeri pari, basata solo per 2. Ed e' OVVIO perche'!!!! (spiegalo!)
    2) non serve dividerlo per TUTTI i numeri compresi tra 2 e N-1, che, escludendo quelli esclusi dal punto 1) si riducono ai soli numeri dispari. Piu' specificatamente: non serve dividerlo per tutti i numeri dispari compresi tra 3 e N-1. Si puo' fare di meglio!

    Il perche' del punto 2) e' OVVIO: se ci pensi, ci arrivi da solo, partende dalla definizione di numero primo (spiegalo!).

    Se leggi i link postati, ti viene esplicitamente spiegato!!!

    Questo e' l'UNICO SISTEMA per trovare i numeri primi. Non ne esistono altri.

    Per la pupattola, ragazzi: vi scoccia tanto studiare?

    Non serve nemmeno andare a ripescare i libri delle medie o delle superiori.

    Basta Wikipedia, se proprio non ci si ricorda al volo qualcosa.
  • Re: Algoritmo numeri primi

    fausto94 ha scritto:


    oregon proprio di questo parlavo: probabilmente dovrei includere anche altri numeri o ancora meglio cambiare proprio metodo! mi rendo conto che quel metodo non va bene. non penso sia solo l'11 il problema. probabilmente ce ne sono altri(13-17...).
    Infatti ... la mia era una piccola provocazione ... per farti rendere conto che stai cercando di fare qualcosa che, come ti ha ben spiegato migliorabile, non devi "reinventarti" perché è chiara.

    Se proprio ti interessa farlo, implementa gli algoritmi noti, non tentare di inventare robe diverse e comunque sbagliate.
  • Re: Algoritmo numeri primi

    Allora, innanzitutto calmiamoci; non ho nè offeso nè provocato. probabilmente c'è stato un fraintendimento: so benissimo cos'è un numero primo: come dice il nome è un numero già ridotto ai minimi termini, pertanto divisibile solo per se stesso(tralasciando il numero 1).
    i miei commenti volevano solo far intendere che:
    fare una serie di if innestati è troppo lungo: if (n % 2 == 0) || (n % 3 == 0).... e non credo vada bene; per questo cercavo qualcosa che fosse più conciso e, a differenza del crivello di eratostene, qualcosa che non si limitasse ad un intervallo di numeri. il test di primalità è, ovviamente, proprio ciò che cercavo, sebbene mi risulta difficile tradurre il linguaggio parlato matematico in istruzioni java(ahimè a differenza di altre persone sono ragazzo e ancora alle prime armi). vi ringrazio per i consigli e, sperando non vi offendiate, ve ne do uno anch'io: chi cerca di imparare non andrebbe preso in giro o provocato bensì spronato con le buone e invogliato ad imparare perchè la mia ignoranza è un peso per tutti ma più di tutti per me. Ripeto non voglio offendere nè provocare, grazie ancora
  • Re: Algoritmo numeri primi

    @ fausto94:

    non ci sei ancora !!!

    un numero primo non e' un numero ridotto ai minimi termini!

    Sono le frazioni ad essere ridotte ai minimi termini !!!
  • Re: Algoritmo numeri primi

    Mi era sembrato scontato ma a quanto pare no: numero ridotto ai minimi termini rimanendo nel campo dei numeri naturali. inoltre non ho detto di non conoscere le iterazioni, anzi penso di conoscere decentemente la definizione di ciclo, la mia difficoltà e se vogliamo metterla così anche scusante, è tradurre il linguaggio parlato in istruzioni java, sebbene penso sia problema di molti. non credo di essere pesantemente ignorante del java: ho fatto abbastanza programmi che, sebbene basilari, sono comunque segno di conoscenze(ancora MOLTO limitate). Penso che saper programmare un bancomat, un programma che trova le dimensioni di un rettangolo nel piano cartesiano e altri programmi simili senza soluzioni e solo con un mese e mezzo di studio significhi che, seppur molto limitate le mie conoscenze, non sono totalmente ignorante. ora stiamo un po divagando tra questioni di retorica et similia. io avevo chiesto una cosa(algoritmo, meglio ancora, se possibile, in pseudocodice) e mi è stata gentilmente data una pagina di wikipedia che non conoscevo(test di primalità). Ho letto la pagina che mi hai passato e ho detto che avevo ancora qualche dubbio: come è possibile implementare ciò che dice il test in java? credo di aver trovato da solo il modo quindi problema risolto. io ho ammesso la mia ignoranza, ma non ho ammesso di essere totalmente ignorante e scostumato: non ho chiesto soluzioni pronte e mi sono informato prima di postare, non ho trovato ciò che cercavo quindi ho scritto qui. Ho già comprato dei libri, ma siccome assegnano esercizi senza dare soluzioni devo arrangiarmi parecchio. Purtroppo non sono uno di quei ragazzi cui fai riferimento, dovrei sentirmi in colpa perchè non sono nato come loro? d'altronde se lo fossi non sarei qui(come nemmeno gli altri utenti). Mi spiace che si sia creata questa piccola divergenza, devo fare maggiore attenzione alle mie domande e risposte e pensare maggiormente ai libri.
  • Re: Algoritmo numeri primi

    
    public boolean isPrime(int numero){
    for(int i=2; i<numero/2; i++)
                      if(numero%i==0)return false;
    return true;
    }
    
    questo è il codice base, modificalo inserendo i consigli che ti hanno dato prima di me, e quelli che leggi(Cmq sia si tratta di un problema molto complesso, le euristiche più efficienti(sai cosa è una euristica??) sono di scoperta relativamente recente).
  • Re: Algoritmo numeri primi

    psp300xxx ha scritto:


    
    public boolean isPrime(int numero){
    for(int i=2; i<numero/2; i++)
                      if(numero%i==0)return false;
    return true;
    }
    
    questo è il codice base, modificalo inserendo i consigli che ti hanno dato prima di me, e quelli che leggi(Cmq sia si tratta di un problema molto complesso, le euristiche più efficienti(sai cosa è una euristica??) sono di scoperta relativamente recente).
    grazie mille; sisi conosco il termine euristica. domani mi ci metto a mente lucida
Devi accedere o registrarti per scrivere nel forum
14 risposte