¿Cuál es mi potencial exponencial?


14

Definiremos el potencial exponencial N de un entero positivo M como el recuento de prefijos de M N que son potencias N perfectas.

Los prefijos de un número entero son todas las subsecuencias contiguas de dígitos que comienzan con el primero, interpretados como números en la base 10. Por ejemplo, los prefijos de 2744 son 2 , 27 , 274 y 2744 .

Un prefijo P es una perfecta N -de potencia si existe un entero K tal que K N = P . Por ejemplo, 81 es una potencia perfecta de 4 porque 3 4 = 81 .


Dados dos enteros estrictamente positivos M y N , calcule el potencial N- exponencial de M de acuerdo con la definición anterior.

Por ejemplo, el potencial exponencial 2 de 13 es 3 porque 13 2 es 169 , y 1 , 16 y 169 son cuadrados perfectos.

Casos de prueba

Naturalmente, las salidas casi siempre serán bastante pequeñas porque las potencias son ... bueno ... funciones que crecen exponencialmente y tener múltiples prefijos de potencia perfecta es bastante raro.

M, N     -> Output

8499, 2  -> 1
4,    10 -> 2
5,    9  -> 2
6,    9  -> 2
13,   2  -> 3

hola, ¿cómo la salida de: (4, 10) es 2 y no 1? porque 4 power 10 es 1048576, 1 es una potencia perfecta pero no 10
Ali ISSA

@AliISSA Hola, La salida para 24, 10 es porque 1 es una potencia perfecta de 10 y 1048576 también es una potencia perfecta de 10 (mientras que 10 , 104 , 1048 , 10485 y 104857 no lo son). Por lo tanto, hay 2 prefijos válidos, por lo que la salida es 2.
Sr. Xcoder

Respuestas:


10

Brachylog , 12 bytes

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

Pruébalo en línea!

Explicación

{^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)

6

Jalea , 10 bytes

*DḌƤÆE%Ḅċ0

Pruébalo en línea!

Cómo 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.

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

Pruébalo en línea!

Extrae los prefijos aritméticamente por repetidos \x->div x 10. Intenté expresar la última línea sin puntos pero no encontré una expresión más corta.






1

Perl 6 , 40 bytes

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

Pruébalo en línea!


Si asigna un Callable a una &foovariable, puede llamarlo como lo haría con una subrutina foo( 'bar' )o foo 'bar'no es necesario incluirlo &. Quiero decir que no lo &say(&f(|$_))say
escribiste

@ BradGilbertb2gills Solo uso Perl 6 para golf de código y todavía tengo mucho que aprender, así que gracias por el consejo.
nwellnhof

0

Jalea , 14 bytes

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

Pruébalo en línea!o ver el conjunto de pruebas

Cómo 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




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()}")}

Pruébalo en línea!

En los casos de prueba, pasé n como valores dobles (2.0, 10.0, 9.0) para que no tenga que convertir a doble al llamar a Math.pow ().


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

Pruébalo en línea!

Thx para 1 de los ovs.


@ovs: ¡oh! he estado codificando demasiado JavaScript últimamente ... estaba pensando que necesitaría math.round()jajaja
Chas Brown

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.