Creo que es más fácil explicar este desafío de manera secuencial. Comience con un número de entrada N y:
- Encuentra su factor primo más alto
- Verifique los números arriba y abajo de N y vea si el factor primo más alto es más alto (es decir, el factor primo más alto de N-1 y / o N + 1 es más alto que el factor de N) .
- Continúe verificando los números más altos o más bajos vecinos de N en las direcciones donde los factores más altos están aumentando ( (N-2, N-3 ...) y / o (N + 2, N + 3 ...) y así en)
- Una vez que no hay factores primos en ninguna dirección que sean más altos que los que ya hemos encontrado, nos detenemos y producimos el factor primo más alto que hemos encontrado.
Veamos un ejemplo:
245
tiene los factores primos 5, 7, 7
. Sus vecinos son:
244 -> 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
El factor primo más alto está aumentando en ambas direcciones, por lo que debemos mirar al próximo vecino:
243 -> 3, 3, 3, 3, 3
244 -> 2, 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
247 -> 13, 19
Los factores primos más altos ahora están disminuyendo en ambas direcciones, por lo que el factor primo más alto que hemos encontrado es 61
y, por lo tanto, debe devolverse.
Otro ejemplo:
Echemos un vistazo a 1024
. Sus factores primos son 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
. Los factores primos de sus vecinos más cercanos son:
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
El factor primo más alto está aumentando en ambas direcciones, de 2
a 31
o 41
. Miremos a los vecinos:
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
El factor primo más alto para 1022
es 73
, y el factor primo más alto para 1026
es 19
. Como 19
es más bajo de 41
lo que no nos interesa. Sigue aumentando para números más pequeños que N, así que revisaremos el siguiente en esa dirección :
1021 -> 1021
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
1021
es un primo y el primo más alto que hemos encontrado, por lo que debe devolverse.
Reglas:
- Solo obtendrá positivo
N
mayor1
y menor que2^31-2
. - Los formatos de entrada y salida son opcionales, pero los números deben estar en la base 10.
- Debe continuar buscando primos más altos siempre que el valor más alto aumente en esa dirección. Las direcciones son independientes entre sí.
Casos de prueba:
Formato: N, highest_factor
2, 3
3, 3
6, 7
8, 11
24, 23
1000, 997
736709, 5417
8469038, 9431
2
para N. Luego obtenemos5
para N-1 y61
para N + 1. Luego obtenemos19
N-2 y67
N + 2. ¿Deberíamos seguir intentando números más bajos, desde19>5
o parar, desde entonces5<61
? Es decir, ¿se mantienen los máximos por lado? (No estoy seguro si el ejemplo es matemáticamente posible).N=2
en realidad parece ser un caso límite ya que1
no tiene factores primos, por lo que no hay un factor primo máximo con el que podamos comparar para decidir si debemos continuar.Respuestas:
Mathematica,
8274 bytes¡Gracias a Martin Ender por guardar 8 bytes!
Función sin nombre que toma una entrada entera y devuelve un entero.
±n_:=#//.x_/;l[t=x+n]>l@x:>t
define una función unaria±
que sigue aumentando la entrada de enteros de la función globaln
siempre que el factor primo más grande aumente. (La función de factor primo más grande se define conl=FactorInteger[#][[-1,1]]&
.){±-1,±1}
Por lo tanto, aplica esa función dos veces al entero de entrada, con incremento-1
y nuevamente con incremento1
. Luego,Max@@(...l...)/@...
toma el mayor de los dos factores primos más grandes así encontrados.Presentación previa:
fuente
@@@
(y puede usarl@x
allí):Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&
Perl, 137 bytes
122 bytes de código + 15 bytes para
-p
y-Mntheory=:all
.Para ejecutarlo:
Si no lo ha
ntheory
instalado, puede instalarlo escribiendo(echo y;echo) | perl -MCPAN -e 'install ntheory'
su terminal.fuente
Ruby, 99 bytes
Explicación:
fuente