Le titre dit tout. Deux entiers positifs 32 bits d'entrée m, n >= 2
, sortie gcd(m,n)
sous forme de factorisation principale.
Contribution
Arguments de ligne de commande ou 1 ligne de stdin ok, quoi de mieux pour le golf.
Production
Espace unique délimité d'exposants (aucun espace supplémentaire). Rien de sortie si les entrées sont relativement principales.
Exemples:
$ ./factorize 96 162
2^1 3^1
$ ./factorize 14 15
$ ./factorize 196 294
2^1 7^2
Règles
- Vous ne pouvez pas utiliser des ressources externes, des bibliothèques mathématiques ou des fonctions intégrées pour la factorisation ou GCD. Exemples: Java, non
java.lang.Math
. rubis, nonprime_division
, perl, nonfactor
, etc.
gcd(n,m) == 1
?q:a+.b
ou__ q:a+.b
en J utilise nonexternal resources or math libraries
, mais je ne le posterai pas, car c'est trop loin de l'esprit de la question. Je pensais juste que je le partagerais ici.Réponses:
Python 3,
255250237226188180150142137 137136 car.C'est incroyable à quel point je pourrais raccourcir cela en sautant juste des trucs (comme, vous savez, trouver le gcd)! Je pourrais également réduire 10 caractères supplémentaires en faisant de cette fonction une fonction qui attend 2 ints, comme certaines autres réponses, au lieu de lire depuis stdin.
la source
while g<a and g<b:
enwhile(g<a)*(g<b):
a%g+b%g
bitelse:g+=1
pourrait juste êtreg+=1
, à moins que je manque quelque chose.Rubis -
16811711410110097Edit: Après y avoir réfléchi, j'ai réalisé que je n'avais pas besoin du tamis car la primauté du facteur est prise en charge dans la boucle de factorisation. En outre, comme l'ont informé les réponses des autres ( ceux de Laindir et Tal sont ceux dans lesquels je l'avais vu, bien qu'il semble que d'autres l'aient également fait), a supprimé le calcul de GCD séparé, car cela se produit également dans la factorisation.
Edit 2: Pas besoin
do
.Edit 3: le presser davantage.
Edit 4: Tiré un espace de plus.
Modifier 5:
upto
au lieu deeach
;?^ == "^"
!Sortie (même après modification):
Certes, pourrait être amélioré, mais pas mal pour mon premier.
la source
map{|i|i.to_i}
pourmap &:to_i
. Vous pouvez supprimer un 5ème octet en ne comptant pas la nouvelle ligne à la fin du fichier; Ruby fonctionne sans lui.$*
place deARGV
.Python deux -
254252196185156151134126121Interprète
repl.it
Exemple d'entrée - stdin
Exemple de sortie - stdout
la source
…`a`+'^'+`f.count(a)`…
?f.append(i)
pourf+=[i]
enregistrer 5 caractères.f=''
il toujours là?)Java -
184175Ceci est inspiré par la réponse de @Geobits (et un peu de la réponse de @ Tal), mais suffisamment différente est que j'ai décidé de créer ma propre réponse.
Harnais de test (sorte de) non (avec vérification humaine):
la source
dc, 96 octets
Il lit une ligne d'entrée standard. Sa sortie ne se termine pas par une nouvelle ligne. (EDIT: Il génère également un espace supplémentaire après chaque factorisation. Certaines des autres réponses coupent l'espace, mais celle-ci ne le fait pas.)
Exemple:
Code avec commentaires:
la source
PowerShell - 82
la source
2..$a
dirige la plage dans une boucle Foreach-Object%{...}
. La boucle collecte les valeurs deif($p){"$_^$p"}
.JavaScript (ECMAScript 6 Draft) - 89 caractères
Convertit la réponse originale (itérative) ci-dessous en une réponse récursive.
Explication
Réponse itérative: JavaScript (ECMASCript 6) -
108 (ou 121)98 caractèresVersion 2:
Version 1:
Répondre à la question posée à l'origine:
Ou pour se conformer aux changements de règles après coup:
Explication
Production
la source
f(158,237)
s'il vous plaît" 79^1"
filter()
appel?Perl 6: 90 caractères, 94 octets
Un peu dé-golfé et commenté:
L'utilisation est comme:
la source
Perl,
144133118114 1149793Version non golfée:
Je viens littéralement de commencer à apprendre Perl juste pour répondre à cette question (c'est mon premier code Perl jamais), donc je soupçonne que cela peut être approfondi.
la source
foreach
est toujours synonyme defor
Perl 5, ce qui devrait couper 4 caractères :)Java:
247241Conserve la trace des facteurs dans un tableau et les imprime simplement en boucle.
Taille décente pour Java, semble-t-il.
la source
int
, vous perdez 4 à laint
mais vous les récupérez avecnew int[
->new Integer[
c'est donc un lavage.n%i<1&&m%i<1
àn%i+m%i<1
.()
. Sin==m
, il sera dem+1
toute façon par défaut .m/=i;i=1;
parm/=i--;
Il fonctionnera plus rapidement :)for
boucle sont-elles nécessaires?JavaScript (ECMAScript 5)
170164163113Je n'ai pratiquement pas pu résister à suivre l'exemple de MT0. J'avais envisagé la récursivité auparavant, mais cela avait semblé trop facile à gâcher. Et ça l'est vraiment. La moindre variation détruit tout.
Il y a un violon pour ceux qui aiment les violons.
Non golfé:
Ancienne version
Non golfé:
Voici quelques tests:
la source
f(301343045, 421880263);
probablement parce que mon navigateur ne me laissera pas rentrer aussi profondément. Stupide cassé Firefox!GolfScript, 68 octets
Notez que cette approche nécessite O (b 2 ) temps et espace pour les entiers «a» et «b».
Au prix d'un octet supplémentaire, "seulement" O (b) temps et espace sont nécessaires:
Comment ça fonctionne
la source
Python 3 (123)
Cela utilise essentiellement la même structure que la réponse de Tal .
Il suffit de boucler jusqu'à p = a-1, car nous incrémentons immédiatement pour obtenir p = a et a> = min (a, b). Si b> a, il n'y a aucun mal à essayer des valeurs inutiles de p au-dessus de a.
En 2.X, je pense que nous pourrions économiser des caractères en imprimant chaque pièce que nous obtenons plutôt que d' accumuler une chaîne:
if c:print'%d^%d'%(p,c),
. Python 3, malheureusement, ne semble pas avoir une manière compacte d'imprimer sans une nouvelle ligne de fin.la source
PHP, 96
la source
p=0;g+=1
en une seule ligne en commençantg
à 1 à la place, ce qui vous permet ensuite de faireg<a
plutôt queg<=a
. J'espère que vous apprendrez à aimer le python.awk -
1151119685La nouvelle version ne peut gérer qu'une seule ligne d'entrée. Merci à durron597 d' avoir souligné que je dois seulement m'en assurer
i <= $1
.Non golfé:
Auparavant, pouvait prendre des paires de nombres à plusieurs reprises
Non golfé:
la source
&&i<=b
?i > b
, alorsb % i != 0
... merci :)NF=0;
ne parvient pas à supprimer $ 1 et $ 2. La sortie deecho 301343045 421880263 | awk -f factorize.awk | sed 's/ */ /g'
est5 7 1021^1 59029^1
parce que $ 1 est 5 et $ 2 est 7. Le sed comprime les espaces supplémentaires qui proviennent de l'impression de $ 1022, $ 1023, $ 1024, ..., $ 59028 en tant que chaînes vides jointes par des espaces.$0=z;
$0=z;
c'est le même nombre de caractères queNF=0;
. Si$0=z;
c'était plus long, je vous dirais de garderNF=0;
.Pip , 41 octets
Pas une réponse concurrente, car la langue est plus récente que la question. Mais cette marque GolfScript de 68 devait descendre.
La sortie se termine dans un espace; si c'est un problème, la version suivante est également de 41 octets (y compris l'
-s
indicateur):Formaté, avec explications:
Pip, contrairement à GolfScript, CJam et al. est un langage impératif avec des opérateurs infixes; il s'inspire également des langages de programmation de tableaux. Cette tâche affiche joliment les deux paradigmes au travail.
(Notez que la validation 2015-4-20 est nécessaire pour exécuter cela, car je viens de corriger quelques bugs.)
la source
Python 2 - 262 octets
La ligne 6 a besoin de travail.
la source
…`a`+'^'+`f.count(a)`…
?Groovy: 174 caractères
Il s'agit d'un portage de la solution de Geobits vers Groovy 2.2.1:
Voici la version non golfée:
la source
R: 139
Avec indentations:
Usage:
la source