QUIZ: Il deposito di Paperon de' Paperoni
AGGIORNAMENTO 4-2-2017 a fine articolo
E' con grande piacere che il Club dei Maghi accoglie tra le sue fila l'amico Mauritius, già ben conosciuto nel Circolo come scrittore di racconti, riflessioni e poesie. E' per questo, cari lettori, che noterete un certo cambiamento di stile nella stesura del testo dei quiz. Ma non preoccupatevi, gli incorruttibili matematici circolari lo terranno sotto stretta sorveglianza (poveri loro...) e non permetteranno che si prenda licenze poetiche sulla correttezza formale dei quesiti proposti! Perché qui si ride e ci si diverte, ma guai a scherzare sui quiz!!
E' giunta ieri in redazione questa curiosa lettera. Ve la proponiamo in forma integrale.
Gentile Club dei Maghi,
vi ringrazio che leggete questa pregiata mia, che vi scrivo essendo un vostro grande ammiratore...
Seguo con grande passione i vostri quiz, anche se non capisco quasi niente, né di quello che è scritto nei quiz né (ancora meno) di quello che scrivono nei commenti quei disperati.
Comunque, per fare un esempio, mi è piaciuta la faccenda delle lampadine e anche quella dei cubi, che però era un po' difficile, tanto che a un certo punto mi sono Fermat.
Mi chiamo Oreste Pautasso, nativo di Cuneo da 64 anni. Fino a poco tempo fa la mia professione è stata di raccoglitore di marroni (di Cuneo). Ma ora che l'età avanza, anche in questo ridente borgo, con gli autunni sempre più umidi e gli inverni sempre più freddi, il rischio dei reumatismi si fa sempre più grande e allora…
Allora ho trovato un posto fisso in una organizzazione di matti che si chiama Circolo Archeofili di Cuneo, loro dicono CAC. In questo posto studiano cose del passato e fanno un sacco di fotocopie e anche di scannamenti con il computer. Mi hanno insegnato tutto su come fare le fotocopie e gli scannamenti. In cambio mi pagano tutti i mesi, al 27, puntuali come la caduta dei marroni quando viene il momento.
Bene, veniamo agli antefatti. Ieri sera ho fatto la bagna cauda, una meraviglia. Certo che è un po' pesante, neh... Insomma durante la notte, forse per colpa della bagna, mi sono sognato di mio nonno, che si chiamava Oreste anche lui.
Mi è apparso in mezzo a una nebbiolina grigia e mi ha detto “ Ciao bocia! Cosa credi di combinare a lasciar perdere i marroni? Pensi che diventerai ricco a fare le fotocopie?”
Lì per lì mi è venuto da dirgli “Sai nonno, mi danno lo stipendio tutti i mesi al 27...”
“E tu fai bene a basarti sul 27, però...”
“ Però... nonno?”
“Però, bocia, se tu riuscissi ad azzeccare, un terno, meglio ancora una quaterna di numeri giusti
allora si che avresti trovato la soluzione al tuo problema.”
“Dici che sarei a posto per sempre?”
“Eccome! Dovresti farti fare un deposito come quello di Paperon de' Paperoni, un grande cubo: sarebbe perfetto per metterci il risultato dell'operazione, perché nelle banche, al giorno d'oggi, lo sai bene...
“Va bene nonno, allora dimmi questa quaterna...”
Ma, proprio mentre l'antenato mi stava per svelare il mistero, mi sono svegliato come un farlòch!
Ho bisogno del vostro aiuto, Maghi, magari qualcuno dei lettori può avere una buona idea!!
Vi ho messo in carattere grassoccio tutte le parole che mio nonno ha detto con particolare enfasi, guardandomi fisso nelle pupille con quei suoi occhietti che sembravano due trivelle.
Ci ho pensato tutta la notte e credo che volesse dire più o meno questo:
Data la quantità
27x+ 27y + 27z + 27t
trovare una quaterna (x, y, z, t) di numeri interi positivi tali che la suddetta quantità sia un cubo perfetto, ossia un numero intero elevato al cubo
Devo dire che a me basterebbe trovare x,y,z,t e giocarmeli al lotto. Se vinco, magari possiamo dividere un po' il premio. Facciamo così: se riuscite a dividere il cubo del deposito in due cubi (tutti e due a forma di cubo), quello più piccolino lo lascio come ricompensa per chi ha dato i numeri. Mi sembra una cosa equa.
Vi saluto con grandiosi ossequi e riconoscenza
Oreste Pautasso
Aggiornamento (4-2-2017)
Inoltriamo una richiesta da parte di Oreste Pautasso...
Cari Maghi, ho chiesto al cognato Mattia, che è astronomo (ma io gli voglio bene lo stesso) se c'è speranza di trovare la quaterna. Lui ci ha pensato un po' e mi ha risposto : “ Oreste, i calcoli con i 90 numeri del lotto sono tantissimi, comincia a provare a cercare con diciamo.. i primi 9 numeri, per farti una idea. Se hai fortuna trovi il risultato. Certo, è difficile che in una quaterna si siano solo numeri così piccoli, però, per cominciare...”
Cosa mi consigliate, provo? Oreste Pautasso
Abbiamo ritenuto condivisibile il suggerimento del cognato Mattia. Provate con i soli numeri interi dal 1 a 9. Cioè, supponiamo che x, y, z, t possano assumere solo valori interi da 1 a 9. Trattandosi di quaterna, x, y, z, t per il lotto, essi devono inoltre essere tutti distinti tra loro. Deve cioè essere anche:
QUESTA è la soluzione
QUI trovate tutti i quiz del Club dei Maghi
13 commenti
Forza amici... dateci dentro!!!! Una bella quaterna al lotto non sarebbe male...
Il quiz è stato aggiornato. Ora dovrebbe risultare più agevole farsi due conti per poter poi dare una risposta.
Ma siete sicuri che ci sia una soluzione? Ho provato a "barare" con il seguente programma python3:
#!/usr/bin/python3
cubeList=[0]
def cubeRoot(x):
n=0
while True:
if len(cubeList)==n:
cubeList.append(n**3)
if cubeList[n]==x:
return n
elif cubeList[n]>x:
return None
n+=1
min=1
max=14
for x in range(min,max+1):
for y in range(x+1,max+1):
for z in range(y+1,max+1):
for t in range(z+1,max+1):
r=cubeRoot(27**x+27**y+27**z+27**t)
if r!=None:
print(x,y,z,t,r)
e non ho trovato una cippa. Notare che, passando da max=12 a max=14 i tempi di esecuzione si allungano un bel po', per cui non so se il mio PC reggerebbe un max=90 (le potenze diventano enormi, e la lista di cubi molto lunga).
Secondo me non c'è soluzione se TUTTI e quattro i numeri sono minori di 14.
Sbaglio qualcosa?
Scusate, ma nel messaggio precedente sono stati tagliati gli spazi iniziali in ogni riga, con il risultato che il programma, così come lo leggete, è ineseguibile (essendo l'indentazione necessaria, per python, per determinare inizio e fine dei cicli).
Non vedo altra strada che riproporlo così:
#!/usr/bin/python3
cubeList=[0]
def cubeRoot(x):
[tab]n=0
[tab]while True:
[tab][tab]if len(cubeList)==n:
[tab][tab][tab]cubeList.append(n**3)
[tab][tab]if cubeList[n]==x:
[tab][tab][tab]return n
[tab][tab]elif cubeList[n]>x:
[tab][tab][tab]return None
[tab][tab]n+=1
min=1
max=14
for x in range(min,max+1):
[tab]for y in range(x+1,max+1):
[tab][tab]for z in range(y+1,max+1):
[tab][tab][tab]for t in range(z+1,max+1):
[tab][tab][tab][tab]r=cubeRoot(27**x+27**y+27**z+27**t)
[tab][tab][tab][tab]if r!=None:
[tab][tab][tab][tab][tab]print(x,y,z,t,r)
(sostituire ogni [tab] con un carattere di tabulazione)
Caro Marco, intanto grazie per la tua partecipazione al quiz. Esso chiede di "trovare una quaterna (x,y,z,t) di numeri interi positivi tali che" etc . "Una tale quaterna non esiste" è una risposta pertinente, perché presuppone, come nel tuo caso, un ragionamento fatto prima di darla. Aspettiamo altre risposte.
Il mio piccolo contributo, ancora senza soluzione.
Il cubo cercato deve essere compreso tra 100 e 1800. I cubi di numeri interi all'interno di questo intervallo sono: 125, 216, 343, 512, 729 1000, 1331, 1728.
La cosa più vicina ad una soluzione da me trovata : 3\3+ 4\3+8\3+9\3 = 1332
Grazie Gimar. 1332 è il risultato di
Il quiz, però, chiede di trovare una quaterna di esponenti (interi positivi e tutti diversi) a cui elevare la base comune, che è 27.
Scusa ho letto fischi per fiaschi...
Riproviamo (Spero di aver letto con attenzione!)
Prima quaterna: x=1; y=2; z=3; t=4 si ottiene 27+ 729+19683=20439; 27\4= 531441
Seconda quaterna: x=2; y=3; z=4; t=5 si ottiene 729+19683+531441=551853; 27\5=14.348.907
La differenza diverge, potrei andare avanti ma si vede che non c'è nessuna possibilità di avere la quaterna di numeri richiesti. Con numeri non in sequenza la differenza aumenta.
Supponiamo che sia
27^x+27^y+27^z+27^t=n^3,
con x, y, z, t e n interi positivi e x<y<z<t.
Sia y=x+y', z=x+z',t=x+t' (dove x', y', z'>0). Dunque
27^x+27^y+27^z+27^t=27^x+27^(x+y')+27^(x+z')+27^(x+t')=27^x+27^x*27^y'+27^x*27^z'+27^x*27^t'=27^x*(1+27^y'+27^z'+27^t').
Quindi 27^x+27^y+27^z+27^t=n^3 diventa 27^x*(1+27^y'+27^z'+27^t')=n^3, da cui, dividendo entrambi i membri per 27^x, si ottiene
1+27^y'+27^z'+27^t'=(n^3)/(27^x)=(n^3)/((3^3)^x)=(n^3)/(3^(3x))=(n^3)/(3^x)^3)=(n/3^x)^3.
Essendo 1+27^y'+27^z'+27^t'=(n/3^x)^3, con 1+27^y'+27^z'+27^t' intero positivo, anche (n/3^x)^3 deve essere intero positivo. Quindi n deve essere divisibile per 3^x.
Sia n'=n/3^x (con n' intero positivo). Otteniamo
1+27^y'+27^z'+27^t'=n'^3
Quindi il problema è ricondotto a quello di trovare 3 numeri interi x', y' e z' tali che 1+27^y'+27^z'+27^t' sia un cubo.
Se una soluzione esiste, n' deve essere pari (poiché 1+27^y'+27^z'+27^t' è la somma tra 4 numeri dispari), e non divisibile per 3 (perché 27^y'+27^z'+27^t' è divisibile per 3, e quindi aggiungendo 1 non lo è più).
A naso la vedo dura, ma al momento non saprei andare avanti. So solo che il nuovo programma in python (che cerca y', z' e t' nell'ipotesi che n' sia pari e non divisibile per 3) non ha trovato nessuna soluzione, almeno per y', z', t'<19:
#!/usr/bin/python3
cubeList=[]
def cubeRoot(x):
[tab]n=int(x**(1/3))
[tab]while n**3>x:
[tab][tab]n-=1
[tab]n=int(n/2)
[tab]nSkipped=int((n+2)/3)
[tab]while True:
[tab][tab]if n%3==0:
[tab][tab][tab]nSkipped+=1
[tab][tab]else:
[tab][tab][tab]while len(cubeList)<=n-nSkipped:
[tab][tab][tab][tab]cubeList.append((2*n)**3)
[tab][tab][tab]if cubeList[n-nSkipped]==x:
[tab][tab][tab][tab]return 2*n
[tab][tab][tab]elif cubeList[n-nSkipped]>x:
[tab][tab][tab][tab]return None
[tab][tab]n+=1
min=1
max=18
for y in range(min,max+1):
[tab]for z in range(y+1,max+1):
[tab][tab]for t in range(z+1,max+1):
[tab][tab][tab]r=cubeRoot(1+27**y+27**z+27**t)
[tab][tab][tab]if r!=None:
[tab][tab][tab][tab]print(y,z,t,r)
(sostituire ogni [tab] con il carattere di tabulazione)
Marco, mi piace molto il tuo approccio al problema. Purtroppo non tutti conoscono il python come linguaggio specifico; quel che conta è l'algoritmo che stai usando.
Riusciresti a spiegare l'algoritmo con un diagramma di flusso inserendo un immagine? Oppure anche a parole in qualche modo descrivendo la sequenza delle operazioni?
grazie
Alcune premesse:
#!/usr/bin/python3
cubeList=[]
#lista dei cubi dei numeri pari e non divisibili per 3
#ovvero 8=2^3, 64=4^3, 512=8^3, 1000=10^3, 2744=14^3...
#la lista verrà generata eseguendo la funzione cubeRoot(x) che segue:
#all'inizio la lista è vuota
def cubeRoot(x):
#la faccio breve: cubeRoot(x)
#restituisce la radice cubica di x se essa è un numero intero,
#pari e non divisibile per 3. Non restituisce nulla in caso contrario
#Chi non è interessato ai dettagli può saltare a "qui inizia il corpo del programma"
[tab]n=int(x**(1/3))
#qui n diventa la parte intera della radice cubica di x:
#ma, a causa dell'approssimazione introdotta utilizzando
#la potenza con esponente frazionario, che restituisce un numero di tipo float
#(numero con la virgola), il risultato potrebbe non essere esatto.
#Nota: in python "**" vuol dire "elevato a"
[tab]while n**3>x:
[tab][tab]n-=1
#diminuisco n se, a causa dell'approssimazione, ho ottenuto
#erroneamente un valore maggiore della radice cubica
[tab]n=int(n/2)
#senza entrare troppo nei dettagli, calcolo n tenendo presente che
#inserisco nella lista "cubeList" solo i cubi dei numeri pari...
[tab]nSkipped=int((n+2)/3)
#...e calcolo il numero di cubi saltati in quanto (anche se pari) divisibili per 3
[tab]while True:
#da qui ripeto il ciclo finchè non eseguo uno dei due return successivi
[tab][tab]if n%3==0:
#se n è divisibile per 3, lo salto (non mi interessa), e segno un altro numero saltato
[tab][tab][tab]nSkipped+=1
[tab][tab]else:
#altrimenti
[tab][tab][tab]while len(cubeList)<=n-nSkipped:
[tab][tab][tab][tab]n2=len(cubeList)+1
[tab][tab][tab][tab]nSkipped2=int(len(cubeList)/2)
[tab][tab][tab][tab]cubeList.append((2*(n2+nSkipped2))**3)
#se la lista dei cubi è troppo corta, aggiungo cubi finché serve per il controllo successivo
[tab][tab][tab]if cubeList[n-nSkipped]==x:
# Se trovo il cubo nella lista, ho trovato la radice cubica, e la restituisco;
[tab][tab][tab][tab]return 2*n
[tab][tab][tab]elif cubeList[n-nSkipped]>x:
#altrimenti, se il cubo nella lista è maggiore di x,
#x non è il cubo di un numero pari e non divisibile per 3, e restituisco None (nulla)
[tab][tab][tab][tab]return None
[tab][tab]n+=1
#incremento n e ripeto il ciclo finché non eseguo uno dei 2 return
#fine della funzione che calcola la radice cubica
#qui inizia il corpo del programma
min=1
max=18
#il minimo è 1, e il massimo è 18
for y in range(min,max+1):
#per ogni y compreso tra 1 e 18 compresi (tra min compreso e max+1 escluso)
[tab]for z in range(y+1,max+1):
#per ogni z compreso tra y+1 e 18 compresi (tra y+1 compreso e max+1 escluso)
[tab][tab]for t in range(z+1,max+1):
#per ogni t compreso tra z+1 e 18 compresi (tra z+1 compreso e max+1 escluso)
[tab][tab][tab]r=cubeRoot(1+27**y+27**z+27**t)
#calcolo la radice cubica di 1+27 elevato alla y+27 elevato alla z+27* elevato alla t
[tab][tab][tab]if r!=None:
#se la trovo, stampo la soluzione
[tab][tab][tab][tab]print(y,z,t,r)
#ma, eseguendo il programma, non viene stampato nulla
#Quindi non sembra esserci soluzione con y, z e t compresi tra 1 e 18
ti ringrazio per aver esplicitato la tua soluzione, Marco.
Dal punto di vista computazionale (che non esclude una soluzione analitica valida per un numero infinito di esponenti) e trattandosi in fin dei conti di un numero finito di casi,direi che in linea di principio il tuo discorso va bene. In fin dei conti anche gli algoritmi fanno parte della matematica, basti pensare alla moltiplicazione o all'algoritmo di Euclide per la divisione.
Hai anche centrato qual è il problema maggiore; dire se un numero n è o non è un cubo perfetto. Bisogna cercare di avvicinarsi il più possibile al valore e poi compiere delle iterazioni elevando al cubo. I problemi per numeri maggiori di 18 (fino ad arrivare a 90) è che abbiamo a che fare con interi con centinaia di cifre; oltre a problemi di overflow (non conosco il python, ma nel framework senz'altro sono stati superati :http://old.dotnetcampania.org/blogs/salvatore/archive/2012/07/22/biginteger-nel-framework-net-un-fantastilione-di-miliardi.aspx ) si manifestano dopo un certo limite anche problemi di complessità di esecuzione, nel senso che all'aumentare di n ci si avvicina poco al valore della radice con le approssimazioni decimali, costringendo ad elaborazioni di centinaia di migliaia di operazioni per verificare se un numero è un cubo o no. Qui non centra che computer si usa, in ogni caso al minimo ci vorrebbero mesi. Se però si usa l'algoritmo della radice cubica ( http://www.francobampi.it/franco/ditutto/curiosita/radice_cubica.pdf) come si è tentato di insegnarci nelle scuole inferiori, si riesce (cercando il resto zero) ad abbassare il numero di operazioni che diventano proporzionali al numero di cifre di n anzichè al valore di n vero e proprio. Comunque la correttezza dell' algoritmo è già di per se stessa la soluzione del problema; eventuali difficoltà tecniche di realizzazione prima o poi vengono superate, o da trucchi software o dalla tecnologia. In fin dei conti anche Wagstaff nel 1956 poté verificare, con l’ausilio del calcolatore, che il teorema di Fermat sicuramente non ammette soluzioni se n è multiplo di un numero compreso fra 2 e 125.000, nel 1992 questo limite fu elevato a 4.000.000.
Quindi il passo dal 1956 al 1992 è senz'altro merito della tecnologia.