Üstel potansiyelim nedir?


14

Biz tanımlayacağız N -exponential potansiyeli pozitif bir tamsayı ait M önekleri sayısı olarak M N mükemmel N -powers.

Bir tamsayı önekleri tüm Örneğin taban 10'da numaraları olarak anlaşılmaktadır birinci ile başlar basamak bitişik alt diziler vardır, ön kodları 2744 olan 2 , 27 , 274 ve 2744 .

Bir önek P mükemmel olan , N , bir tamsayıdır mevcutsa Güç K şekilde K , N = P . Örneğin, 81 mükemmel bir 4- güçtür çünkü 3 4 = 81'dir .


Verilen iki katı pozitif tamsayı M ve K , hesaplamak K arasında -exponential potansiyel M yukarıdaki tanıma göre.

Örneğin, 2 arasında -exponential potansiyel 13 olan 3 için 13 2 olan 169 ve 1 , 16 ve 169 , tüm mükemmel karelerdir.

Test senaryoları

Doğal olarak, çıktılar neredeyse her zaman oldukça küçük olacaktır, çünkü güçler ... iyi ... katlanarak büyüyen işlevler ve çoklu mükemmel güç öneklerine sahip olmak oldukça nadirdir.

M, N     -> Output

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

merhaba, nasıl çıktı: (4, 10) 2 değil 1? çünkü 4 güç 10 1048576, 1 mükemmel bir güçtür, ancak 10 değil
Ali ISSA

@AliISSA Merhaba, çıkış 4, 10ise 2 , çünkü 1 mükemmel bir 10 güç ve 1048576 (iken, aynı zamanda mükemmel bir 10 güç 10 , 104 , 1048 , 10485 ve 104.857 değildir). Bu nedenle, 2 geçerli önek vardır, bu nedenle çıktı 2'dir.
Bay Xcoder

Yanıtlar:


10

Brachylog , 12 bayt

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

Çevrimiçi deneyin!

açıklama

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

Jöle , 10 bayt

*DḌƤÆE%Ḅċ0

Çevrimiçi deneyin!

Nasıl çalışır

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

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

Çevrimiçi deneyin!

Ön ekleri tekrarlanarak aritmetik olarak ayıklar \x->div x 10. Son satırı noktadan ifade etmeyi denedim ama daha kısa bir ifade bulamadım.






1

Perl 6 , 40 bayt

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

Çevrimiçi deneyin!


Bir &foodeğişkene bir Callable öğesi atarsanız, onu bir alt rutine yaptığınız foo( 'bar' )veya foo 'bar'eklemenize gerek olmadığı gibi çağırabilirsiniz &. Ben bunu yazmadım demek &say(&f(|$_))( sayherhangi bir şekilde özel değil)
Brad Gilbert b2gills

@ BradGilbertb2gills Sadece kod golf için Perl 6 kullanıyorum ve hala öğrenecek çok şeyim var, bu yüzden bahşiş için teşekkürler.
Ocak 18'de nwellnhof

0

Jöle , 14 bayt

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

Çevrimiçi deneyin! veya test paketini görün

Nasıl çalışır

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

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

Çevrimiçi deneyin!

Test durumlarda, n'yi çift değer (2.0, 10.0, 9.0) olarak geçirdi, böylece Math.pow () çağrılırken ikiye dönüştürmem gerekmiyor.


0

Python 2 , 83 71 70 bayt

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

Çevrimiçi deneyin!

Ovs'tan 1 için teşekkürler.


@ovs: d'oh! son zamanlarda çok fazla javascript kodlama ... math.round()lol ihtiyacım olduğunu düşünüyordum
Chas Brown

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.