Calcolo dei numeri primi [Python]

Forum di discussioni su Python
Rispondi
FrancyDotNet
Moderatore
Moderatore
Messaggi: 969
Iscritto il: 01/05/2024, 23:26

Calcolo dei numeri primi [Python]

Messaggio da FrancyDotNet »

I numeri primi sono numeri interi positivi maggiori di 1 che sono divisibili solo per 1 e per se stessi. Quindi, un modo semplice per trovare i numeri primi è quello di verificare tutti i numeri interi positivi maggiori di 1 e verificare se sono divisibili solo per 1 e per se stessi.

Un modo più efficiente per trovare i numeri primi è quello di utilizzare l'algoritmo del crivello di Eratostene. L'idea di questo algoritmo è quella di eliminare tutti i multipli di ogni numero primo trovato, in modo che alla fine rimangano solo i numeri primi. Questo metodo riduce significativamente il tempo necessario per trovare i numeri primi.

Ecco come funziona l'algoritmo del crivello di Eratostene in pseudocodice:
  1. Creare una lista di numeri interi da 2 a un valore massimo specificato.
  2. Iniziare con il primo numero primo, che è 2.
  3. Eliminare tutti i multipli di 2 dalla lista.
  4. Passare al successivo numero primo non ancora eliminato nella lista e ripetere il passo 3.
  5. Continuare fino a quando tutti i numeri primi nella lista sono stati considerati.
Ecco un esempio di come implementare l'algoritmo del crivello di Eratostene in Python:

Codice: Seleziona tutto

def crivello_eratostene(n):
    # creiamo una lista di numeri da 2 a n
    nums = list(range(2, n+1))

    # iniziamo a cercare i multipli dei numeri nella lista
    for i in nums:
        # se il numero è stato già segnato come non primo, lo ignoriamo
        if i == None:
            continue
        # segniamo tutti i multipli di i come non primi
        for j in range(i*2, n+1, i):
            nums[j-2] = None
    # ritorniamo solo i numeri che non sono stati segnati come non primi
    return [x for x in nums if x is not None]
In questo esempio, la funzione eratostene_sieve prende un intero n come argomento e restituisce una lista di tutti i numeri primi da 2 a n.

La funzione crea una lista di n numeri interi e inizializza tutti i numeri come numeri primi. Poi, inizia a esaminare i numeri nella lista, iniziando con 2. Se il numero è ancora segnato come primo, viene aggiunto alla lista dei numeri primi. Quindi, tutti i multipli del numero sono contrassegnati come non primi nella lista. La funzione continua a esaminare i numeri nella lista in ordine crescente, saltando quelli già contrassegnati come non primi, finché tutti i numeri primi sono stati trovati.

Ecco un esempio di come usare la funzione eratostene_sieve per trovare i numeri primi fino a 100:

Codice: Seleziona tutto

num_primi= crivello_eratostene(100)
print(num_primi)
Questo codice stampa [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97], che sono tutti i numeri primi da 2 a 100.
FrancyDotNet
Moderatore
Moderatore
Messaggi: 969
Iscritto il: 01/05/2024, 23:26

Re: Calcolo dei numeri primi [Python]

Messaggio da FrancyDotNet »

:msg_noob: Certo, ecco una forma semplice e ben leggibile del crivello di Eratostene:
  1. Scrivi tutti i numeri naturali da 2 fino al numero massimo che vuoi esaminare.
  2. Seleziona il primo numero della lista (2) e cerchia tutti i suoi multipli sulla lista.
  3. Seleziona il prossimo numero non cerchiato della lista (che sarà 3) e cerchia tutti i suoi multipli sulla lista.
  4. Continua in questo modo fino a che non hai selezionato tutti i numeri non cerchiati sulla lista.
  5. I numeri non cerchiati sulla lista sono i numeri primi.
Ad esempio, per trovare tutti i numeri primi fino a 30, la lista dei numeri sarebbe:
  • 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
Iniziando con il primo numero (2), si eliminano tutti i suoi multipli sulla lista, quindi si ottiene:
  • 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
Il numero successivo è 3, quindi si eliminano tutti i suoi multipli sulla lista, quindi si ottiene:
  • 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
I numeri esclusi dalla lista sono quindi i numeri primi: 2, 3, 5, 7, 11, 13, 17, 19, 23 e 29.


:good: Ecco una tabella dei numeri primi da 1 a 50, più colorata e bella del mio esempio, che spero possa rendere meglio l'idea del processo di semplificazione per ottenere i numeri primi.

Immagine
Rispondi

Torna a “Python”