¿Cómo funciona el algoritmo en el Proyecto Euler 3?

No parece que la solución sea correcta para casos generales. Tomemos 36 por ejemplo, el factor primo más grande es 3 pero el código devolverá 9. Para 108, dará 1.

Lo que podemos entender del código es que, dado [matemáticas] n = p_ {1} ^ {m_ {1}} p_ {2} ^ {m_ {2}}… .p_ {i} ^ {m_ {i}} [/ math], seguirá dividiendo el número [math] n [/ math] hasta el segundo último primo, [math] p_ {i-1} [/ math] como [math] p_ {i-1} < p_ {i} \ implica p_ {i-1} ^ {2} <p_ {i-1} ^ {m_ {i-1}} p_ {i} ^ {m_ {i}} [/ math]. Ahora hay tres casos a considerar para la última prima,

  1. [matemática] m_ {i} = 1 [/ matemática], en este caso, el código se detendrá como [matemática] n = p_ {i} [/ matemática] ya que todos los demás números primos ya han dividido [matemática] n [/ math] y devolverá [math] p_ {i} [/ math].
  2. [matemática] m_ {i} = 2 [/ matemática], en este caso el código se detendrá aquí y devolverá [matemática] p_ {i} ^ {2} [/ matemática], esta es una respuesta incorrecta.
  3. [math] m_ {i}> 2 [/ math], en este caso habrá una iteración más y [math] n [/ math] se dividirá entre [math] p_ {i} [/ math] hasta que se reduzca a 1 y el código devolverá 1. Otra respuesta incorrecta.

No soy un programador de Python, pero esto no es difícil.
La razón por la que no funciona es porque debería ser> =

Lo que sucede en el ejemplo de 36, es que divide 2, divide 2. 9. Luego verifica, sí 9 no es más grande que i ^ 2. Entonces el ciclo se detiene a las 9.

Ahora la factorización prima es algo así para cualquier número. Todos los números primos.
2 * 2 * 3 * 3 * 5

“mientras n% i == 0:
n = n / i: ”
Esta parte del ciclo verifica que el número sea divisible por i.
Entonces empiezo en 2. Este número anterior es divisible por 2.
Entonces 2 * 2 * 3 * 3 * 5/2 = 2 * 3 * 3 * 5.
Aún divisible
Entonces 2 * 3 * 3 * 5/2 = 3 * 3 * 5
Ya no es divisible por 2.

mientras i * i <= n:
lazo interno
i = i + 1

El bucle externo incrementa i, así que ahora verificamos si el número es divisible por 3.
3 * 3 * 5/3 = 3 * 5

Así que seguimos hasta llegar a ese último número.
5. Ahora 5 es ahora más pequeño que i ^ 2.

Entonces sabemos que el mayor número de esta factorización es 5.

Editar:
Decidí mirarlo de nuevo, por error utilicé i como salida.
i-1 es el último número que se puede extraer, antes de que el n final sea 1.
i es 1 demasiado grande ya que todavía está en el bucle cuando aumenta y finalmente resuelve que es demasiado grande.

Entonces imprimí i-1