Jaki jest mój potencjał wykładniczy?

14

Zdefiniujemy N- wykładniczy potencjał dodatniej liczby całkowitej M jako liczbę prefiksów M N, które są doskonałymi mocami N.

Przedrostki liczby całkowitej są ciągłymi podciągami cyfr rozpoczynającymi się od pierwszego, interpretowanymi jako liczby w podstawie 10. Na przykład przedrostki 2744 to 2 , 27 , 274 i 2744 .

Przedrostek P jest doskonałym N parowe Jeżeli istnieje liczba całkowita K , tak że K N = P . Na przykład 81 jest idealną siłą 4, ponieważ 3 4 = 81 .


Biorąc pod uwagę dwie ściśle dodatnie liczby całkowite M i N , oblicz N- wykładniczy potencjał M zgodnie z powyższą definicją.

Na przykład potencjał wykładniczy 2 wynoszący 13 wynosi 3, ponieważ 13 2 wynosi 169 i 1 , 16 oraz 169 są idealne kwadratów.

Przypadki testowe

Oczywiście, wyjścia prawie zawsze będą dość małe, ponieważ moce są ... no cóż ... wykładniczo rosnące funkcje i posiadanie wielu prefiksów idealnej mocy jest raczej rzadkie.

M, N     -> Output

8499, 2  -> 1
4,    10 -> 2
5,    9  -> 2
6,    9  -> 2
13,   2  -> 3
Pan Xcoder
źródło
cześć, w jaki sposób wynik: (4, 10) wynosi 2, a nie 1? ponieważ 4 moc 10 to 1048576, 1 to moc doskonała, ale nie 10
Ali ISSA
@AliISSA Cześć, wyjście 4, 10jest 2 , ponieważ jeden jest doskonałym 10 mocy i 1048576 jest także doskonały 10 mocy (przy 10 , 104 , 1048 , 10485 i 104857 nie). Zatem istnieją 2 poprawne prefiksy, więc wynik to 2.
Pan Xcoder

Odpowiedzi:

10

Brachylog , 12 bajtów

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

Wypróbuj online!

Wyjaśnienie

{^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
źródło
6

Galaretka , 10 bajtów

*DḌƤÆE%Ḅċ0

Wypróbuj online!

Jak to działa

*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
źródło
3

Haskell , 56 bajtów

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

Wypróbuj online!

Wyodrębnia arytmetycznie prefiksy przez powtórzenie \x->div x 10. Próbowałem wyrazić ostatnią linię bez punktów, ale nie znalazłem krótszego wyrażenia.

xnor
źródło
2

05AB1E , 8 bajtów

mηÓ¹%O0¢

Wypróbuj online!

Wykorzystuje 10-bajtowy algorytm Dennisa Jelly. Wejścia są w odwrotnej kolejności.

Erik the Outgolfer
źródło
1

Haskell, 73 bajty

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

Wypróbuj online!

nimi
źródło
1

Java (OpenJDK 9) , 105 bajtów

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

Wypróbuj online!

Kredyty

Olivier Grégoire
źródło
1
.startsWith(""+(int)Math.pow(k,n))może być .matches((int)Math.pow(k,n)+".*")dla -1 bajtów.
Kevin Cruijssen
1

Perl 6 , 40 bajtów

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

Wypróbuj online!

nwellnhof
źródło
Jeśli przypiszesz &foozmienną do wywołania do zmiennej, możesz wywołać ją tak, jak podprogram foo( 'bar' )lub foo 'bar'nie musisz go uwzględniać &. Mam na myśli, że nie napisałeś tego jako &say(&f(|$_))( saynie jest w żaden sposób wyjątkowy)
Brad Gilbert b2gills
@ BradGilbertb2gills Używam Perla 6 tylko do golfa kodowego i wciąż mam wiele do nauczenia się, więc dziękuję za podpowiedź.
nwellnhof
0

Galaretka , 14 bajtów

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

Wypróbuj online! lub zobacz pakiet testowy

Jak to działa

*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
Cairney Coheringaahing
źródło
0

Rubinowy , 60 bajtów

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

w dużej mierze dotyczy to błędów zmiennoprzecinkowych

Wypróbuj online!

Asone Tuhid
źródło
0

Kotlin , 89 bajtów

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

Wypróbuj online!

W przypadkach testowych przekazano in jako podwójne wartości (2.0, 10.0, 9.0), dzięki czemu nie muszę konwertować na podwójne podczas wywoływania Math.pow ().

Makotosan
źródło
0

Python 2 , 83 71 70 bajtów

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

Wypróbuj online!

Dzięki za 1 z jaj.

Chas Brown
źródło
@ovs: d'oh! ostatnio kodowałem za dużo javascript ... myślałem, że będę potrzebował math.round()lol
Chas Brown