Python Taxicab 1729

Cerca nel sito

Altri risultati..

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


Mi ricordo di una volta che stavo andando a trovarlo quando era ammalato a Putney. Avevo viaggiato col taxi n. 1729; osservai che il numero mi sembrava abbastanza insignificante e che speravo non fosse un cattivo presagio. “No,” replicò “è un numero molto interessante: è il più piccolo numero che si può esprimere come somma di due cubi in due modi diversi.” Gli chiesi, naturalmente, se sapesse la soluzione del problema corrispondente per le quarte potenze; ed egli, dopo un momento di riflessione, rispose che non riusciva a vedere con facilità la soluzione, ma che pensava che il primo numero di questo tipo dovesse essere piuttosto grande.

 Ramanujan & Hardy

Il numero 1729 è detto numero di Hardy–Ramanujan. L’aneddoto precedente è sicuramente all’origine della denominazione di n–esimo numero taxicab, in simboli Ta(n), per indicare il più piccolo intero positivo che può essere rappresentato in n modi come somma di cubi positivi.


Così Ta(2) = 1729.


Hardy e Wright hanno dimostrato che Ta(n) esiste per ogni intero n > 1. Attualmente sono noti i valori di Ta(n) solo
per 1 < n < 6 e si suppone che Ta(6) = 24153319581254312065344.

Che 1729 fosse esprimibile come somma di due cubi in due modi diversi era già noto nel XVII secolo, circa 300 anni prima di Ramanujan. Per esempio, Fermat propose a Brouncker, Wallis e Frénicle de Bessy il problema:
Dato un numero composto da due cubi, dividerlo in due altri cubi.
Nel 1657 Frénicle de Bessy, che era un brillante calcolatore, presentò cinque soluzioni (senza indicare il metodo adottato), tra le quali
1729= 93+ 103= 13+ 123.
Ma quanti sono i numeri che possono essere espressi in due modi come somma di cubi positivi? Ecco la risposta:

Ti potrebbe interessare anche:  Esercizi svolti di calcolo delle probabilità. Variabili casuali bernoulliane

Teorema

Esistono infiniti numeri interi positivi che possono essere espressi in due modi diversi come somma di due cubi positivi.

Dimostrazione.

La seguente identità, facile da verificare, fu scoperta da Ramanujan:

identità di Ramanujan

L’identità precedente non è sufficiente per terminare la dimostrazione, ma lo sarebbe se riuscissimo a stabilire una condizione che assicuri che i quattro termini al cubo che appaiono nell’identità sono positivi. Se scegliamo b = a + 1 allora l’identità di Ramanujan diventa:

identità di Ramanujan
Equazione (1)

ed è facile concludere che per a ≥ 3 i quattro termini al cubo dell’ultima identità risultano positivi.

Abbiamo così mostrato che esistono infiniti numeri interi positivi che possono essere espressi in due modi diversi come somma di due cubi positivi. 

La seguente funzione in Python sfrutta l’ultima identità e restituisce, dato il parametro a, un intero e due liste di due interi: la somma dei cubi degli elementi della prima lista è uguale alla somma dei cubi degli elementi della seconda lista e tali somme sono uguali all’intero che precede le due liste.

a = int(input('Scrivi il parametro a >= 3: '))
def genera_somme_cubi(a):
  L0 = 3*a**2 -5*a -5
  L1 = 6*a**2 +8*a +6
  L2 = 3*a**2 + 11*a +3
  L3 = 6*a**2 + 4*a + 4
  return (L0**3 + L1**3, [L0, L1], [L2, L3])
genera_somme_cubi(a)
Output:
Scrivi il parametro a >= 3: 4

(2418271, [23, 134], [95, 116])

Con il codice seguente generiamo, per 3 ≤ a ≤ 20, una lista di interi che sono esprimibili come somma di due cubi positivi in due modi diversi.

def genera_somme_cubi(a):
  L0 = 3*a**2 -5*a -5
  L1 = 6*a**2 +8*a +6
  L2 = 3*a**2 + 11*a +3
  L3 = 6*a**2 + 4*a + 4
  return (L0**3 + L1**3, [L0, L1], [L2, L3])
for a in range(3, 21):
  print(genera_somme_cubi(a))
Output:
(593047, [7, 84], [63, 70])
(2418271, [23, 134], [95, 116])
(7620661, [45, 196], [133, 174])
(20072017, [73, 270], [177, 244])
(46343059, [107, 356], [227, 326])
(96753187, [147, 454], [283, 420])
(186595201, [193, 564], [345, 526])
(337534981, [245, 686], [413, 644])
(579186127, [303, 820], [487, 774])
(950859559, [367, 966], [567, 916])
(1503488077, [437, 1124], [653, 1070])
(2301725881, [513, 1294], [745, 1236])
(3426223051, [595, 1476], [843, 1414])
(4976074987, [683, 1670], [947, 1604])
(7071446809, [777, 1876], [1057, 1806])
(9856372717, [877, 2094], [1173, 2020])
(13501730311, [983, 2324], [1295, 2246])
(18208389871, [1095, 2566], [1423, 2484])
La prima riga va così interpretata:
593047= 73+ 843= 633+ 703.
Nella lista precedente non c’è la rappresentazione di 1729. Tuttavia possiamo notare che l’uguaglianza:
593047= 73+ 843= 633+ 703
può essere riscritta come

73· 1729= 73· (13+ 123) = 73· (93+ 103)

Ti potrebbe interessare anche:  Python: Calcolo del M.C.D. tra due numeri

da cui, dividendo tutti i membri per 73, otteniamo:

 1729=  13+ 123 =  93+ 103

Come visto dall’esempio precedente la funzione genera_somme_cubi() può “dimenticare” delle scomposizioni. Possiamo recuperarne alcune generalizzando il procedimento applicato per ottenere la scomposizione di 1729.

Infatti se:

Dapprima abbiamo bisogno di una funzione Python per il calcolo del massimo comune divisore degli interi positivi a e b; il codice seguente definisce tale funzione:

def gcd(a, b):
  while b:
    a, b = b, a % b
  return a  

Il seguente codice Python definisce una funzione che memorizza in una lista i numeri interi positivi esprimibili in due modi diversi come somma di due cubi positivi utilizzando lo stesso formato di output della funzione genera_somme_cubi(a)
Essa si basa sulla formula (equazione 1) ma recupera, per mezzo del calcolo di massimi comuni divisori, alcune scomposizioni che altrimenti andrebbero perse:

def gcd(a, b):
  while b:
    a, b = b, a % b
  return a
  
def lista_somme_cubi(inizio, fine):
  if inizio < 3:
    inizio = 3
  S = []
  for a in range(inizio, fine + 1):
    n, [L0, L1], [L2, L3] = genera_somme_cubi(a)
    S.append((n, [L0, L1], [L2, L3]))
    d1 = gcd(L0, L1)
    d2 = gcd(L2, L3)
    d = gcd(d1, d2)
    if d != 1:
      L0 = L0 // d
      L1 = L1 // d
      L2 = L2 // d
      L3 = L3 // d
      S.append((L0**3 + L1**3, [L0, L1], [L2, L3]))
  S.sort() # ordina la lista
  return S
Con il codice seguente visualizziamo, per 3 ≤ a ≤ 20, una lista di numeri che si possono esprimere come somma di due cubi positivi in due modi diversi:
def genera_somme_cubi(a):
  L0 = 3*a**2 -5*a -5
  L1 = 6*a**2 +8*a +6
  L2 = 3*a**2 + 11*a +3
  L3 = 6*a**2 + 4*a + 4
  return (L0**3 + L1**3, [L0, L1], [L2, L3])
def gcd(a, b):
  while b:
    a, b = b, a % b
  return a
def lista_somme_cubi(inizio, fine):
  if inizio < 3:
    inizio = 3
  S = []
  for a in range(inizio, fine + 1):
    n, [L0, L1], [L2, L3] = genera_somme_cubi(a)
    S.append((n, [L0, L1], [L2, L3]))
    d1 = gcd(L0, L1)
    d2 = gcd(L2, L3)
    d = gcd(d1, d2)
    if d != 1:
      L0 = L0 // d
      L1 = L1 // d
      L2 = L2 // d
      L3 = L3 // d
      S.append((L0**3 + L1**3, [L0, L1], [L2, L3]))
  S.sort() # ordina la lista
  return S
X = lista_somme_cubi(3, 21)
for x in X:
  print(x)
Output:
(1729, [1, 12], [9, 10])
(593047, [7, 84], [63, 70])
(984067, [35, 98], [59, 92])
(2418271, [23, 134], [95, 116])
(7620661, [45, 196], [133, 174])
(20072017, [73, 270], [177, 244])
(20616463, [111, 268], [151, 258])
(46343059, [107, 356], [227, 326])
(96753187, [147, 454], [283, 420])
(186595201, [193, 564], [345, 526])
(337534981, [245, 686], [413, 644])
(579186127, [303, 820], [487, 774])
(950859559, [367, 966], [567, 916])
(1503488077, [437, 1124], [653, 1070])
(2301725881, [513, 1294], [745, 1236])
(3426223051, [595, 1476], [843, 1414])
(4976074987, [683, 1670], [947, 1604])
(7071446809, [777, 1876], [1057, 1806])
(9856372717, [877, 2094], [1173, 2020])
(13501730311, [983, 2324], [1295, 2246])
(18208389871, [1095, 2566], [1423, 2484])
(24210538597, [1213, 2820], [1557, 2734])

Tablet 10 Pollici 4GB RAM + 64GB ROM Android 10 GOODTEL Tablets con Doppia Fotocamera | WiFi | IPS | 8000mAh | FM | Bluetooth | MicroSD 128GB Espandibili Prezzo: 122,98€ e Resi GRATUITIRisparmi: 17,01€ (12%)

Ti potrebbe interessare anche:  Teoria dei numeri. MCD e mcm. Algoritmo di Euclide e Teorema di Bezout

[elementor-template id=”12586″]

(93)