Numeri uguali alla somma dei cubi delle loro cifre
Un classico esercizio che viene spesso assegnato agli studenti alle prese con l’apprendimento di un linguaggio di programmazione consiste nello scrivere il codice necessario per risolvere il seguente problema:
Determinare tutti i numeri naturali di tre cifre che sono uguali alla somma
dei cubi delle loro cifre.
Indicheremo con S(n) la somma dei cubi delle cifre di n:
Sapendo che un numero naturale n composto da m+ 1 cifre può essere rappresentato nella forma:
(vale m = ⌊log n⌋, dove con ⌊x⌋ intendiamo il più grande intero non maggiore di x e con log il logaritmo nella base 10).
Il problema consiste nel risolvere l’equazione diofantea:
S(n) = n, 100 ≤ n ≤ 999.
Per un principiante, le difficoltà maggiori nella risoluzione dell’esercizio consistono nel determinare le singole cifre di un numero naturale e nel costruire l’iterazione che ne somma i cubi delle sue cifre.
In Python possiamo ottenere la lista delle singole cifre di un numero intero definendo una funzione
lista_cifre(n).
Essa accetta come argomento un numero naturale n e restituisce la lista delle cifre di n, dalla meno significativa alla più
significativa. Ecco il codice:
def lista_cifre(n):
ultima_cifra = int( n /10)
lista = [] # lista vuota
lista.append(n % 10) # aggiunta di un elemento alla lista
while ultima_cifra != 0:
lista.append(ultima_cifra % 10)
ultima_cifra = ultima_cifra // 10
return lista
n = int(input('Scrivi un numero: '))
lista_cifre(n)
[8, 7, 6]
Per calcolare la somma dei cubi delle cifre del numero naturale n possiamo utilizzare la funzione lista_cifre(n) definita sopra e costruire la funzione seguente:
def lista_cifre(n):
ultima_cifra = int( n /10)
lista = [] # lista vuota
lista.append(n % 10) # aggiunta di un elemento alla lista
while ultima_cifra != 0:
lista.append(ultima_cifra % 10)
ultima_cifra = ultima_cifra // 10
return lista
def somma_cubi_cifre(n):
lista = lista_cifre(n)
somma = 0
i = 0
while i < len(lista): # len = lunghezza
somma = somma + lista[i]**3
i = i + 1
return somma
n = int(input('Scrivi un numero: '))
somma_cubi_cifre(n)
Output:
100
somma_cubi_cifre(1234)
restituisce 100.def lista_cifre(n):
ultima_cifra = int( n /10)
lista = [] # lista vuota
lista.append(n % 10) # aggiunta di un elemento alla lista
while ultima_cifra != 0:
lista.append(ultima_cifra % 10)
ultima_cifra = ultima_cifra // 10
return lista
def somma_cubi_cifre(n):
lista = lista_cifre(n)
somma = 0
i = 0
while i < len(lista): # len = lunghezza
somma = somma + lista[i]**3
i = i + 1
return somma
def trova_numeri_uguali_somma_cubi_cifre(a, b):
lista = []
for i in range(a, b + 1):
if i == somma_cubi_cifre(i):
lista.append(i)
return lista
a = int(input('DA: '))
b = int(input('A: '))
trova_numeri_uguali_somma_cubi_cifre(a, b)
A: 999
[153, 370, 371, 407]
trova_numeri_uguali_somma_cubi_cifre(100, 999)
dà come risultato la lista seguente:[153, 370, 371, 407].
[elementor-template id=”12586″]
(115)