Голосование за лучший ответ
Elepsis Eclipse
Гений
(67303)
3 года назад
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]]
"""
Антон РеутПрофи (574)
11 месяцев назад
Да, работает шустро, аналог на джаве даже медленнее. Также есть интересные случаи этих чисел, которые потеряются в таком варианте: [87539319, 167, 436, 228, 423, 255, 414]
Алан ДжанибековГуру (3474)
7 месяцев назад
вспомнил логин от старого аккаунта только чтобы написать, что код невероятно классный с точки зрения алгоритма)
Black Afgano
Просветленный
(22332)
3 года назад
import numpy as np
from itertools import combinations
numbers = np.arange(100)
pairs = np.array(list(combinations(numbers, 2)))
sums = np.apply_along_axis(lambda x: sum(x ** 3), 1, pairs)
nums, counts = np.unique(sums, return_counts=True)
print(*[num for num, count in zip(nums, counts) if count == 2][:5])
Лука Майский
Ученик
(194)
3 года назад
Вообще то в задаче на Степике было начальное число 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]
"
отступы тут не ставятся, сам расставишь если не совсем того... ))
Денис Проходский
Знаток
(366)
3 года назад
numbers = []
for a in range(1, 50):
for b in range(1, 50):
if a == b:
continue
for c in range(1, 50):
if c == a or c == b:
continue
for d in range(1, 50):
if d == c or d == b or d == a:
continue
if a**3 + b**3 == c**3 + d**3:
i = a**3 + b**3
if i not in numbers:
numbers.append(i)
print(numbers)
,,,,
[1729, 4104, 13832, 39312, 46683, 32832, 110656, 110808, 40033, 20683, 65728, 64232]
Александр Фролов
Ученик
(103)
2 года назад
answer=[]
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.append(x ** 3 + y ** 3)
print(sorted(answer))
''''
[1729, 4104, 13832, 20683, 32832]
''''
УсяКуся
Профи
(561)
2 года назад
Это все здорово, но на степике к этому моменту мы ещё не прошли массивы. Как это решить без массивов?
wmzЗнаток (251)
1 год назад
синтаксис name = [] - это объявление пустого списка.
массив в питоне подключается import array и при объявление указывается тип данных - array('i', [-1, 1, 2, 6, 3, 4]) где i - integer + свои методы + хранится как непрерывная последовательность ячеек в памяти.
Списки называют массивом потому что массивы поддерживают списочные методы и по работе через те жи индексы схожи, но они отличаются между собой и по способу представления объектов в памяти и по типу хранимых объектов.
УсяКусяПрофи (561)
1 год назад
Мне это известно, но эта задача из курса на степике, и к тому моменту массивы не были пройдены, то есть решение должно быть другим
Игнасио Гутфритич Липездрюк
Знаток
(267)
2 года назад
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
Ващенко
Ученик
(136)
1 год назад
Мой вариант с выводом только пяти чисел начиная с 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
Риниваса Рамануджан – индийский математик, славившийся своей интуицией в области чисел. Когда английский математик Годфри Харди навестил его однажды в больнице, он обмолвился, что номером такси, на котором он приехал, было 17291729, такое скучное и заурядное число. На что Рамануджан ответил: "Нет, нет! Это очень интересное число. Это наименьшее число, выражаемое как сумма двух кубов двумя разными способами". Другими словами:
1729 = 1^3 + 12^3 = 9^3 + 10^3.
1729 =1^3+12 ^3=9 ^3+10 ^3
.
Напишите программу, которая находит аналогичные интересные числа. В ответе запишите первые 5 чисел в порядке возрастания, включая число 17291729.