Factorize el número debajo de la raíz, a distinguir los factores que vienen de dos en dos y dejar el resto en la raíz.
√800 = √ (2 x 2 x 2 x 2 x 5 x 2 x 5) = √ (2 x 2 x 5 x 2) = (2 x 2 x 5) √2 = 20 √2.
Y para completar, aquí un bacalao simple e:
outside_root = 1
inside_root = 800
d = 2
while (d * d <= inside_root):
if (inside_root % (d * d) == 0): # inside_root evenly divisible by d * d
inside_root = inside_root/(d * d)
outside_root = outside_root * d
else:
d = d + 1
cuando finaliza el algoritmo, raíz_exterior e raíz_interior contienen la respuesta.
Aquí la carrera con 800:
inside outside d
800 1 2 # values at beginning of 'while (...)'
200 2 2
50 4 2
50 4 3
50 4 4
50 4 5
2 20 5 # d*d > 2 so algorithm terminates
== ==
La respuesta 20√2 es aquí la última fila.
¿Puedes anotar los pasos que toma un humano? Esa es la primera tarea. – GManNickG
¿Te refieres a algún sistema de símbolos (módulo)? echa un vistazo a http://code.google.com/p/sympy/ – wuliang