Tantangan yang sederhana namun mudah-mudahan tidak sepele:
Tulis program atau fungsi yang menambah k
kekuatan membagi angka n
. Lebih spesifik:
- Input: dua bilangan bulat positif
n
dank
(atau sepasang bilangan bulat yang dipesan, dll.) - Output: jumlah dari semua pembagi positif
n
yang merupakank
kekuatan bilangan bulat
Misalnya, 11! = 39916800 memiliki enam pembagi yang berbentuk kubus, yaitu 1, 8, 27, 64, 216, dan 1728. Oleh karena itu masukan yang diberikan 39916800
dan 3
, program harus mengembalikan jumlah mereka 2044
,.
Kasus uji lainnya:
{40320, 1} -> 159120
{40320, 2} -> 850
{40320, 3} -> 73
{40320, 4} -> 17
{40320, 5} -> 33
{40320, 6} -> 65
{40320, 7} -> 129
{40320, 8} -> 1
{46656, 1} -> 138811
{46656, 2} -> 69700
{46656, 3} -> 55261
{46656, 4} -> 1394
{46656, 5} -> 8052
{46656, 6} -> 47450
{46656, 7} -> 1
{1, [any positive integer]} -> 1
Ini adalah kode golf, jadi semakin pendek kode Anda, semakin baik. Saya menyambut kode golf dalam semua jenis bahasa yang berbeda, bahkan jika beberapa bahasa lain dapat lolos dengan byte lebih sedikit dari milik Anda.
code-golf
arithmetic
number-theory
integer
Greg Martin
sumber
sumber
Jawaban:
05AB1E , 9 byte
Cobalah online!
Penjelasan
Contoh input
46656, 3
sumber
Mathematica, 28 byte
Fungsi yang tidak disebutkan namanya mengambil
n
dank
sebagai input dalam urutan itu.sumber
DivisorSum
sangat dekat menjadi berguna di sini.Haskell ,
37 3534 byteCobalah online! Pemakaian:
Kode ini sangat tidak efisien karena selalu menghitung
1^k, 2^k, ..., n^k
.Sunting: Disimpan satu byte berkat Zgarb.
Penjelasan:
sumber
mod n(x^k)
bisan`mod`x^k
.Python 2,
5452 byteTerima kasih @Rod untuk memotong 2 byte.
sumber
x%i**n==0
denganx%i**n<1
, dan pindah ke sisi lain sebagaii**n*(x%i**n<1)
Ruby, 45 byte
Akan lebih pendek menggunakan "jumlah" di Ruby 2.4. Waktunya untuk upgrade?
sumber
MATL , 10 byte
Cobalah online!
Bagaimana itu bekerja
Misalnya dengan
46656
,6
.sumber
Jelly ,
76 byte-1 byte berkat Dennis (melintasi rentang implisit)
Efisiensi yang cerdik hemat juga oleh Dennis dengan biaya 0-byte
(Sebelumnya
ÆDf*€S
akan memfilter menjaga pembagi yang memiliki kekuatan k dari setiap bilangan alami hingga n . Tetapi perhatikan bahwa n tidak dapat hanya pernah memiliki pembagi i k jika tetap memiliki pembagi i !)Cobalah online!
Bagaimana?
sumber
JavaScript (ES7),
5653 byteMembawa
n
dank
dalam sintaks currying(n)(k)
.Uji kasus
Tampilkan cuplikan kode
sumber
Perl 6 , 39 byte
Bagaimana itu bekerja
Cobalah
sumber
Japt , 10 byte
Banyak byte yang disimpan berkat @ETHproductions
Penjelasan
Uji secara online!
sumber
vU
mendeteksi angka yang dapat dibagi denganU
, atau angka yang membagiU
?fvU
memfilter ke item yang dapat dibagi olehU
;f!vU
memfilter ke item yangU
dapat dibagi oleh.!
menukar argumen.Scala 63 byte
sumber
Python 2 , 50 byte
Cobalah online! Input besar dapat melebihi kedalaman rekursi tergantung pada sistem dan implementasi Anda.
sumber
JavaScript (ES7),
4946 bytesumber
n=>k=>
? +1.i
sebagai lokal, yang biaya 4 byte tambahan, dan lupa bahwa saya bisa menyalahgunakani
dengan cara yang sama saya lakukan dengan formulasi saya yang lain.)PHP, 86 byte
Coba di sini!
Kerusakan :
sumber
for(;$x<$n=$argv[1];)$n%($x=++$i**$argv[2])?:$s+=$x;echo$s;
59 byte; membutuhkan PHP 5.6 atau lebih baru.CJam , 20 byte
Mungkin tidak golf secara optimal, tapi saya tidak melihat perubahan yang jelas untuk membuat ...
Cobalah online!
sumber
Jeli , 8 byte
Cobalah online!
( Kredit bukan milikku. )
sumber
Utilitas Bash + Unix, 44 byte
Cobalah online!
Tes berjalan:
sumber
Python , 56 byte
Cobalah online!
Cukup mudah. Satu-satunya hal yang patut dicatat adalah bahwa
j**k**-1%1
selalu mengembalikan float di [0,1) sementaran%j
selalu mengembalikan integer non-negatif, sehingga mereka hanya bisa sama jika keduanya bernilai 0 .sumber
Batch, 138 byte
Karena Batch tidak memiliki operator listrik, saya menyalahgunakan
set/a
sebagai bentukeval
. Sangat lambat kapank=1
. Aritmatika integer 32-bit membatasi nilai yang didukungn
dank
:sumber
R, 28 byte langsung, 43 byte untuk fungsi
jika n, k dalam memori:
untuk suatu fungsi:
sumber