Para limitar su espacio de búsqueda, debe comenzar en 2 y trabajar hasta la raíz cuadrada del número. Hay muchos más números (en un espacio de búsqueda finito) divisibles por 2 que por 27, por lo que es más probable obtener un divisor bajo que uno alto, estadísticamente hablando.
Cuando procesa (por ejemplo) 1,000,000, encontrará una gran diferencia cuando use la raíz cuadrada, en lugar de la mitad del valor. La diferencia es entre un espacio de búsqueda de 500,000 para su método y 1,000 para el método de raíz cuadrada es considerable.
Otra ventaja es reducir a la mitad el espacio de búsqueda en el frente descontando múltiplos de dos. Entonces, cuando tienes tu divisor más bajo, el más alto es simplemente el número dividido por eso.
Pseudocódigo:
if n % 2 == 0: # Halve search space straight up.
print n/2
else:
i = 3 # Start at 3.
while i * i <= n: # Or use i <= sqrt(n), provided sqrt is calc'ed once
if n % i == 0:
print n/i # If multiple, get opposite number, print and stop
break
i = i + 2 # Only need to process odd numbers
¿N no será N el mayor divisor de una N? Tal vez "devolver el número"; es la función que estás buscando? – SadSido
El divisor más grande de N es N en sí ... – Vladimir
Primera mejora: no comience en 'número/2', sino en' sqrt (número) '. – phimuemue