Racket , 83 79 byte
(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
Cobalah online!
(Saya tidak yakin apakah ada konsensus tentang apa yang merupakan solusi Racket lengkap, jadi saya akan pergi dengan konvensi Mathematica bahwa fungsi murni diperhitungkan.)
Bagaimana itu bekerja
factorize
memberi faktorisasi sebagai daftar pasangan: (factorize 108)
memberi '((2 2) (3 3))
. Elemen kedua dari pasangan diberikan oleh cadr
, singkatan untuk komposisi car
(kepala daftar) dengan cdr
(ekor daftar).
Saya merasa konyol melakukan (cadr (argmax cadr list))
untuk menemukan maksimum dari elemen kedua, tetapi max
tidak bekerja pada daftar: (max (map cadr list))
tidak melakukan apa yang kita inginkan. Saya bukan ahli Racket, jadi mungkin ada cara standar yang lebih baik untuk melakukan ini.
Racket, 93 byte
(λ(n)(define(p d m)(if(=(gcd m d)d)(+(p d(/ m d))1)0))(p(argmax(λ(d)(p d n))(range 2 n))n))
Cobalah online!
Bagaimana itu bekerja
Versi alternatif yang tidak mengimpor factorize
dan malah melakukan semuanya dari awal, lebih atau kurang. Fungsi (p m d)
menemukan kekuatan tertinggi d
yang membagi m
dan kemudian kita hanya menemukan nilai tertinggi (p n d)
untuk d
antara 2
dan n
. (Kita tidak perlu membatasi ini pada bilangan prima, karena tidak akan ada kekuatan gabungan yang bekerja lebih baik daripada kekuatan utama.)