27/01/17

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!!scherzy-2

 

 

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?”

Deposito2“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: x\neq y\neq z\neq t

 

QUESTA è la soluzione

QUI trovate tutti i quiz del Club dei Maghi

13 commenti

  1. Forza amici... dateci dentro!!!! Una bella quaterna al lotto non sarebbe male... :wink:

  2. Club dei Maghi

    Il quiz è stato aggiornato. Ora dovrebbe risultare più agevole farsi due conti per poter poi dare una risposta.  :wink:

  3. Marco

    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?

  4. Marco

    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)

  5. Club dei Maghi

    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.

     

     

     

  6. Gimar

    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

  7. Club dei Maghi

    Grazie Gimar.  1332 è il risultato di

    3^{3}+4^{3}+8^{3}+9^{3}

    Il quiz, però, chiede di trovare una quaterna di esponenti (interi positivi e tutti diversi) a cui elevare la base comune, che è 27.

     

     

  8. Gimar

    Scusa ho letto fischi per fiaschi... :oops:

  9. Gimar

    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.

  10. Marco

    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)

  11. Club dei Maghi

    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

  12. Marco

    Alcune premesse:

    1. difficile spiegare tutti i dettagli, se non si sa programmare
    2. c'era un errore nel listato precedente, che ho corretto
    3. la difficoltà maggiore deriva dal fatto che il calcolo della radice cubica come potenza con esponente 1/3 dà come risultato un numero in virgola mobile (diciamo un numero con la virgola), che, per come viene memorizzato, è spesso approssimato: quindi elevando x alla 1/3 potremmo avere l'impressione di un risultato non intero anche se x fosse un cubo perfetto, proprio a causa dell'approssimazione introdotta. Questo complica l'algoritmo
    4. una esecuzione del programma con la correzione di cui al punto 2 non fornisce ancora soluzioni comprese tra 1 e 18
    5. nel listato che segue le righe che iniziano con # sono commenti
    6. in python l'indentazione (ovvero, il numero di spazi con cui inizia una riga) è fondamentale: poiché gli spazi iniziali vengono tagliati dal commento, li ho sostituiti con [tab]. Chi volesse eseguire il programma dovrebbe sostituire ogni [tab] con un carattere di tabulazione (o, se si preferisce, con 4 spazi)

    #!/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

  13. Club dei Maghi

    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.

Lascia un commento

*

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

 

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.