(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
Experimente online!
(Não tenho certeza se existe um consenso sobre o que constitui uma solução completa do Racket, então vou com a convenção do Mathematica de que uma função pura conta.)
Como funciona
factorizedá a fatoração como uma lista de pares: (factorize 108)dá '((2 2) (3 3)). O segundo elemento de um par é dado por cadr, uma abreviação para a composição de car(cabeça de uma lista) com cdr(cauda de uma lista).
Eu me sinto boba fazendo (cadr (argmax cadr list))para encontrar o máximo dos segundos elementos, mas maxnão funciona em listas: (max (map cadr list))não faz o que queremos. Eu não sou especialista em Racket, então talvez haja uma maneira padrão melhor de fazer isso.
Raquete, 93 bytes
(λ(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))
Experimente online!
Como funciona
Uma versão alternativa que não importa factorizee faz tudo do zero, mais ou menos. A função (p m d)encontra o maior poder do dque divide me então nós apenas encontrar maior valor de (p n d)para dentre 2e n. (Não precisamos restringir isso a números primos, pois não haverá um poder composto que funcione melhor do que os poderes primos.)