рэкет , 83 79 байт
(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
Попробуйте онлайн!
(Я не уверен, что существует консенсус относительно того, что представляет собой полное решение Racket, поэтому я придерживаюсь соглашения Mathematica, что чистая функция считается.)
Как это работает
factorizeдает факторизацию как список пар: (factorize 108)дает '((2 2) (3 3)). Второй элемент пары задается cadrкак сокращение для композицииcar (заголовок списка) сcdr (хвост списка).
Я чувствую себя глупо, (cadr (argmax cadr list))чтобы найти максимум вторых элементов, ноmax не работает со списками:(max (map cadr list)) не делает то, что мы хотим. Я не эксперт в Racket, поэтому, возможно, есть стандартный лучший способ сделать это.
Ракетка, 93 байта
(λ(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))
Попробуйте онлайн!
Как это работает
Альтернативная версия, которая не импортирует, factorizeа делает все с нуля, более или менее. Функция (p m d)находит наибольшую степень dделения, mа затем мы просто находим наибольшее значение (p n d)для dмежду 2и n. (Нам не нужно ограничивать это простыми числами, поскольку не будет составной силы, которая работает лучше, чем простые силы.)