Verificare se un numero è primo o meno

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Actarus5
Prode Principiante
Messaggi: 220
Iscrizione: mercoledì 3 luglio 2013, 17:15
Desktop: Mate
Distribuzione: Fedora
Località: Abutalabashuneba

Verificare se un numero è primo o meno

Messaggio da Actarus5 »

Riprendo la discussione cominciata qui per non continuare ad andare OT di là, comunque per come ho inteso io la richiesta immagino si aspettassero una funzione che prende in ingresso un numero e restituisce true se primo, false altrimenti, quindi non credo che un crivello sia adatto, io avrei scritto qualcosa del genere, a meno di usare una lookup table per i primi n primi:

Codice: Seleziona tutto

bool is_prime(uint64_t n)
{
    if(n <= 3)
    {
        return n > 1;
    }

    if((n % 2) == 0 || (n % 3) == 0)
    {
        return false;
    }

    for(uint64_t i = 5; (i * i) <= n; i += 6)
    {
        if((n % i) == 0 || (n % (i + 2)) == 0)
        {
            return false;
        }
    }

    return true;
}
Ovviamente non è un algoritmo di mia invenzione, però è molto più veloce del metodo naive che controlla tutti i divisori sino alla radice quadrata di n, lo spiegone si trova ad esempio qui.
Ultima modifica di Actarus5 il giovedì 5 maggio 2022, 5:40, modificato 1 volta in totale.
"An extremely helpful console message: “SPANK! SPANK! SPANK! Naughty programmer!”. Really, I’m not joking about that one."
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Verificare se un numero è primo o meno

Messaggio da crap0101 »

ehhh.., di là a un certo punto si è cominciato a parlare di crivelli :-D certo non sono l'ideale per testare se uno specifico numero è primo (come vedi anche nei codici postati, tante robe sono ignorate)... poi si è divagato nella divagazione :-D ed era interessante vedere come modificarlo per renderlo più efficace (almeno, per per come l'ho vista io).
Ho aggiornato il gist mettendoci anche questa versione (quella in python, ovviamente).

Anche gli altri metodi che elenca sono interessanti, seppur non tutti (benchè veloci) danno la sicurezza di aver effettivamente beccato un numero primo :-)

...può essere interessante verificare quale dei due metodi (e fino a che punto) è più rapido nel calcolarli tutti fino a un certo limite
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Verificare se un numero è primo o meno

Messaggio da gila75 »

Si, il crivello ho sbagliato io. Non e' adatto a testare un singolo numero, mea culpa
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: DoctorStrange, TommyB1992 e 17 ospiti