Qual é o meu potencial exponencial?

14

Vamos definir o N potencial -exponential de um inteiro positivo M como a contagem de prefixos de M N que são perfeitos N -powers.

Os prefixos de um número inteiro são todas as subsequências contíguas de dígitos que começam com o primeiro, interpretadas como números na base 10. Por exemplo, os prefixos de 2744 são 2 , 27 , 274 e 2744 .

Um prefixo P é um perfeito N -power se existe um inteiro K de tal modo que K N = P . Por exemplo, 81 é uma potência de 4 perfeita porque 3 4 = 81 .


Dados dois inteiros estritamente positivos M e N , calcule o potencial N- exponencial de M de acordo com a definição acima.

Por exemplo, o potencial 2- exponencial de 13 é 3 porque 13 2 é 169 e 1 , 16 e 169 são todos quadrados perfeitos.

Casos de teste

Naturalmente, as saídas quase sempre são muito pequenas porque as potências são ... bem ... funções crescentes exponencialmente e ter vários prefixos de potência perfeita é bastante raro.

M, N     -> Output

8499, 2  -> 1
4,    10 -> 2
5,    9  -> 2
6,    9  -> 2
13,   2  -> 3
Mr. Xcoder
fonte
Olá, como a saída de: (4, 10) é 2 e não 1? porque 4 potência de 10 é 1048576, 1 é um poder perfeito, mas não 10
Ali ISSA
@AliISSA Oi, A saída para 4, 10é 2 , porque 1 é uma potência 10 perfeita e 1048576 também é uma potência de 10 perfeita (enquanto 10 , 104 , 1048 , 10485 e 104857 não são). Portanto, existem 2 prefixos válidos, então a saída é 2. #
Mr. Xcoder 18/03/19

Respostas:

10

Braquilog , 12 bytes

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

Experimente online!

Explicação

{^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
fonte
6

Gelatina , 10 bytes

*DḌƤÆE%Ḅċ0

Experimente online!

Como funciona

*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
fonte
3

Haskell , 56 bytes

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

Experimente online!

Extrai os prefixos aritmeticamente por repetidos \x->div x 10. Tentei expressar a última linha sem pontos, mas não encontrei uma expressão mais curta.

xnor
fonte
2

05AB1E , 8 bytes

mηÓ¹%O0¢

Experimente online!

Usa o algoritmo de 10 bytes do Dennis Jelly. As entradas estão em ordem inversa.

Erik, o Outgolfer
fonte
1

Haskell, 73 bytes

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

Experimente online!

nimi
fonte
1

Java (OpenJDK 9) , 105 bytes

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;}

Experimente online!

Créditos

Olivier Grégoire
fonte
1
.startsWith(""+(int)Math.pow(k,n))pode ser .matches((int)Math.pow(k,n)+".*")de -1 byte.
Kevin Cruijssen 19/03/19
1

Perl 6 , 40 bytes

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

Experimente online!

Nwellnhof
fonte
Se você atribuir um Callable a uma &foovariável, poderá chamá-lo como faria com uma sub-rotina foo( 'bar' )ou foo 'bar'sem a necessidade de incluir &. Quer dizer que você não escrevê-lo como &say(&f(|$_))( saynão é especial de qualquer forma)
Brad Gilbert b2gills
@ BradGilbertb2gills Eu só uso Perl 6 para código de golfe e ainda tenho muito a aprender, então obrigado pela dica.
Nwellnhof 20/0318
0

Gelatina , 14 bytes

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

Experimente online! ou veja a suíte de testes

Como funciona

*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
fonte
0

Ruby , 60 bytes

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

muito disso é lidar com erros de ponto flutuante

Experimente online!

Asone Tuhid
fonte
0

Kotlin , 89 bytes

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

Experimente online!

Nos casos de teste, passamos n como valores duplos (2.0, 10.0, 9.0) para que eu não tenha que converter para o dobro ao chamar Math.pow ().

Makotosan
fonte
0

Python 2 , 83 71 70 bytes

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

Experimente online!

Thx por 1 de ovs.

Chas Brown
fonte
@ovs: d'oh! sido codificação muito javascript ultimamente ... estava pensando que eu precisaria de math.round()lol
Chas Brown