Quel est mon potentiel exponentiel?

14

Nous définirons le potentiel N- exponentiel d'un entier positif M comme le nombre de préfixes de M N qui sont des N- puissances parfaites .

Les préfixes d'un entier sont toutes les sous-séquences contiguës de chiffres qui commencent par le premier, interprétées comme des nombres en base 10. Par exemple, les préfixes de 2744 sont 2 , 27 , 274 et 2744 .

Un préfixe P est un parfait N - Power s'il existe un entier K tel que K N = P . Par exemple, 81 est une puissance parfaite de 4 car 3 4 = 81 .


Étant donné deux entiers strictement positifs M et N , calculez le potentiel N- exponentiel de M selon la définition ci-dessus.

Par exemple, le potentiel 2- exponentiel de 13 est 3 car 13 2 est 169 , et 1 , 16 et 169 sont tous des carrés parfaits.

Cas de test

Naturellement, les sorties seront presque toujours assez petites car les puissances sont ... eh bien ... des fonctions en croissance exponentielle et avoir plusieurs préfixes de puissance parfaite est plutôt rare.

M, N     -> Output

8499, 2  -> 1
4,    10 -> 2
5,    9  -> 2
6,    9  -> 2
13,   2  -> 3
M. Xcoder
la source
bonjour, comment la sortie de: (4, 10) est 2 et non 1? parce que 4 puissance 10 est 1048576, 1 est une puissance parfaite mais pas 10
Ali ISSA
@AliISSA Salut, La sortie pour 4, 10est 2 , car 1 est une puissance 10 parfaite et 1048576 est également une puissance 10 parfaite (alors que 10 , 104 , 1048 , 10485 et 104857 ne le sont pas). Ainsi, il y a 2 préfixes valides, donc la sortie est 2.
M. Xcoder

Réponses:

10

Brachylog , 12 octets

{^a₀.&b~b^}ᶜ

Essayez-le en ligne!

Explication

{^a₀.&b~b^}ᶜ
{         }ᶜ  Count the number of ways the following can succeed:
  a₀            A prefix of
 ^                the first {input} to the power of the second {input}
    .&          produces the same output with the same input as
       ~b         any number
         ^        to the power of
      b           all inputs but the first (i.e. the second input)
ais523
la source
6

Gelée , 10 octets

*DḌƤÆE%Ḅċ0

Essayez-le en ligne!

Comment ça fonctionne

*DḌƤÆE%Ḅċ0  Main link. Left argument: m. Right argument: n.

*           Compute m**n.
 D          Generate its decimal digits.
  ḌƤ        Convert prefixes back to integers.
    ÆE      Get the exponents of each prefix's prime factorization.
      %     Take all exponents modulo n.
            For a perfect n-th power, all moduli will be 0.
       Ḅ    Convert from binary to integer, mapping (only) arrays of 0's to 0.
        ċ0  Count the zeroes.
Dennis
la source
3

Haskell , 56 octets

0%n=0
x%n=sum[1|t<-[1..x],t^n==x]+div x 10%n
m#n=(m^n)%n

Essayez-le en ligne!

Extrait les préfixes de manière arithmétique par répétition \x->div x 10. J'ai essayé d'exprimer la dernière ligne sans point mais je n'ai pas trouvé d'expression plus courte.

xnor
la source
2

05AB1E , 8 octets

mηÓ¹%O0¢

Essayez-le en ligne!

Utilise l'algorithme Jelly de 10 octets de Dennis. Les entrées sont dans l'ordre inverse.

Erik le Outgolfer
la source
1

Haskell, 73 octets

m#n=sum[1|c<-scanl(\s c->s++[c])"0"$show$m^n,any(==read c)$map(^n)[1..m]]

Essayez-le en ligne!

nimi
la source
1

Java (OpenJDK 9) , 105 octets

m->n->{int c=1,k=m;for(;--k>0;)if((""+(int)Math.pow(m,n)).matches((int)Math.pow(k,n)+".*"))c++;return c;}

Essayez-le en ligne!

Crédits

Olivier Grégoire
la source
1
.startsWith(""+(int)Math.pow(k,n))peut être .matches((int)Math.pow(k,n)+".*")pour -1 octet.
Kevin Cruijssen
1

Perl 6 , 40 octets

{1+(^$^m X**$^n).grep({$m**$n~~/^$^p/})}

Essayez-le en ligne!

nwellnhof
la source
Si vous affectez un Callable à une &foovariable, vous pouvez l'appeler comme vous le feriez pour un sous-programme foo( 'bar' )ou foo 'bar'pas besoin de l'inclure &. Je veux dire que vous ne l'avez pas écrit comme &say(&f(|$_))(ce sayn'est pas spécial du tout)
Brad Gilbert b2gills
@ BradGilbertb2gills J'utilise uniquement Perl 6 pour le golf de code et j'ai encore beaucoup à apprendre, donc merci pour l'astuce.
nwellnhof
0

Gelée , 14 octets

*DḌƤ*İ}ær⁵%1¬S

Essayez-le en ligne! ou voir la suite de tests

Comment ça fonctionne

*DḌƤ*İ}ær⁵%1¬S - Main link. Arguments: n, m (integers)  e.g. 13, 2
*              - Power. Raise x to the power y               169
 D             - Convert to a list of digits                 [1 6 9]
   Ƥ           - Convert each Ƥrefix
  Ḍ            - Back to an integer                          [1 16 169]
     İ         - Calculate the İnverse of
      }        - The right argument                          0.5
    *          - Raise each element to that power            [1 4 13]
       ær⁵     - Round each to 10 ** -10                     [1 4 13]
               - to remove precision errors
          %1   - Take the decimal part of each               [0 0 0]
            ¬  - Logical NOT each                            [1 1 1]
             S - Sum                                         3
caird coinheringaahing
la source
0

Rubis , 60 octets

->m,n{c=1;s=m**n;c+=(0..m).count{|j|j**n==s}while 0<s/=10;c}

une grande partie consiste à traiter les erreurs en virgule flottante

Essayez-le en ligne!

Asone Tuhid
la source
0

Kotlin , 89 octets

m,n->1+(1..m-1).count{"${Math.pow(m+0.0,n)}".startsWith("${Math.pow(it+0.0,n).toInt()}")}

Essayez-le en ligne!

Dans les cas de test, passé en n en tant que valeurs doubles (2.0, 10.0, 9.0) afin que je n'ai pas à convertir en double lors de l'appel de Math.pow ().

Makotosan
la source
0

Python 2 , 83 71 70 octets

n,m=input();s=n**m;k=0
while s:k+=round(s**(1./m))**m==s;s/=10
print k

Essayez-le en ligne!

Thx pour 1 de ovs.

Chas Brown
la source
@ovs: d'oh! a trop codé javascript ces derniers temps ... pensais que j'aurais besoin de math.round()lol
Chas Brown