Я вторичный такси?


13

Фон

Номер Рамануджана, 1729, называется номером такси из-за (возможно, апокрифического) рассказа о том, как Харди садится в такси, чтобы навестить Рамануджана в больнице с таким номером, который показался ему скучным.

С тех пор он известен как самый известный из класса целых чисел, известных как «номера такси», которые можно выразить как сумму двух n-х степеней (натуральных чисел) двумя (или иногда «k») различными способами.

1729 - это наименьшее натуральное число, выражаемое как сумма 2 кубов двумя различными способами, что делает его первым «3,2» номером такси (общее число «n, k»).

Вызов

Учитывая число, решите, является ли оно «3,2» «вторичным номером такси» - это означает, что оно соответствует тому же ограничению, что и 1729 (2 уникальных суммы кубов), но не должно быть наименьшим таким целым числом из «3 , 2 "класс (это был 1729, конечно).

Примеры случаев:

1729 = 10 ^ 3 + 9 ^ 3 = 12 ^ 3 + 1 ^ 3

4104 = 15 ^ 3 + 9 ^ 3 = 16 ^ 3 + 2 ^ 3

13832 = 2 ^ 3 + 24 ^ 3 = 18 ^ 3 + 20 ^ 3

А также 20683, 32832, 39312 ...

счет

Это , поэтому выигрывает самый короткий ответ на каждом языке.

Грубый код Matlab для поиска других случаев грубой силой:

for k = 1729:20000
    C = sum(round(mod(real((k-[1:ceil(k^(1/3))].^3).^(1/3)),1)*10000)/10000==1);
    if C > 1
        D = (mod(C,2)==0)*C/2 + (mod(C,2)==1)*((C+1)/2);
        disp([num2str(k),' has ',num2str(D),' solns'])
    end
end

Добро пожаловать в PPCG! Я немного отредактировал ваш вопрос, чтобы сделать его более понятным. Хотели бы вы добавить несколько тестов?
musicman523

Да, я боролся, потому что я на работе и у меня нет Matlab, но мне удалось запустить Octave в сети и найти 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Должны ли быть ровно два способа написания числа или хотя бы два?
Джон Дворак

2
кто-то должен написать ответ в Такси bigzaphod.github.io/Taxi
SaggingRufus

Ответы:


4

05AB1E , 9 байт

Код (очень медленно)

L3mãOQO3›


Код (намного быстрее), 12 байт

tL3mDδ+˜QO3›

Использует кодировку 05AB1E . Попробуйте онлайн!

объяснение

t                # Square root (not necessary but added for speed)
 L               # Create a list [1 .. sqrt(input)]
  3m             # Raise to the power of 3
    D            # Duplicate
     δ+          # 2 dimensional addition
       ˜         # Deep-flatten the entire list
        Q        # Check which are equal to the input
         O       # Sum up to get the number of equalities
          3›     # Checks whether there are 4 or more equalities. In order for a number
                   to be a secondary taxicab number, there are at least two distinct
                   ways to get to that number and 4 ways when you also take reversed
                   arguments in account.

2
Конечно, вы можете сохранить байт, удалив квадратный корень. Это код-гольф, а не самый быстрый код.
разброс

@Christian Я добавил медленную версию кода.
Аднан

6

Желе , 9 байт

Кредиты для Эрика Outgolfer.

Œċ*3S€ċ>1

Попробуйте онлайн!

Это слишком медленно, чтобы не работать даже в 1729Интернете.

Намного быстрее, 12 байт

Кредиты Денису.

R*3fRŒċS€ċ>1

Попробуйте онлайн!


Я только что проверил это с "4104", и это прошло. :) Пока что ничего не найдено, но это было молниеносно!
DrQuarius

Ðf⁸может стать fR. Второй может быть удален.
Деннис

Второй indeed действительно может быть удален, но перестановка fR приводит к провалу.
DrQuarius

Кстати, это код-гольф, поэтому нас не волнует скорость;), но вы все равно можете включить быструю версию в ссылку TIO.
user41805

1
Вам не нужно заботиться о скорости, просто сделайте это Œċ*3S€ċ>1.
Эрик Outgolfer

5

Mathematica, 35 байт

Count[#^3+#2^3&~Array~{#,#},#,2]>2&

Чистая функция, принимающая положительное целое число и возвращающая TrueилиFalse .

#^3+#2^3&~Array~{#,#}Таблицы всех сумм кубов двух целых чисел между 1 и входом. (Это было бы намного быстрее с разумной границей целых чисел, которые должны быть в кубе, как корень куба ввода; но это заняло бы драгоценные байты. На самом деле, код занимает около 30 секунд на входе 13832и масштабируется по крайней мере квадратично во входных данных.) Count[...,#,2]подсчитывает, сколько раз вход появляется в этом списке на уровне гнезд 2; если это число больше чем 2, то входное значение представляет собой число полутаксикабы (больше 2, а не больше 1, поскольку a ^ 3 + b ^ 3 и b ^ 3 + a ^ 3 учитываются отдельно).


3

Mathematica, 38 37 байт

Tr[1^PowersRepresentations[#,2,3]]>1&

-1 байт благодаря @GregMartin

Как всегда, Mathematica встроена во все.


1
Предполагая, что OP в порядке с более чем 2-представлениями, я считаю, что Tr[1^...]работает вместо Length@.
Грег Мартин

2

JavaScript (ES7), 63 байта

Относительно быстрая рекурсивная функция, которая в конечном итоге возвращает логическое значение.

f=(n,k,r=0,x=n-k**3)=>x<0?r>3:f(n,-~k,r+=(x**(1/3)+.5|0)**3==x)

демонстрация


2

Mathematica, 48 байтов

Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&

вход

[4104]

выход

Правда


Обратите внимание, что #!=1729&&больше нет необходимости теперь, когда спецификация была уточнена.
Грег Мартин

Не могли бы вы использовать, Solveа не Reduce?
Ян Миллер

конечно ... 1 байт - 1 байт!
J42161217

Можно сохранить один байт с Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&который заменяет &&с -и немного переставляя.
Ян Миллер


1

MATL ( 16 15 байт) ( 13 12 в идеале)

.4^:3^2XN!sG=sq

Попробуйте онлайн!

Объяснение:

Основанный на Jelly-решении «Leaky Nun», только что преобразованный в MATL, возможно, в некоторых частях избыточен и может быть улучшен:

.4^  % rough cube root of input, as maximum potential integer N.
:3^   % create array of all cubes from 1^3 up to N^3.
2XN   % do nchoosek on cube array, creating all possible pairs (k=2) to add.
!s    % transpose array and add all pairs to find sums.
G=    % find all pairs that equal the original input.
sq   % if there is more than one solution, then pass the test.

Примечание: ложные выходы включают 0 и -1, в то время как истинный вывод равен 1. Спасибо Луису Мендо за сохранение здесь дополнительного байта, заменив «s1>» на «sq».

В идеале ( 13 12 байт):

:3^2XN!sG=sq

... достаточно, но для больших чисел это вылетает на странице tio.run.


Оригинал: MATL (19 байт) =============== XH.34 ^: 3 ^ 2XN! SH = s1>
DrQuarius

1
Если какой-либо достоверный вывод верен, вы можете заменить 1>на q. Кроме того, вы Hвместо того, чтобы Gв объяснении. Тот факт, что программа вылетает при большом количестве, обычно не имеет значения для оценки. Если это работает при условии достаточного количества времени и памяти, что приемлемо, если в
Луис Мендо

1
Спасибо Луис! Я новичок в «правдивых» выводах, но теперь это работает хорошо. Отредактировано, чтобы изменить. Также спасибо за создание такого веселого и простого в использовании esolang!
DrQuarius

0

Рубин , 52 байта

->n{r=*1..n;r.product(r).count{|i,j|i**3+j**3==n}>1}

Попробуйте онлайн!

Так как эта версия создает огромный п 2 массив размером , она терпит неудачу во всех истинных тестовых случаях выше 1729, вот модифицированная версия, которая имеет меньший размер массива около n 2/3 , который успешно проверяет по крайней мере до 31392.

Попробуйте онлайн! (Модифицированный)


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.