Un pouvoir parfait est un certain nombre de la forme a**b
, où a>0
et b>1
.
Par exemple, 125
est un pouvoir parfait car il peut être exprimé comme 5**3
.
Objectif
Votre tâche consiste à écrire un programme / une fonction qui trouve le n
puissance parfaite -th, étant donné un entier positif n
.
Spécifications
- La première puissance parfaite est
1
(qui est1**2
). - Entrée / sortie dans n'importe quel format raisonnable.
- Les fonctions intégrées sont autorisées .
Plus d'informations
Notation
C'est du code-golf . La solution la plus courte en octets gagne.
Cas de test
input output
1 1
2 4
3 8
4 9
5 16
6 25
7 27
8 32
9 36
10 49
code-golf
arithmetic
number-theory
Leaky Nun
la source
la source
Réponses:
Gelée , 11 octets
Essayez-le en ligne! .
Contexte
Chaque entier positif k peut être factorisé uniquement comme le produit des puissances des premiers m premiers, c'est-à-dire k = p 1 α 1 ⋯ p m α m , où α m > 0 .
Nous avons que a b ( b> 1 ) pour un entier positif a si et seulement si b est un diviseur de tous les exposants α j .
Ainsi, un entier k> 1 est une puissance parfaite si et seulement si pgcd (α 1 , ⋯, α m ) ≠ 1 .
Comment ça fonctionne
la source
a_n > 0
?" Il me semble que dans la factorisation pour 21 ^ 2 les exposants pour p = 2 et p = 5 sont nuls.Mathematica, 34 octets
Génère un tableau n × n A ij = i 1+ j , l'aplatit et renvoie le n ème élément.
la source
CJam, 16 octets
Testez-le ici.
Explication
Cela utilise une idée similaire à la réponse Mathematica de LegionMammal.
la source
Octave,
573130 octetsJe viens de remarquer à nouveau qu'Octave n'a pas besoin
ndgrid
( contrairement à Matlab) =)la source
05AB1E , 12 octets
Code:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
Sage (version 6.4, probablement aussi d'autres):
6463Crée une fonction lambda qui renvoie
n
la puissance parfaite. Nous comptons sur le fait qu'il se trouve dans les premiersn^2
entiers. (Le1+n^2
est nécessaire pourn=1,2
. Le0+k
bit est nécessaire pour convertirint(k)
enInteger(k)
.)Octet désactivé pour
xrange
->range
, merci Dennis.Juste un fait amusant:
0
c'est un pouvoir parfait par rapport aux normes de Sage, heureusement, car alors1
c'est le 1er élément de la liste, pas le 0 :)la source
is_perfect_power()
Pyth -
1211 octetsApproche évidente, passe simplement par et vérifie tous les nombres.
Suite de tests .
la source
MATL, 9 octets
Essayez-le en ligne
Il s'agit d'un portage de la solution Octave de Flawr à MATL, augmentez la matrice des puissances
n^(n+1)
et obtenez lan
-ième.la source
Julia,
6432 octetsIl s'agit d'une fonction anonyme qui accepte un entier et renvoie un entier. Pour l'appeler, affectez-le à une variable.
L'idée ici est la même que dans la réponse Mathematica de LegionMammal : nous prenons le produit externe des entiers 1 à n avec 2 à n + 1, réduisons la matrice résultante en colonne, prenons des éléments uniques, trions et obtenons le n ème élément .
Essayez-le en ligne! (inclut tous les cas de test)
la source
JavaScript (ES6), 87
Moins golfé
Tester
la source
En fait, 18 octets (non concurrents)
Essayez-le en ligne! (peut ne pas fonctionner car une mise à jour est nécessaire)
Cette solution n'est pas concurrente car j'ai corrigé un bogue
E
après la publication de ce défi.Explication:
la source
> <>, 108 octets
Ce programme nécessite que le numéro d'entrée soit présent sur la pile avant de s'exécuter.
Il a fallu beaucoup de temps pour réduire le nombre d'octets perdus à 7!
Après une vérification pour voir si l'entrée est
1
, le programme vérifie chaque nombren
, à partir de 4 tour à tour pour voir si c'est une puissance parfaite. Il le fait en commençant para=b=2
. Sia^b == n
, nous avons trouvé une puissance parfaite, décrémentez donc le nombre de puissances parfaites à trouver - si nous avons déjà trouvé le bon nombre, la sortie.Si
a^b < n
,b
est incrémenté. Sia^b > n
,a
est incrémenté. Ensuite, sia == n
, nous avons constaté que cen
n'est pas une puissance parfaite, alors incrémentezn
, réinitialiseza
etb
.la source
J, 29 octets
Basé sur la méthode de @ LegionMammal978 .
Usage
Explication
la source
JavaScript (ES7), 104 octets
Fonctionne en calculant toutes les puissances non supérieures à n², en triant la liste résultante et en prenant le nième élément.
la source
Java, 126
la source