Défi
Votre tâche consiste à écrire un programme ou une fonction qui, étant donné un entier positif N , trouve tous les entiers positifs inférieurs ou égaux à N qui peuvent être exprimés en puissance parfaite de plusieurs manières.
Définition
Une puissance parfaite est définie comme un nombre i trouvé par m ^ k , où:
- m et i sont des entiers positifs
- m! = k
Cas de test
entrée -> sortie 1000 -> 16, 64, 81, 256, 512, 625, 729 56 -> 16 999 -> 16, 64, 81, 256, 512, 625, 729 81 -> 16, 64, 81 1500 -> 16, 64, 81, 256, 512, 625, 729, 1024, 1296
Veuillez également fournir une version lisible et commentée.
code-golf
math
number
number-theory
fR0DDY
la source
la source
Réponses:
Mathematica: 103 caractères
Les espaces peuvent être supprimés
Usage:
la source
Jelly , 11 octets significatifs, défi de postdates de langue
Essayez-le en ligne!
Voici une solution entièrement différente. Celui-ci est un curieux hybride efficace et inefficace, utilisant un algorithme de base efficace dans un wrapper très inefficace (à tel point qu'il ne peut pas gérer de très grands nombres). Comme précédemment, tous les espaces blancs n'ont aucun sens.
Voici comment ça fonctionne.
Ḋ
(qui apparaît plusieurs fois) est une liste de nombres de 2 à l'entrée incluse:L'observation de base ici est qu'un nombre est une puissance parfaite de plusieurs manières, seulement s'il s'agit d'une puissance parfaite avec un exposant composite (ce n'est pas 1). Nous générons une liste de ceux dont la base est de 2 à l'entrée, et l'exposant est un nombre composite de 4 à l'entrée; c'est vraiment lent car cela génère de très gros nombres, qui sont tous une réponse à la question. Ensuite, nous ne gardons que les réponses qui sont à portée.
Il serait facilement possible de modifier cela en une réponse très efficace, en déterminant la puissance maximale dans la plage et en ne répétant pas plus, mais ce serait beaucoup plus d'octets, et c'est le code-golf.
la source
Perl: 68 caractères
Obtient le maximum (1000)
$N
et renvoie la réponse@a
.Pour tout un programme, j'ai besoin de 18 autres caractères:
la source
sort
auparavantgrep
. Au fait, je n'avais jamais vu de codepad auparavant. Merci.Ruby - 101 caractères (sans espace)
Fonctionne pendant
1 <= limit <= 100,000,000
5 secondes.Tester
la source
Jelly , 13 personnages significatifs, défi de postdates de langue
Essayez-le en ligne!
Tous les espaces ici sont insignifiants. Je l'ai utilisé pour montrer la structure de ma réponse, comme le demande la question.
Voici comment ça fonctionne:
Ainsi, par exemple, lorsque nous testons n = 256, nous vérifions le nombre de fois que chacun des nombres de 2 à 256 se divise en 256. Les seuls nombres qui se divisent plus d'une fois sont 2 (qui se divise 8 fois), 4 (qui divise 4 fois), 8 (qui se divise deux fois) et 16 (qui se divise deux fois). Ainsi, lorsque nous élevons le nombre de divisions aux pouvoirs qui y sont déterminés, nous obtenons:
Cela produit la valeur d'origine, 256, un nombre de fois égal à la façon dont 256 est une puissance parfaite, plus un (le dernier élément produit 256 car 256 = 256¹). Donc, si nous voyons 256 plus de deux fois dans le tableau (et nous le faisons dans ce cas; 8² est 64 mais les autres éléments "intéressants" produisent tous 256), cela doit être une puissance parfaite.
la source