Qual è il mio potenziale esponenziale?


14

Definiremo il potenziale esponenziale di N di un intero positivo M come il conteggio dei prefissi di M N che sono perfetti N- poteri.

I prefissi di un numero intero sono tutte le sottosequenze contigue di cifre che iniziano con il primo, interpretate come numeri nella base 10. Ad esempio, i prefissi di 2744 sono 2 , 27 , 274 e 2744 .

Un prefisso P è un perfetto N -power se esiste un intero K tale che K N = P . Ad esempio, 81 è un perfetto 4- potenza perché 3 4 = 81 .


Dati due numeri interi strettamente positivi M e N , calcolare il potenziale esponenziale N di M secondo la definizione sopra.

Ad esempio, il potenziale esponenziale di 2 di 13 è 3 perché 13 2 è 169 e 1 , 16 e 169 sono tutti quadrati perfetti.

Casi test

Naturalmente, le uscite saranno quasi sempre piuttosto ridotte perché le potenze sono ... beh ... le funzioni in crescita esponenziale e con più prefissi a potenza perfetta sono piuttosto rare.

M, N     -> Output

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

ciao, come l'output di: (4, 10) è 2 e non 1? perché 4 potenza 10 è 1048576, 1 è una potenza perfetta ma non 10
Ali ISSA

@AliISSA Ciao, L'output per 4, 10è 2 , perché 1 è un perfetto 10-power e 1048576 è anche un perfetto 10-power (mentre 10 , 104 , 1048 , 10485 e 104857 non lo sono). Quindi, ci sono 2 prefissi validi, quindi l'output è 2.
Mr. Xcoder

Risposte:


10

Brachylog , 12 byte

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

Provalo online!

Spiegazione

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

Gelatina , 10 byte

*DḌƤÆE%Ḅċ0

Provalo online!

Come funziona

*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 byte

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

Provalo online!

Estrae i prefissi aritmeticamente ripetendo \x->div x 10. Ho provato a esprimere l'ultima riga senza punti ma non ho trovato un'espressione più breve.






1

Perl 6 , 40 byte

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

Provalo online!


Se assegni una Callable a una &foovariabile puoi chiamarla come faresti con una subroutine foo( 'bar' )o foo 'bar'non è necessario includerla &. Voglio dire, non l'hai scritto come &say(&f(|$_))( saynon è speciale in alcun modo)
Brad Gilbert b2gills

@ BradGilbertb2gills Uso solo Perl 6 per il golf del codice e ho ancora molto da imparare, quindi grazie per il suggerimento.
nwellnhof,

0

Gelatina , 14 byte

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

Provalo online! o vedi la suite di test

Come funziona

*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 byte

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

Provalo online!

Nei casi di test, ho passato n come valori doppi (2.0, 10.0, 9.0) in modo che non debba convertirli in doppio quando chiamo Math.pow ().


0

Python 2 , 83 71 70 byte

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

Provalo online!

Grazie per 1 da ovs.


@ovs: d'oh! ho codificato troppo javascript ultimamente ... pensavo che avrei bisogno di math.round()lol
Chas Brown

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.