Tâche
Étant donné des nombres entiers x
et y
qui sont tous les deux au moins 2
, trouvez le plus petit nombre positif dont la y
puissance -th est divisible par x
.
Exemple
Étant donné x=96
et y=2
, la sortie devrait être 24
puisque 24
c'est la plus petite n
satisfaction positive n^2 is divisible by 96
.
Cas de test
x y output
26 2 26
96 2 24
32 3 4
64 9 2
27 3 3
Notation
C'est du code-golf . Solution avec le plus petit nombre de victoires d'octets.
Les références
y=2
: OEIS A019554y=3
: OEIS A019555y=4
: OEIS A053166y=5
: OEIS A015052y=6
: OEIS A015054
X
toujours supérieur àY
?X
est inférieur àY
, et cela peut réduire la longueur de certaines réponses (du moins la mienne) si elleX
est toujours supérieure àY
. Je préférerais que celaX
puisse être plus grand ou plus petit, mais alors un cas de test pour ce dernier serait génial.Réponses:
Brachylog ,
1917161512 octets2 octets enregistrés grâce à @LeakyNun.
Essayez-le en ligne!
Explication
la source
Gelée , 6 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
R*%⁸i0
est également de 6 octets.JavaScript (ES7), 32 octets
la source
f
. Je pense que vous devez attribuer la fonction àf
.Gelée , 6 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
Python 3,
604339 octetsMerci à @LeakyNun et @ Sp3000 pour leur aide
Une fonction qui prend l'entrée via un argument et renvoie la sortie.
Comment ça fonctionne
La fonction utilise la récursivité pour vérifier à plusieurs reprises les nombres entiers
i
, en commençant pari=1
, jusqu'à ce que celui qui satisfait la condition requise, icii**y%x<1
, soit trouvé. Ceci est réalisé en prenant la logiqueor
de la condition et le résultat de l'expression pouri+1
incrémenté, qui est ici-~f(x,y,i+1)
. Cette expression est évaluée en continuFalse
jusqu'à ce qu'une valeur satisfaisantej
soit trouvée, moment auquel elle est évaluéeTrue
et la récursivité s'arrête. Étant donné que ceux-ci sont respectivement équivalents à0
et1
en Python, et que la fonction a été ajoutée à plusieurs reprises1
via la partie d'incrémentation, la fonction revient(j-1)*False + True + (j-1)*1 = (j-1)*0 + 1 + (j-1)*1 = 1 + j-1 = j
, comme requis.Essayez-le sur Ideone
la source
def f(x,y,i=1):¶ while i**y%x:i+=1¶ print(i)
f=lambda x,y,z=1:z**y%x<1or-~f(x,y,z+1)
True
place dez
?-~
partie, mais oui, elle reviendraitTrue
si ellex
était 1.Haskell, 31 octets
Exemple d'utilisation:
96#2
->24
.Implémentation directe: essayez tous les entiers
n
, conservez ceux qui remplissent la condition et choisissez le premier.la source
x#y=until(\n->mod(n^y)x<1)(+1)0
05AB1E (10 octets)
Essayez-le en ligne
>
Lit le premier argument, l'incrémente et le pousse sur la pileG
ouvre la pile (a
) et démarre une boucle qui contient le reste du programme oùN
prend la valeur1, 2, ... a - 1
.N²m
pousseN
et la deuxième entrée de l'historique d'entrée, puis les fait éclater toutes les deux et pousse la première à la puissance de la seconde.¹
pousse la première entrée de l'historique des entrées dans la pile.Ö
ouvre les deux entrées de pile précédentes, puis poussea % b == 0
sur la pile.i
saute cela de la pile. Si vrai, il exécute le reste du programme; sinon, la boucle continue.N
pousseN
sur la pile.q
termine le programme.À la fin du programme, la valeur supérieure de la pile est imprimée.
la source
MATL , 9 octets
Essayez-le en ligne!
Explication
la source
find
?f
mais cela trouve tous les indices non nuls. Il faudrait donc~f1)
: négocier, trouver, obtenir la première entréeEn fait ,
1211 octetsUn grand merci à Leaky Nun pour ses nombreuses suggestions. Suggestions de golf bienvenues. Essayez-le en ligne!
Approche originale sur 12 octets. Essayez-le en ligne!
Une autre approche de 12 octets. Essayez-le en ligne!
Une approche sur 13 octets. Essayez-le en ligne!
Ungolfing:
Premier algorithme
Algorithme d'origine
Troisième algorithme
Quatrième algorithme
la source
;)
R,
61 octets,39 octets,37 octets, 34 octetsJe suis toujours un débutant dans la programmation R et il s'avère que c'est ma première fonction que je crée dans R ( Yay! ) Je pense donc qu'il y a encore place à l'amélioration.
Le test en ligne peut être effectué ici: RStudio sur rollApp .
Progrès majeurs:
which.max
fonctionne car il renvoie la valeur la plus élevée dans un vecteur et s'il y en a plusieurs, il retournera le premier. Dans ce cas, nous avons un vecteur de nombreux FAUX (qui sont des 0) et quelques VRAIS (qui sont des 1), il retournera donc le premier VRAI.Un autre progrès:
Enfin, il bat la réponse en utilisant Python de deux octets. :)
Un autre progrès: (encore!)
Un grand merci à Axeman et user5957401 pour l'aide.
la source
which.min
, vous pourriez vous débarrasser de la==0
. Le module renverra un nombre, qui ne sera pas inférieur à 0.function(x,y)which(!(1:x)^y%%x)[1]
.dc,
2322 octetsMerci à Delioth pour son conseil sur les méthodes de saisie, la sauvegarde d'un octet
Utilise l'opérateur de profondeur de pile
z
pour incrémenter le cas de test directement sur la pile et l'opérateur d'exponentiation modulaire|
pour, eh bien, l'exponentiation modulaire. Répétez les tests jusqu'à ce que le reste ne soit pas supérieur à zéro.la source
?
au début, car une façon standard d'invoquer certaines choses est> echo "x y [program]"|dc
, oùx
ety
sont les mêmes que la Question- x et y seront déposés sur la pile comme d'habitude.-e
option, mais je vais l'utiliser à partir de maintenant."
n'est pas implémenté dansdc
, alors que ne pas utiliser de guillemets donne évidemment des erreurs de shell. Y a-t-il quelque chose à faire à ce sujet? Je saisstderr
qu'on peut l'ignorer, mais ça me dérange toujours.05AB1E , 8 octets
Explication
Essayez-le en ligne
la source
Perl 6 ,
2625 octetsExplication:
la source
Mathematica, 36 octets
la source
Dyalog APL , 11 octets
Traduction de ceci .
0⍳⍨
trouver le premier zéro dans⊣|
les restes de division lorsque x divise(⍳⊣)*
les entiers un par x , élevé à la puissance de⊢
yTryAPL en ligne!
la source
PowerShell v2 +, 48 octets
Prend entrée
$x
et$y
. Construit une plage de1
à$x
, puis utiliseWhere-Object
pour filtrer ces nombres. Le filtre prend la chaîne"$_*"
(c'est-à-dire le numéro actuel avec un astérisque) et utilise la multiplication de chaîne pour concaténer ces$y
temps, puis claque une finale1
à la fin, puis redirige versiex
(courtInvoke-Expression
et similaire àeval
). Cela remplace[math]::Pow($_,$y)
, car PowerShell n'a pas d'opérateur d'exponentiation et est deux octets plus court. Qui est introduit dans l'opérateur modulo%
avec$x
- donc, s'il est divisible, ce sera le cas . Ainsi, s'il est divisible, il sera inclus par ce filtre et tous les autres nombres seront exclus.0
, donc nous l'encapsulons en parens et prenons le booléen-pas!(...)
Enfin, nous encapsulons les nombres résultants en parens
(...)
et prenons l'[0]
index. Depuis la plage entrée triée1..$x
, ce sera la plus petite. Cela reste sur le pipeline et l'impression est implicite.Cas de test
la source
PHP,
5533 octetsla source
Perl,
2926 octetsComprend +3 pour
-p
(pas +1 car le code contient'
)Exécuter avec l'entrée sur STDIN
power.pl
:la source
Pyth, 9 octets
Un programme qui prend en entrée une liste du formulaire
[x, y]
sur STDIN et imprime le résultat.Essayez-le en ligne
Comment ça fonctionne
la source
PHP 59 octets
Désolé, mais je ne peux pas tester cela depuis mon mobile. :)
Golfé
la source