Para ser más general: un árbol de factores para un número entero [matemáticas] N [/ matemáticas] es un árbol que descompone este número entero en sus factores, hasta los factores primos en las hojas. Entonces, si tomas los enteros de todas las hojas, obtienes la factorización prima para [math] N [/ math].
Aquí hay un procedimiento recursivo simple que puede usar para construir un árbol de factores binarios para cualquier número entero [math] N [/ math]:
# Codificamos nuestro árbol binario como un triple:
# (raíz, subárbol izquierdo, subárbol derecho).
factor_tree (N)
si (N es primo)
return (N, , )
más
F = factor primo más pequeño de N
return (N, factor_tree (N / F), factor_tree (F))
Tenga en cuenta que el árbol de factores binarios generalmente no es único, dado un número entero [math] N [/ math]. El árbol producido por el algoritmo anterior estará bastante desequilibrado (ya que agregamos una hoja en cada paso), pero sigue siendo un árbol de factores.
- ¿Puedes probar, [matemáticas] 1 + 2 + 3 + \ cdots + n = \ frac {n (n + 1)} 2 [/ matemáticas] con [matemáticas] n [/ matemáticas] como un entero?
- ¿Cuál es el caso patológico del método de división para funciones hash [matemáticas] h (k) = k \ pmod m [/ matemáticas]?
- Cómo resolver esta recurrencia [matemáticas] T (n) = T (n-1) + 2 ^ n [/ matemáticas]
- Cómo resolver esta recurrencia T (n) = T (7n / 10) + n
- Cómo resolver la pregunta 8
Aquí hay una implementación Python muy simple (pero no la más eficiente) de este algoritmo:
def factor_tree (n):
para i en xrange (2, n):
si n% i == 0:
return (n, factor_tree (n / i), factor_tree (i))
retorno (n, Ninguno, Ninguno)
Llamar a factor_tree (180) da como resultado:
(180, (90, (45, (15, (5, Ninguno, Ninguno), (3, Ninguno, Ninguno)),
(3, Ninguno, Ninguno)), (2, Ninguno, Ninguno)), (2, Ninguno, Ninguno))
que se puede visualizar como:
Mirando las hojas, puedes ver que
[matemáticas] 180 = 5 \ cdot 3 \ cdot 3 \ cdot 2 \ cdot 2 [/ matemáticas]