Come verificare se un numero è primo
Oggi senza usare alcuna macro nidificheremo diverse funzioni per verificare se un numero è primo.
La formula che vedete qui sotto verifica se il valore contenuto nella cella A1 è un numero primo o meno. Non preoccupatevi, insieme vedremo cosa fa passo dopo passo.
=SE(O(A1=2;A1=3);”Primo”;SE(PRODOTTO(SE(RESTO(A1;RIF.RIGA(INDIRETTO(“2:”&INT(RADQ(A1)))))
=0;0;1))=1;”Primo”;”Non Primo”)
Premetto che la radice quadrata viene utilizzata nella ricerca di numeri primi perché ci permette di ridurre il numero di test da effettuare per determinare se un numero è primo o meno.
In particolare, per verificare se il numero contenuto nella cella A1 sia primo, dobbiamo testare che non sia divisibile per tutti i numeri interi positivi compresi tra 2 e la radice quadrata di A1.
Partiamo col capire cosa fa la parte centrale della formula:
=RESTO(A1;RIF.RIGA(INDIRETTO(“2:”&INT(RADQ(A1)))))
Questa parte restituisce il resto della divisione tra dividendo, che è il valore contenuto nella cella A1 ed i divisori compresi tra 2 e la radice quadrata del valore della cella A1.
Avete capito bene, ho detto divisori, e non divisore, con questa formula saremo in grado di gestire più valori perché si tratta di una formula matriciale, ma andiamo un po’ più nello specifico:
Useremo la funzione RIF.RIGA in un modo un po’ atipico, perché ci servirà per generare un elenco di numeri da 2 a RADQ(A1).
La funzione INDIRETTO converte un testo in un riferimento effettivo e viene utilizzata per creare un riferimento dinamico che possa essere gestito dalla funzione RIF.RIGA
Con INT(RADQ(A1)) non facciamo altro arrotondare il valore della radice quadrata di A1 al numero intero inferiore più vicino.
Copiamola nella cella D1
Posizionandoci sulla funzione RESTO, possiamo vedere la composizione dei vari argomenti
Quando scriviamo una formula abbastanza complessa, tramite la pressione del tasto F9 possiamo verificare i risultati parziali
Questo cosa significa? Che se volessimo verificare se il numero 29 è primo, dobbiamo testare se è divisibile per tutti i numeri interi positivi compresi tra 2 e la radice quadrata di 29, che è circa 5,39. Pertanto, dobbiamo testare solo i numeri 2, 3, 4 e 5.
Ma come possiamo arrivare alla conclusione che 29 è primo? Perché non è divisibile per nessuno di questi numeri
Tramite la funzione SE assegneremo il valore 0 nel caso in cui la funzione RESTO restituisca 0, e questo significa che è stato trovato un divisore, ed il valore 1 in tutti gli altri casi.
=SE(RESTO(A1;RIF.RIGA(INDIRETTO(“2:”&INT(RADQ(A1)))))=0;0;1)
Copiamo nuovamente questa parte di formula nella cella D1 e trasciniamola anche sotto.
Ma guardiamo la differenza dei risultati che otteniamo con il numero 29 ed il numero 30.
Con il numero 29 otteniamo 4 valori pari ad 1, quindi non è divisibile per i numeri 2,3,4 e 5.
Mentre con numero 30 otteniamo 0,0,1,0 questo significa che il numero 30 è divisibile per 2, per 3, e per 5
In seguito con la funzione PRODOTTO, andremo a moltiplicare questi “zeri” ed “uno” e capite bene che basterà un singolo 0, per dare come risultato finale 0, che significa che il numero non è primo, mentre solo quando troveremo una combinazione di soli “uno” significherà che il numero è primo
Copiamo nuovamente questa parte di formula nella cella D1 e trasciniamola anche sotto
=PRODOTTO(SE(RESTO(A2;RIF.RIGA(INDIRETTO(“2:”&INT(RADQ(A2)))))=0;0;1))
Nidificando la funzione SE, potremo far scrivere nel caso in cui il prodotto della matrice è uguale a 1, “Primo”, altrimenti se uguale a 0 “Non Primo”.
Copiamo nuovamente questa parte di formula nella cella D1 e trasciniamola anche sotto
=SE(PRODOTTO(SE(RESTO(A1;RIF.RIGA(INDIRETTO(“2:”&INT(RADQ(A1)))))=0;0;1))=1;”Primo”;”Non Primo”)
La parte più difficile ce la siamo lasciata alle spalle, ora la formula richiede solo un piccolo perfezionamento, indicando che i numeri 2 e 3 sono primi, questo lo faremo con l’uso combinato della funzione SE ed O scrivendo:
Copiamo l’intera formula nella cella D1 e trasciniamola anche sotto
=SE(O(A1=2;A1=3);”Primo”;SE(PRODOTTO(SE(RESTO(A1;RIF.RIGA(INDIRETTO(“2:”&INT(RADQ(A1)))))
=0;0;1))=1;”Primo”;”Non Primo”))
Sebbene i risultati per questi due numeri siano corretti, una cosa fondamentale per far funzionare la formula senza errori, dovremo premere contemporaneamente i tasti CTRL+MAIUSC+INVIO, perché si tratta di una formula matriciale.
Copiamo la formula nel foglio a fianco e trasciniamone il contenuto nelle celle sottostanti, così facendo potremo verificare quali numeri sono primi da 1 a 1000.
Ricapitolando, questa formula verifica se un numero è primo o meno controllando se ha un resto uguale a zero quando viene diviso per tutti i numeri compresi tra 2 e la radice quadrata del numero. Se il numero ha almeno un resto uguale a zero, non è primo e la formula restituirà “Non Primo”, altrimenti, se non ha nessun resto uguale a zero, il numero è primo e la formula restituirà “Primo”.
Nel video qui sotto trovate tutti i passaggi appena illustrati, buona visione.
Potrebbe anche interessarti come costruire una macro per generare i numeri primi, clicca qui per leggere l’articolo dedicato.
https://youtu.be/pTZYQ7dDkW0