Теорема Ферма о полигональных числах утверждает, что каждое положительное целое число может быть выражено как сумма не более чем -угольных чисел. Это означает, что каждое положительное целое число может быть выражено как сумма до трех треугольных чисел, четырех квадратных чисел, пяти пятиугольных чисел и т. Д. Ваша задача состоит в том, чтобы взять положительное целое число и целое число и вывести -угольные целые числа, которые суммируются с .
В -й -gonal целым числом, где и , может быть определено в несколькими способами. Нематематический способ состоит в том, что е -угольное число может быть построено как правильный многоугольник с сторонами, каждая из которых имеет длину . Например, для (треугольные числа):
Смотрите здесь примеры с большими .
Математика у-определение, используя формулу для , что дает -й -gonal номер:
который приведен на странице Википедии здесь .
вход
Два натуральных числа и с условием . Вы можете ввести эти целые числа в наиболее естественном представлении на вашем языке (десятичные, унарные, церковные цифры, целочисленные числа с плавающей запятой и т. Д.).
Выход
Список целых чисел с максимальной длиной , где сумма равна а все целые числа в являются -угольными целыми числами. Снова, целые числа могут быть выведены в естественном представлении на вашем языке, с любым отличным, непротиворечивым разделителем (таким образом, недесятичный символ (ы) для десятичного вывода, символ, отличный от того, который используется для унарного вывода и т. Д.)
правила
- Входы или выходы никогда не превысят целочисленное ограничение для вашего языка
- не нужно заказывать
- В случае нескольких возможных выходов, любой или все являются приемлемыми
- Это код-гольф, поэтому выигрывает самый короткий код в байтах
Контрольные примеры
x, s => L
1, s => 1
2, s => 1, 1
5, 6 => 1, 1, 1, 1, 1
17, 3 => 1, 6, 10
17, 4 => 1, 16
17, 5 => 5, 12
36, 3 => 36
43, 6 => 15, 28
879, 17 => 17, 48, 155, 231, 428
4856, 23 => 130, 448, 955, 1398, 1925
источник
x=17, s=5
можем ли мы вывести5,12,0,0,0
вместо просто5,12
?Q
к своему представлению?Ответы:
Haskell ,
78 8077 байтМы вычисляем декартово произведение первыхN s-гональных чисел, а затем находим первую запись, которая суммирует с N .
Попробуйте онлайн!
источник
JavaScript (ES6),
8380 байтБыстрый рекурсивный поиск, который максимизирует наименьший срок вывода.
Принимает вход как
(s)(x)
.Попробуйте онлайн!
формула
Оказывается, короче использовать формулу, основанную на 0, для вычисленияs -гональных чисел в JS, то есть для начала с n = 0 и для вычисления п( n + 1 , с ) :
который может быть записан в 14 байтах:
комментарии
источник
05AB1E ,
1413 байтПорт Джонатана Аллана желе ответ .
Попробуйте онлайн!
источник
Haskell , 55 байтов
Попробуйте онлайн!
Выводит все возможные решения. Определяет s-угольные числа как совокупную сумму арифметической прогрессии
источник
Желе , 17 байт
Диадическая ссылка (очень очень неэффективная), принимаемая
s
слева иx
справа, которая дает кратчайший возможный ответ в виде списка целых чисел (отсортированных по возрастанию).Попробуйте онлайн! - не так много смысла пробовать это для гораздо более высоких значений
Как?
источник
⁸
Рубин , 79 байтов
Попробуйте онлайн!
источник
Python 3 , 105 байт
Попробуйте онлайн!
Ответ от Port of Arnauld на JavaScript , так что обязательно проголосуйте за него!
источник
Сетчатка , 111 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Вводит заказ в порядке
s n
. Объяснение:Преобразовать в одинарный.
После обработки оставшихся этапов обработайте их как программу Retina и выполните их на том же входе.
Дублируйте строку.
Замените первую копию регулярным выражением, которое пропускает первое число, а затем соответствует
s
s
-угольным числам. Сами числа записываются в нечетные группы захвата, а четные группы захвата используются для обеспечения того, чтобы все числа былиs
-гональными.Замените вторую копию разделенным пробелами списком нечетных групп захвата.
Например, сгенерированный код для ввода
5 17
выглядит следующим образом:источник
APL (NARS), 149 символов, 298 байтов
если не найти решения "0 = ≢b", чем вернуть для (ns) ввода, n раз 1; иначе это возвратило бы сумму чисел s, у которой есть меньше сложения ...
тест:
Проблема этого: не найти какое-то решение имеет некоторое число повторений в сумме ...
источник
C ++ (лязг) , 198 байт
Попробуйте онлайн!
источник