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
factorizememberi 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 maxtidak 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 factorizedan malah melakukan semuanya dari awal, lebih atau kurang. Fungsi (p m d)menemukan kekuatan tertinggi dyang membagi mdan kemudian kita hanya menemukan nilai tertinggi (p n d)untuk dantara 2dan n. (Kita tidak perlu membatasi ini pada bilangan prima, karena tidak akan ada kekuatan gabungan yang bekerja lebih baik daripada kekuatan utama.)