Was ist mein exponentielles Potenzial?

14

Wir definieren das N- Exponentialpotential einer positiven ganzen Zahl M als die Anzahl der Präfixe von M N , die perfekte N- Potenzen sind.

Die Präfixe einer Ganzzahl sind alle aufeinander folgenden Teilfolgen von Ziffern, die mit der ersten beginnen und in der Basis 10 als Zahlen interpretiert werden. Die Präfixe von 2744 lauten beispielsweise 2 , 27 , 274 und 2744 .

Ein Präfix P ist eine perfekte N- Potenz, wenn es eine ganze Zahl K gibt, so dass K N = P ist . Zum Beispiel ist 81 eine perfekte 4- Potenz, weil 3 4 = 81 ist .


Berechnen Sie bei zwei streng positiven ganzen Zahlen M und N das N- Exponential von M gemäß der obigen Definition.

Zum Beispiel kann das 2 -exponential Potential von 13 ist 3 , weil 13 2 ist 169 , und 1 , 16 und 169 sind alle perfekt Quadrate.

Testfälle

Natürlich werden die Ausgänge fast immer ziemlich klein sein, weil die Leistungen ... nun ja ... exponentiell anwachsende Funktionen sind und es eher selten ist, mehrere perfekte Leistungspräfixe zu haben.

M, N     -> Output

8499, 2  -> 1
4,    10 -> 2
5,    9  -> 2
6,    9  -> 2
13,   2  -> 3
Mr. Xcoder
quelle
Hallo, wie ist die Ausgabe von: (4, 10) 2 und nicht 1? weil 4 macht 10 ist 1048576, 1 ist eine perfekte Macht, aber nicht 10
Ali ISSA
@AliISSA Hi, Der Ausgang für 4, 10ist 2 , weil 1 eine perfekte 10-Potenz ist und 1048576 auch eine perfekte 10-Potenz ist ( 10 , 104 , 1048 , 10485 und 104857 nicht). Es gibt also 2 gültige Präfixe, die Ausgabe ist also 2.
Mr. Xcoder

Antworten:

10

Brachylog , 12 Bytes

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

Probieren Sie es online!

Erläuterung

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

Gelee , 10 Bytes

*DḌƤÆE%Ḅċ0

Probieren Sie es online!

Wie es funktioniert

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

Probieren Sie es online!

Extrahiert die Präfixe arithmetisch durch Wiederholen \x->div x 10. Ich habe versucht, die letzte Zeile ohne Punkte auszudrücken, aber keinen kürzeren Ausdruck gefunden.

xnor
quelle
2

05AB1E , 8 Bytes

mηÓ¹%O0¢

Probieren Sie es online!

Verwendet den 10-Byte-Algorithmus von Dennis Jelly. Die Eingaben erfolgen in umgekehrter Reihenfolge.

Erik der Outgolfer
quelle
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]]

Probieren Sie es online!

nimi
quelle
1

Java (OpenJDK 9) , 105 Byte

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

Probieren Sie es online!

Credits

Olivier Grégoire
quelle
1
.startsWith(""+(int)Math.pow(k,n))kann .matches((int)Math.pow(k,n)+".*")für -1 Byte sein.
Kevin Cruijssen
1

Perl 6 , 40 Bytes

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

Probieren Sie es online!

nwellnhof
quelle
Wenn Sie einer &fooVariablen ein Callable zuweisen, können Sie es wie eine Unterroutine aufrufen foo( 'bar' )oder foo 'bar'müssen es nicht einschließen &. Ich meine, Sie haben es nicht geschrieben als &say(&f(|$_))( sayist in keiner Weise speziell)
Brad Gilbert b2gills
@ BradGilbertb2gills Ich benutze Perl 6 nur für Code-Golf und muss noch viel lernen, also danke für den Tipp.
Nwellnhof
0

Jelly , 14 Bytes

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

Probieren Sie es online! oder sehen Sie sich die Testsuite an

Wie es funktioniert

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

Ruby , 60 Bytes

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

Vieles ist mit Gleitkommafehlern zu tun

Probieren Sie es online!

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

Probieren Sie es online!

In den Testfällen wird n als double-Wert (2.0, 10.0, 9.0) übergeben, damit ich beim Aufruf von Math.pow () nicht nach double konvertieren muss.

Makotosan
quelle
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

Probieren Sie es online!

Danke für 1 von ovs.

Chas Brown
quelle
@ovs: d'oh! habe in letzter Zeit zu viel Javascript codiert ... dachte, ich brauche math.round()lol
Chas Brown