Codice python per trovare tutti i divisori di un numero intero

Segue la nostra serie di post di programmazione in python in cui risolviamo problemi matematici con l’ausilio dell’interprete python. Se sei interessato ad altri problemi matematici risolti con python, prova a dare una occhiata ai nostri precedenti post. In questo post risolveremo un problema molto comune per i programmatori, ovvero quello di determinare tutti i divisori di un numero intero dato. Oltre ad avere importanza matematica, questo problema trova spesso applicazione in problemi puramente informatici, specialmente in ambito crittografico.

Per determinare tutti i divisori di un numero intero dato \(N\), seguiremo un approccio brute force (tradotto, di “forza bruta”), ovvero controlleremo, per ognuno dei numeri minori \(N\), se esso soddisfa la proprietà di divisore. Partiremo dunque, come di consueto, dalle definizioni matematiche necessarie per poter risolvere il problema.

Che cos’è un divisore? Come si verifica se un numero è divisore di un altro numero?

Prima di implementarlo bisogna conoscerlo. Questo mantra è senz’altro vero. Potrai essere un programmatore eccellente, ma se ti mancheranno le capacità logiche, deduttive e matematiche, non potrai portare a termine compiti come quello di scrivere un programma per determinare tutti i divisori di un numero dato.

La definizione di divisore è piuttosto semplice e si applica a tutti i numeri interi. Eccola:

Un intero \(b\) è un divisore di un intero \(a\) se esiste un intero \(c\) tale che \(a = b \cdot c\)

DEFINIZIONE DI DIVISORE (Fonte: Wikipedia)

Possiamo però dare una definizione più “operativa”, che ci fornisca allo stesso tempo uno strumento di verifica immediato (e che utilizzeremo nel nostro codice python).

Dati due interi \(a\) e \(b\), con \(b \ne 0\), si ha che \(b\) è un divisore di \(a\) se il resto della divisione \(a : b\) è nullo.

DEFINIZIONE “OPERATIVA” DI DIVISORE (Fonte: Wikipedia)

Programma per trovare tutti i divisori di un numero intero in linguaggio python

Asesso che conosciamo la definizione di divisore, è facile scrivere un programma che ci permetterà di individuare tutti i divisori di un numero intero in poco tempo. Come al solito, ti consiglio di leggere tutta la spiegazione per comprendere ogni linea di codice ed i passaggi fondamentali. Puoi comunque saltare in fondo all’articolo per scaricare il codice completo.

Passo 1: Leggere un numero intero da tastiera in python

Per leggere un numero intero da tastiera, possiamo utilizzare il metodo input() predefinito di python. Per spiegazioni più approfondite su questo metodo, leggi l’articolo nel link precedente.

numero = int(input("Inserisci un numero intero maggiore di zero e premi INVIO: "))

Con la riga di codice sopra, l’interprete python leggerà un input dalla tastiera e lo convertirà in intero con il metodo int(). Il valore intero viene memorizzato nella variabile “numero”, che contiene dunque il numero intero di cui desideriamo individuare tutti i divisori.

Nota bene: da buon programmatore, dovresti implementare nel tuo codice alcune linee di controllo per verificare che, effettivamente, l’utente abbia inserito un numero maggiore di zero. Per motivi di semplicità omettiamo questo controllo nel presente codice.

Passo 2: Trovare tutti i divisori di un numeri intero in python

Scegliamo di scrivere un programma python che stampi a video tutti i divisori del numero intero inserito dall’utente. Alternativamente, i numeri potevano essere memorizzati in una lista per successivi utilizzi. Se ti interessano questa o altre varianti del programma, prova a lasciare un commento qui sotto e ti fornirò delle spiegazioni alternative. Proseguiamo dunque con quanto ci eravamo preposti, ovvero stampare a video tutti i divisori del “numero” letto da tastiera. Di seguito il codice python necessario.

for i in range(2, numero+1):
    if numero % i == 0:
        print(i)

Siamo forse andati troppo dritti al sodo. Fermiamoci ad analizzare tutte le operazioni utilizzate nelle tre linee di codice appena viste. Per prima cosa, creiamo un ciclo for che ci permette di scorrere tutti i numeri cha vanno da 1 a numero. Il metodo range(1, numero+1) ritorna una lista di numero che comincia da 1 ed si ferma esattamente prima di numero+1.

Il costrutto if è utilizzato per applicare il controllo sul numero. Sappiamo infatti dalla definizione operativa data sopra che, se la divisione restituisce resto nullo, allora “i” è un divisore di “numero”. L’operazione %, infatti, non rappresenta la percentuale bensì è una operazione di python che restituisce esattamente il resto della divisione intera. La condizione dell’if serve dunque a verificare che il resto sia esattamente zero.

L’ultima riga semplicemente visualizza il numero “i” sullo schermo, in caso di controllo con esito positivo.

Codice completo in python per leggere un numero intero e stampare a video tutti i suoi divisori

Come vi avevo promesso, ecco qui il codice completo che risolve il problema illustrato all’inizio. Esso svolge essenzialmente due operazioni fondamentali. La prima è leggere il numero da tastiera. La seconda, più complessa, serve a scorrere tutti i numeri interi da 1 a quel numero per stampare a video tutti i divisori.

numero = int(input("Inserisci un numero intero maggiore di zero e premi INVIO: "))

for i in range(2, numero+1):
    if numero % i == 0:
        print(i)

Spero che questo post ti sia stato utile. Puoi scaricare direttamente il file .py cliccando qui. Trovi il codice per trovare tutti i divisori di un numero intero dato anche sulla nostra repository github. Per altri dubbi o commenti sul codice mostrato in questo articolo, lascia un commento qui sotto o scrivimi su facebook.