Python: Trovare i numeri uguali alla somma dei cubi delle loro cifre

Cerca nel sito

Altri risultati..

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors


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)
Output:
Scrivi un numero: 678
[8, 7, 6]
Per esempio, l’istruzione lista_cifre(1234567890) restituisce la lista [0, 9, 8, 7, 6, 5, 4, 3, 2, 1].
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:

Ti potrebbe interessare anche:  Python: esercizio. Determinare se un numero è perfetto.
Scrivi un numero: 1234
100
Per esempio, l’istruzione somma_cubi_cifre(1234) restituisce 100.

La seguente funzione trova tutti i numeri interi compresi nell’intervallo [a, b] che sono uguali alla somma dei cubi delle loro cifre:
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)
Output:
DA: 100
A: 999
[153, 370, 371, 407]
L’istruzione trova_numeri_uguali_somma_cubi_cifre(100, 999)  dà come risultato la lista seguente:
[153, 370, 371, 407].

[elementor-template id=”12586″]

 

 

(115)