Nesta tarefa, você deve escrever um programa que calcule os fatores primos de um número. A entrada é um número natural 1 <n <2 ^ 32. A saída é uma lista dos fatores primos do número no seguinte formato. Os expoentes devem ser omitidos se forem 1. Somente imprima números primos. (Supondo que a entrada seja 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
Não é necessário usar a mesma quantidade de espaço em branco; espaço em branco pode ser inserido sempre que apropriado. Seu programa deve ser concluído em menos de 10 minutos para qualquer entrada. O programa com a menor quantidade de caracteres vence.
code-golf
number-theory
primes
factoring
FUZxxl
fonte
fonte
Respostas:
SageMath, 31 bytes
Caso de teste:
83891573479027823458394579234582347590825792034579235923475902312344444
Saídas:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
fonte
Ruby 1.9,
7470 caracteresEdições:
exponent > 1
fonte
Perl 5.10, 73
88Toma o número da entrada da entrada padrão. Computará os fatores para várias entradas, se fornecidas.
Contado como uma diferença para
perl -e
. 5.10 é necessário para o\K
metacaractere regex.fonte
factor
.p
opção?split/\D/,~factor $_~;$_="@_";
escrever$_=~factor $_~;s/\D/ /g;
? (Claro substituir~
com a crase.)$_=`factor $_`;s/\D/ /g;
? O revestimento duplo do backtick ajuda.OCaml, 201 caracteres
Uma tradução imperativa direta do melhor código Python:
Por exemplo,
(observe que eu omiti a saída da linha final). Apenas por diversão, com 213 caracteres, uma versão
puramentefuncional, completamente ofuscada pelo uso liberal de operadores:fonte
Python,
140135133 caracteresfonte
' * %d'
... E mais duas coisas65536 == 4**8
:; Linha 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
J. Típico Dois caracteres para fazer a maior parte do trabalho, sessenta caracteres para apresentá-lo.
Editar: corrigida a contagem de caracteres.
fonte
161784
sua entrada, ainda tem 72 caracteres.|: __ q: y
?J,
5352 caracteresEssa solução segue o
rplc
truque da solução randomra, mas também traz algumas idéias originais.Em notação não tácita, essa função se torna
onde
g
é definido comoq: y
é o vetor de fatores primos dey
. Por exemplo,q: 60
produz2 2 3 5
.x u/. y
aplicau
- se ay
keyed byx
, isto é,u
é aplicado a vetores de elementosy
para os quais as entradasx
são iguais. Isso é um pouco complexo para explicar, mas, no caso especialy u/. y
ouu/.~ y
,u
é aplicado a cada vetor de elementos distintos emy
que cada elemento é repetido tantas vezes quanto aparecey
. Por exemplo,</.~ 1 2 1 2 3 1 2 2 3
rendimentos# y
é a contagem doy
número de itens emy
.": y
formatay
como uma sequência.x , y
acrescentax
ey
.{. y
é a cabeçay
, ou seja, seu primeiro item.(": {. y), '^' , (": # y) , '*'
formata um vetor de n repetições de um número k em uma sequência da forma k ^ n *. Essa frase em notação tácita é a:@{.,'^','*',~":@#
que passamos para o advérbio/.
descrito mais adiante.x rplc y
é a função de biblioteca substituir caracteres.y
tem a formaa ; b
e cada instância de cordaa
emx
é substituída porb
.x
é embaralhado (ou seja, reformulado de forma a ter o rank 1) antes da operação, que é usada aqui. Este código substitui^1*
com*
a cumprir com o formato de saída obrigatória.}: y
é a restrição dey
, ou seja, todos, exceto seu último item. Isso é usado para remover o final*
.fonte
__ q:
? Experimente online!PHP, 112
118
fonte
Python 119 Chars
fonte
JavaScript,
124122119fonte
Perl, 78
Ele usa o recurso s /// r do Perl 5.14 para eliminar os ^ 1s. 81 caracteres para executar em um loop:
fonte
PHP, 236 caracteres
Saída para 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19
Conclui todos os números dentro de alguns segundos durante o teste.
A entrada nunca foi especificada, então eu escolhi chamá-la usando argumentos de linha de comando.
fonte
Scala 374:
ungolfed:
fonte
J, 74 caracteres
64 caracteres com entrada na variável
x
:fonte
3 : 0
definição.3 : 0
versão, mas não funcionou de alguma forma. Eu posso tentar tácito mais tarde. Este é o 3: 0 que eu tentei: pastebin.com/rmTVAk4j .y
como deveria?''
vez dea:
em um só lugar. Talvez essa seja a diferença?Java 10,
109108 bytes (função lambda) (não concorrente a pedido do OP)Experimente online.
Java 6+, 181 bytes (programa completo)
Experimente online.
-1 byte graças a @ceilingcat .
Explicação:
fonte
Japt ,
282726 bytes-1 byte graças a Shaggy
Tente
fonte
Powershell,
11397 bytesInspirado pela resposta de Joey . É lento, mas curto.
Script de teste explicado:
Saída:
fonte
Gelatina , 16 bytes (não concorrente a pedido do OP)
Uma das minhas primeiras respostas Jelly, então definitivamente posso jogar golfe (especialmente
³”=³
) ..Experimente online.
Explicação:
fonte
(non-competing)
. :)05AB1E ,
2220 bytes (não concorrente a pedido do OP)-2 bytes graças a @Emigna .
Experimente online.
Explicação:
fonte
1K
deve funcionar em vez de `iy no loop.APL (NARS), 66 caracteres, 132 bytes
teste e comentário:
se alguém tem muito tempo com essas primitivas, conhece-as muito bem, para mim é possível que o código seja mais claro dos comentários ... portanto, código mais claro do que comentários, comentários inúteis ...
fonte
JavaScript, 107
120
fonte
*
na saída e imprime o expoente mesmo que seja 1.*
pressupõe a multiplicação1
. Se for um problema tão grande, eu vou consertar.1
não deve ser impresso. E não, um rastro*
também é contra isso. Se alguém pudesse escolher livremente o formato de saída, então descascarfactor(1)
seria o mais fácil. As respostas podem ser razoavelmente comparadas se todas resolverem o mesmo problema.PHP , 112 bytes
Experimente online!
fonte
PHP, 93 bytes
Eu poderia fazer 89 bytes com o PHP 5.5 (ou posterior), mas isso atrasa o desafio em mais de 2 anos:
Execute como pipe
-nF
ou experimente-os online .fonte