Dans cette tâche, vous devez écrire un programme qui calcule les facteurs premiers d'un nombre. L'entrée est un nombre naturel 1 <n <2 ^ 32. La sortie est une liste des facteurs premiers du nombre dans le format suivant. Les exposants doivent être omis s'ils sont 1. Uniquement les nombres premiers en sortie. (En supposant que l'entrée est 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
Il n'est pas nécessaire d'utiliser la même quantité d'espace; un espace peut être inséré chaque fois que cela est approprié. Votre programme devrait se terminer en moins de 10 minutes pour toute entrée. Le programme avec le plus petit nombre de caractères gagne.
Réponses:
SageMath, 31 octets
Cas de test:
83891573479027823458394579234582347590825792034579235923475902312344444
Sorties:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
la source
Ruby 1.9,
7470 caractèresModifications:
exponent > 1
la source
Perl 5.10, 73
88Prend le numéro d'entrée de l'entrée standard. Calculera les facteurs pour plusieurs entrées si elles sont fournies.
Compté comme une différence pour
perl -e
. 5.10 est nécessaire pour le\K
métacaractère regex.la source
factor
.p
option?split/\D/,~factor $_~;$_="@_";
pourriez-vous écrire$_=~factor $_~;s/\D/ /g;
? (Bien sûr, remplacez~
par le backtick.)$_=`factor $_`;s/\D/ /g;
? Un double encastrement aide.OCaml, 201 caractères
Une traduction impérative directe du meilleur code Python:
Par exemple,
(Notez que j'ai omis de produire la fin finale.) Juste pour le plaisir, à 213 caractères, une version
purementfonctionnelle, complètement obscurcie par une utilisation libérale des opérateurs:la source
Python,
140135133 caractèresla source
' * %d'
... Et deux autres choses65536 == 4**8
:; Ligne 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
Typique J. Deux personnages pour faire la majeure partie du travail, soixante personnages pour le présenter.
Modifier: correction du nombre de caractères.
la source
161784
c'est votre entrée, il reste 72 caractères.|: __ q: y
?J,
5352 charactersThis solution takes the
rplc
trick from the solution of randomra but comes up with some original ideas, too.In non-tacit notation, this function becomes
where
g
is defined asq: y
est le vecteur des facteurs premiers dey
. Par exemple, lesq: 60
rendements2 2 3 5
.x u/. y
s'appliqueu
à lay
clé dex
, c'est-à-dire,u
est appliquée aux vecteurs d'élémentsy
dont les entrées dansx
sont égales. C'est un peu complexe à expliquer, mais dans le cas particuliery u/. y
ouu/.~ y
,u
est appliqué à chaque vecteur d'éléments distincts dansy
, où chaque élément est répété aussi souvent qu'il y apparaîty
. Par exemple, les</.~ 1 2 1 2 3 1 2 2 3
rendements# y
est le décompte dey
, qui est, le nombre d'élémentsy
.": y
formatsy
sous forme de chaîne.x , y
ajoutex
ety
.{. y
est la têtey
, c'est-à-dire son premier élément.(": {. y), '^' , (": # y) , '*'
formats a vector of n repetitions of a number k into a string of the form k ^ n *. This phrase in tacit notation is:@{.,'^','*',~":@#
, which we pass to the adverb/.
described further above.x rplc y
is the library function replace characters.y
has the forma ; b
and every instance of stringa
inx
is replaced byb
.x
is ravelled (that is, reshaped such that it has rank 1) before operation takes place, which is used here. This code replaces^1*
with*
as to comply with the mandated output format.}: y
is the curtail ofy
, that is, all but its last item. This is used to remove the trailing*
.la source
__ q:
? Try it online!PHP, 112
118
la source
Python 119 Chars
la source
JavaScript,
124122119la source
Perl, 78
It uses the s///r feature of Perl 5.14 to elide the ^1s. 81 characters to run in a loop:
la source
PHP, 236 characters
Output for 131784: 2^3*3*17^2*19
Completes all numbers within a few seconds while testing.
Input was never specified, so I chose to call it using command line arguments.
la source
Scala 374:
ungolfed:
la source
J, 74 chars
64 chars with input in variable
x
:la source
3 : 0
defintion.3 : 0
version but it didn't work somewhy. I might try tacit later though. This is the 3:0 I tried: pastebin.com/rmTVAk4j.y
as you are supposed to?''
instead ofa:
in one place. Maybe that's the difference?Java 10,
109108 bytes (lambda function) (non-competing on request of OP)Try it online.
Java 6+, 181 bytes (full program)
Try it online.
-1 byte thanks to @ceilingcat.
Explanation:
la source
Japt,
282726 bytes-1 byte thanks to Shaggy
Try it
la source
Powershell,
11397 bytesInspired by Joey's answer. It's a slow but short.
Explained test script:
Output:
la source
Jelly, 16 bytes (non-competing on request of OP)
One of my first Jelly answers, so can definitely be golfed (especially
³”=³
)..Try it online.
Explanation:
la source
(non-competing)
. :)05AB1E,
2220 bytes (non-competing on request of OP)-2 bytes thanks to @Emigna.
Try it online.
Explanation:
la source
1K
should work instead of `≠iy in the loop.APL(NARS), 66 chars, 132 bytes
test and comment:
if someone has many time with these primitives, know them very well them, for me it is possible that the code is clearer of comments... so code more clear than comments, comments unuseful...
la source
JavaScript, 107
120
la source
*
in the output and prints the exponent even if it's 1.*
assumes multiplying by1
. If it's that big an issue, I'll fix it.1
should not be printed. And no, a trailing*
is also against that. If one could choose the output format that freely, then shelling out tofactor(1)
would be the easiest one. Answers can only reasonably compared if they all solve the same problem.PHP, 112 bytes
Try it online!
la source
PHP, 93 bytes
I could do 89 bytes with PHP 5.5 (or later), but that postdates the challenge by more than 2 years:
Run as pipe with
-nF
or try them online.la source