(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
Pruébalo en línea!
(No estoy seguro de si hay un consenso sobre lo que constituye una solución Racket completa, así que voy con la convención de Mathematica de que una función pura cuenta).
Cómo funciona
factorize
da la factorización como una lista de pares: (factorize 108)
da '((2 2) (3 3))
. El segundo elemento de un par viene dado por cadr
, una abreviatura para la composición de car
(encabezado de una lista) con cdr
(cola de una lista).
Me siento tonto (cadr (argmax cadr list))
por encontrar el máximo de los segundos elementos, pero max
no funciona en las listas: (max (map cadr list))
no hace lo que queremos. No soy un experto en Racket, así que quizás haya una mejor manera estándar de hacer esto.
Raqueta, 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))
Pruébalo en línea!
Cómo funciona
Una versión alternativa que no importa factorize
y en su lugar hace todo desde cero, más o menos. La función (p m d)
encuentra el poder más alto de d
esa división m
y luego solo encontramos el valor más alto de (p n d)
para d
entre 2
y n
. (No necesitamos restringir esto a números primos, ya que no habrá un poder compuesto que funcione mejor que los poderes primarios).