В этой задаче вы должны написать программу, которая вычисляет основные множители числа. Ввод представляет собой натуральное число 1 <n <2 ^ 32. Выходные данные представляют собой список основных факторов числа в следующем формате. Экспоненты должны быть опущены, если они равны 1. Выведите только простые числа. (Предполагая, что ввод 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
Использование одинакового количества пробелов не требуется; пробелы могут быть вставлены, где это уместно. Ваша программа должна завершиться менее чем за 10 минут для любого ввода. Программа с кратчайшим количеством символов выигрывает.
Ответы:
SageMath, 31 байт
Тестовый пример:
83891573479027823458394579234582347590825792034579235923475902312344444
Выходы:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
источник
Рубин 1.9,
7470 персонажейРедактирование:
exponent > 1
источник
Perl 5.10, 73
88Берет номер ввода из стандартного ввода. Будет рассчитывать коэффициенты для нескольких входных данных, если предусмотрено.
Считается как разница
perl -e
. 5.10 необходим для\K
метасимвола регулярных выражений.источник
factor
.p
вариант?split/\D/,~factor $_~;$_="@_";
чтобы написать$_=~factor $_~;s/\D/ /g;
? (Конечно, заменить~
на обратный$_=`factor $_`;s/\D/ /g;
? Двойная защитная оболочка помогает.OCaml, 201 символ
Прямой императивный перевод лучшего кода Python:
Например,
(обратите внимание, что я пропустил вывод окончательной конечной строки.) Ради интереса, 213 символов,
чистофункциональная версия, полностью запутанная благодаря свободному использованию операторов:источник
Питон,
140135133 символовисточник
' * %d'
... И еще две вещи65536 == 4**8
:; Строка 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
Типичный J. Два персонажа для выполнения большей части работы, шестьдесят символов для представления.
Редактировать: Исправлено количество символов.
источник
161784
что вы вводите, это по-прежнему 72 символа.|: __ q: y
?J,
5352 символаЭто решение берет
rplc
уловку от решения randomra, но также предлагает некоторые оригинальные идеи.В неявной нотации эта функция становится
где
g
определяется какq: y
является вектором главных факторов вy
. Например,q: 60
урожайность2 2 3 5
.x u/. y
относитсяu
кy
шпонке сx
, то есть,u
применяются для векторов элементов ,y
для которых запись вx
равна. Это немного сложно объяснить, но в частном случае ,y u/. y
илиu/.~ y
,u
применяется к каждому вектору различных элементовy
, где каждый элемент повторяется для так часто , как он появляется вy
. Например,</.~ 1 2 1 2 3 1 2 2 3
урожайность# y
это число изy
, то есть, количество элементовy
.": y
форматируетy
как строку.x , y
добавляетx
иy
.{. y
это головаy
, то есть ее первый элемент.(": {. y), '^' , (": # y) , '*'
форматирует вектор из n повторений числа k в строку вида k ^ n *. Эта фраза в молчаливом обозначении есть:@{.,'^','*',~":@#
, которую мы передаем наречие,/.
описанному выше выше.x rplc y
является библиотечной функцией замены символовy
имеет форму,a ; b
и каждый экземпляр строкиa
вx
заменяется наb
.x
перед операцией происходит выравнивание (то есть изменение формы таким образом, чтобы оно имело ранг 1), что используется здесь. Этот код заменяется^1*
на*
как соответствующий обязательному формату вывода.}: y
является Лишать изy
, то есть все , но его последний элемент. Это используется для удаления трейлинга*
.источник
__ q:
? Попробуйте онлайн!PHP, 112
118
источник
Питон 119 символов
источник
JavaScript,
124122119источник
Perl, 78
Он использует функцию s /// r в Perl 5.14 для исключения ^ 1s. 81 символов для запуска в цикле:
источник
PHP, 236 символов
Выход для 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19
Завершает все числа в течение нескольких секунд во время тестирования.
Ввод никогда не указывался, поэтому я решил вызвать его, используя аргументы командной строки.
источник
Scala 374:
ungolfed:
источник
J, 74 знака
64 символа с вводом в переменную
x
:источник
3 : 0
.3 : 0
версии, но она почему-то не сработала. Я мог бы попытаться молчаливый позже, хотя. Это 3: 0 я попробовал: pastebin.com/rmTVAk4j .y
как вы должны?''
вместо того, чтобыa:
в одном месте. Может в этом разница?Java 10,
109108 байт (лямбда-функция) (не конкурирует по запросу OP)Попробуйте онлайн.
Java 6+, 181 байт (полная программа)
Попробуйте онлайн.
-1 байт благодаря @ceilingcat .
Объяснение:
источник
Джапт ,
282726 байт-1 байт благодаря Shaggy
Попытайся
источник
Powershell,
11397 байтВдохновленный ответом Джои . Это медленно, но коротко.
Пояснил тестовый скрипт:
Выход:
источник
Желе , 16 байт (не конкурирует по запросу OP)
Один из моих первых ответов Jelly, так что определенно можно сыграть в гольф (особенно
³”=³
) ..Попробуйте онлайн.
Объяснение:
источник
(non-competing)
. :)05AB1E ,
2220 байт (не конкурирует по запросу OP)-2 байта благодаря @Emigna .
Попробуйте онлайн.
Объяснение:
источник
1K
должен работать вместо `≠ iy в цикле.APL (NARS), 66 символов, 132 байта
тест и комментарий:
если у кого-то есть много раз с этими примитивами, знайте их очень хорошо, для меня возможно, что код более понятен для комментариев ... так что код более понятен, чем комментарии, комментарии бесполезны ...
источник
JavaScript, 107
120
источник
*
на выходе и печатает экспоненту, даже если она*
предполагает умножение на1
. Если это большая проблема, я ее исправлю.1
не должен быть напечатан. И нет, трейлинг*
тоже против этого. Если бы можно было свободно выбрать выходной формат, тогдаfactor(1)
проще всего было бы использовать оболочку. Ответы могут быть разумно сопоставлены, только если все они решают одну и ту же проблему.PHP , 112 байт
Попробуйте онлайн!
источник
PHP, 93 байта
Я мог бы сделать 89 байтов с PHP 5.5 (или позже), но это откладывает задачу на более чем 2 года:
Запустите как трубу с
-nF
или попробуйте их онлайн .источник