Apa potensi eksponensial saya?

14

Kami akan menentukan N potensi -exponential dari bilangan bulat positif M sebagai hitungan prefiks dari M N yang sempurna N -powers.

Awalan bilangan bulat adalah semua angka berikutnya yang bersebelahan yang dimulai dengan angka pertama, diartikan sebagai angka pada basis 10. Sebagai contoh, awalan 2744 adalah 2 , 27 , 274 dan 2744 .

Sebuah awalan P adalah sempurna N -power jika ada integer K sehingga K N = P . Misalnya, 81 adalah kekuatan 4 sempurna karena 3 4 = 81 .


Diberikan dua bilangan bulat positif M dan N , hitung potensial N -eksponensial M sesuai dengan definisi di atas.

Misalnya, 2- potensi potensial dari 13 adalah 3 karena 13 2 adalah 169 , dan 1 , 16 dan 169 semuanya kotak sempurna.

Uji kasus

Tentu saja, output akan hampir selalu sangat kecil karena kekuatan adalah ... yah ... fungsi yang tumbuh secara eksponensial dan memiliki beberapa awalan kekuatan sempurna agak jarang.

M, N     -> Output

8499, 2  -> 1
4,    10 -> 2
5,    9  -> 2
6,    9  -> 2
13,   2  -> 3
Tuan Xcoder
sumber
halo, bagaimana output dari: (4, 10) adalah 2 dan bukan 1? karena 4 kekuatan 10 adalah 1048576, 1 adalah kekuatan sempurna tetapi bukan 10
Ali ISSA
@AliISSA Hi, Output untuk 4, 10ini 2 , karena 1 adalah sempurna 10-daya dan 1.048.576 juga sempurna 10-daya (sementara 10 , 104 , 1048 , 10485 dan 104.857 tidak). Jadi, ada 2 awalan yang valid, jadi outputnya adalah 2.
Tn. Xcoder

Jawaban:

10

Brachylog , 12 byte

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

Cobalah online!

Penjelasan

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

Jelly , 10 byte

*DḌƤÆE%Ḅċ0

Cobalah online!

Bagaimana itu bekerja

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

Cobalah online!

Ekstrak awalan secara hitung secara berulang \x->div x 10. Saya mencoba mengekspresikan baris terakhir yang bebas titik tetapi tidak menemukan ekspresi yang lebih pendek.

Tidak
sumber
2

05AB1E , 8 byte

mηÓ¹%O0¢

Cobalah online!

Menggunakan algoritma 10-byte Dennis's Jelly. Input dalam urutan terbalik.

Erik the Outgolfer
sumber
1

Haskell, 73 byte

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

Cobalah online!

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

Cobalah online!

Kredit

Olivier Grégoire
sumber
1
.startsWith(""+(int)Math.pow(k,n))bisa .matches((int)Math.pow(k,n)+".*")untuk -1 byte.
Kevin Cruijssen
1

Perl 6 , 40 byte

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

Cobalah online!

nwellnhof
sumber
Jika Anda menetapkan Callable ke &foovariabel, Anda dapat memanggilnya seperti yang Anda lakukan subrutin foo( 'bar' )atau foo 'bar'tidak perlu menyertakan &. Maksud saya Anda tidak menuliskannya &say(&f(|$_))( saytidak khusus dalam hal apa pun)
Brad Gilbert b2gills
@ BradGilbertb2gills Saya hanya menggunakan Perl 6 untuk kode golf dan masih harus banyak belajar, jadi terima kasih atas tipnya.
nwellnhof
0

Jelly , 14 byte

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

Cobalah online! atau lihat test suite

Bagaimana itu bekerja

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

Haskell , 83 byte

import Data.List
m#n=sum[1|x<-read<$>(tail$inits$show(m^n)),x`elem`((^n)<$>[1..m])]

Cobalah online!

Cristian Lupascu
sumber
0

Ruby , 60 byte

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

banyak dari itu untuk menangani kesalahan floating point

Cobalah online!

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

Cobalah online!

Dalam kasus uji, diteruskan dalam n sebagai nilai ganda (2.0, 10.0, 9.0) sehingga saya tidak perlu mengonversi menjadi ganda saat memanggil Math.pow ().

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

Cobalah online!

Terima kasih untuk 1 dari ovs.

Chas Brown
sumber
@ovs: d'oh! telah terlalu banyak mengkode javascript akhir-akhir ini ... berpikir aku perlu math.round()lol
Chas Brown