Top.Mail.Ru
Ответы

Задача Числа Рамануджана Python

Вообще не понимаю, как решить эту задачу .
Риниваса Рамануджан – индийский математик, славившийся своей интуицией в области чисел. Когда английский математик Годфри Харди навестил его однажды в больнице, он обмолвился, что номером такси, на котором он приехал, было 17291729, такое скучное и заурядное число. На что Рамануджан ответил: "Нет, нет! Это очень интересное число. Это наименьшее число, выражаемое как сумма двух кубов двумя разными способами". Другими словами:
1729 = 1^3 + 12^3 = 9^3 + 10^3.
1729 =1^3+12 ^3=9 ^3+10 ^3
.
Напишите программу, которая находит аналогичные интересные числа. В ответе запишите первые 5 чисел в порядке возрастания, включая число 17291729.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Гений

cache = {}
twice = {}

a = 0
while len(twice) < 5:
a += 1
b = 0
while b < a:
b += 1
n = a ** 3 + b ** 3

if n in cache:
twice[n] = [cache[n], [a, b]]
else:
cache[n] = [a, b]

for n in twice: print(n, twice[n])

"""
1729 [[10, 9], [12, 1]]
4104 [[15, 9], [16, 2]]
13832 [[20, 18], [24, 2]]
20683 [[24, 19], [27, 10]]
32832 [[30, 18], [32, 4]]
"""

Аватар пользователя
Ученик

Вообще то в задаче на Степике было начальное число 1729
b = 1729
x = 0
ss = [b]
while x != 33:
for x in range(1, 34):
for y in range(1, 34):
for z in range(1,34):
for t in range(1, 34):
for r in range(1, 34):
if (x**3 + y**3) == (z**3+t**3):
if x != y and x != z and x != t and y != z and y != t and z != t:
a = (x ** 3 + y ** 3)
if a != b:
if a not in ss:
ss.append(a)
ss.sort()
b = a
print(ss)

"
[1729, 4104, 13832, 20683, 32832]
"

отступы тут не ставятся, сам расставишь если не совсем того... ))

Аватар пользователя
Профи

Это все здорово, но на степике к этому моменту мы ещё не прошли массивы. Как это решить без массивов?

Аватар пользователя
Ученик

Мой вариант с выводом только пяти чисел начиная с 1729 по возрастанию. Как сказано на степике.

counter, flag = 1, False
for a in range(1, 41):
__for c in range(1, a):
____for d in range(1, c + 1):
______for b in range(1, d):
________if a ** 3 + b ** 3 == d ** 3 + c ** 3:
__________print(a ** 3 + b ** 3)
__________counter += 1
__________if counter == 6:
____________flag = True
____________break
__if flag:
____break

Аватар пользователя
Знаток

for i in range(1, 33):
for j in range(1, 33):
for x in range(1, 33):
for y in range(1, 33):
if i ** 3 + j ** 3 == x ** 3 + y ** 3 and i < x < y < j:
answer = (x ** 3 + y ** 3)
print(answer)
1729
4104
13832
32832
20683