Задача A3 из конкурса Putnam 2008 года гласит:
Ваша задача в этой задаче - взять конечную последовательность положительных целых чисел в качестве входных данных и вывести результат повторения этого процесса, пока дальнейший прогресс невозможен. (То есть до тех пор, пока каждое число в полученной последовательности не разделит все числа, следующие за ним.) Вам не нужно решать проблему Путнама.
Это код-гольф : выигрывает самое короткое решение на каждом языке программирования.
Контрольные примеры
[1, 2, 4, 8, 16, 32] => [1, 2, 4, 8, 16, 32]
[120, 24, 6, 2, 1, 1] => [1, 1, 2, 6, 24, 120]
[97, 41, 48, 12, 98, 68] => [1, 1, 2, 4, 12, 159016368]
[225, 36, 30, 1125, 36, 18, 180] => [3, 9, 18, 90, 180, 900, 4500]
[17, 17, 17, 17] => [17, 17, 17, 17]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [1, 1, 1, 1, 1, 2, 2, 6, 60, 2520]
code-golf
array-manipulation
number-theory
Миша лавров
источник
источник
Ответы:
Желе , 9 байт
Попробуйте онлайн!
Как это устроено
источник
Пари / ГП , 33 байта
Вычислить элементарные делители диагональной матрицы.
Попробуйте онлайн!
источник
J , 17 байт
Попробуйте онлайн!
Вероятно, первый ответ J на PPCG использовать
&.
дважды. После этого и что , я начинаю чувствовать себя странным J хакера.В основном перевод от Дениса Желе ответ .
Как это устроено
источник
Wolfram Language (Mathematica) , 44 байта
Попробуйте онлайн!
источник
Python 3 , 103 байта
Попробуйте онлайн!
объяснение
Эта задача по существу является параллельной сортировкой по простым множителям, и (gcd (a, b), lcm (a, b)) аналогична (min (a, b), max (a, b)). Итак, давайте поговорим с точки зрения сортировки.
По индукции мы докажем, что после f (i, j) a [i] становится наименьшим значением в (старом значении) L, где L - диапазон между a [i] и a [j], включая оба конца , И если j = -1, f (i, j) будет сортировать диапазон L.
Случай, когда L содержит один элемент, тривиален. Для первого утверждения обратите внимание, что самый маленький из L не может оставаться в [j] после перестановки, поэтому f (i, j-1) поместит его в a [i], а f (i + 1, - 1) не повлияет на это.
Для второго утверждения обратите внимание, что a [i] является наименьшим значением, а f (i + 1, -1) будет сортировать оставшиеся значения, поэтому L сортируется после f (i, j).
источник
Сетчатка , 65 байт
Попробуйте онлайн! Ссылка включает в себя более быстрые тестовые случаи. Объяснение:
Преобразовать в одинарный.
Повторное сопоставление: любое число с фактором, затем более позднее число, которое не делится на первое число, но делится на фактор.
$1
это первое число.$2
это фактор. Поскольку регулярное выражение является жадным, это самый большой фактор, т.е. gcd.$4
является частью совпадения между исходными числами.$5
это второе число.$#3
(в десятичной, а не в унарной форме) на единицу меньше, чем$1
делится на$2
, поскольку не включает в себя оригинал$2
. Это означает, что для вычисления lcm нам нужно умножить$5
на единицу больше, чем то,$#3
которое наиболее кратко записано как сумма$5
и произведение$#3
и$5
.Преобразовать в десятичную.
источник
05AB1E , 10 байтов
Признание за подход идет к alephalpha .
Попробуйте онлайн!
источник
Perl 6 , 53 байта
Попробуйте онлайн!
Порт Mathematica ответ алефальфа.
источник
JavaScript (SpiderMonkey) , 69 байт
Попробуйте онлайн!
l
правопреемникlcm(p,q)
кa[j]
и правопреемникуgcd(p, q)
вq
случайj > i
, иначе сохраняют все без изменений.lcm(p,q) = if p%q=0 then p else p*lcm(q,p%q)/(p%q)
Старый ответ:
JavaScript (SpiderMonkey) , 73 байта
Попробуйте онлайн!
g
вычисляетgcd(u, v)
и присваивает возвращаемое значениеu
.источник
05AB1E ,
151413 байтPort of @ Dennis ♦ 'Jelly ответ , но, к сожалению, 05AB1E не имеет встроенного Unexponents, так что это занимает более половины программы .. :(
-1 байт благодаря @ Mr.Xcoder .
-1 байт благодаря @Enigma ,
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
¾
и удалении0ï
+1. (Я пробовал это раньше, потому что пытался перенести и ответ Денниса)εgÅpymP
спасло бы еще один байт по сравнению с тем, о котором говорил мистер Xcoder0
и¾
. Нужно помнить это! Фактически, я добавлю это к моим маленьким подсказкам 05AB1E прямо сейчас. :)