Descomposicion factorial ejercicios

Cómo hacer la factorización de primos

Los polinomios de grado 1, como vimos en la primera lección, son polinomios en los que la suma de los exponentes de sus variables es igual a 1 y puede ser simplemente una variable, si es un polinomio con un solo término o puede tener dos términos, donde uno de ellos será de grado 0 (un número) y otro de grado 1.
Si igualamos este polinomio a cero resolvemos la ecuación resultante, obtendremos dos soluciones complejas, por lo que este polinomio sería irreducible y por tanto, también es un factor a la hora de descomponer polinomios.
Y ahora en el primer paréntesis no podemos hacer nada más, ya que es un polinomio irreducible (puedes comprobarlo intentando obtener sus raíces), pero en el tercer paréntesis volvemos a tener una resta de cuadrados, por lo que volvemos a aplicar la fórmula de la suma por diferencia:
En este punto, no podemos seguir factorizando hasta que nos quede un polinomio de grado 1 (si intentas continuar, sólo tienes que probar con 1 y -1 y no te quedará un 0 en la última fila). Por tanto, el polinomio de grado 2 que queda es un polinomio irreducible y corresponde a un factor.

Factores múltiplos y factorización de primos

1) Tratando de determinar el mayor factor primo de 600851475143, encontré este programa en línea que parece funcionar. El problema es que me cuesta entender cómo funciona exactamente, aunque entiendo lo básico de lo que hace el programa. Además, me gustaría que me aclaraseis algún método que conozcáis para encontrar factores primos, quizás sin probar cada número, y cómo funciona vuestro método.
Como ha señalado @quangpn88, este algoritmo es erróneo (!) para cuadrados perfectos como n = 4, 9, 16, … Sin embargo, el arreglo de @quangpn88 tampoco funciona, ya que dará resultados incorrectos si el mayor factor primo ocurre 3 o más veces, por ejemplo, n = 2*2*2 = 8 o n = 2*3*3*3 = 54.
Bien. Así que has dicho que entiendes lo básico, pero no estás seguro de cómo funciona EXACTAMENTE. En primer lugar, esta es una gran respuesta a la pregunta del Proyecto Euler que se deriva. He investigado mucho sobre este problema y esta es, con mucho, la respuesta más sencilla.
El bucle interno dice que mientras i se divide uniformemente en n, sustituye n por n dividido por i. Este bucle se ejecuta continuamente hasta que deja de ser cierto. Para n=20 e i=2, se sustituye n por 10, y luego de nuevo por 5. Como 2 no se divide uniformemente en 5, el bucle se detiene con n=5 y el bucle exterior termina, produciendo i+1=3.

Leer más  Sumas que den como resultado 100

Calculadora de descomposición factorial

Esta es una solución que permite seleccionar el tamaño de la permutación. Por ejemplo, además de poder generar todas las permutaciones de 10 elementos, puede generar permutaciones de pares entre 10 elementos. También permuta listas de objetos arbitrarios, no sólo enteros.
Hay una idea muy interesante detrás. Tomemos la lista A, B, C, D. Podemos construir una permutación sacando elementos de ella como de una baraja. Inicialmente podemos sacar uno de los cuatro elementos. Luego uno de los tres elementos restantes, y así sucesivamente, hasta que finalmente no nos quede nada.
Pero cada dígito sólo puede codificar opciones entre 10 alternativas. Otros sistemas que tienen un radix fijo, como el binario y el hexadecimal, también pueden codificar secuencias de opciones de un número fijo de alternativas. Queremos un sistema con un radix variable, como las unidades de tiempo, “14:05:29” es la hora 14 de 24, el minuto 5 de 60, el segundo 29 de 60.
¿Qué pasa si tomamos funciones genéricas de número a cadena y de cadena a número, y las engañamos para que usen radios mixtos? En lugar de tomar un único radix, como parseInt(‘beef’, 16) y (48879).toString(16), tomarán un radix por cada dígito.

Ejemplos de factorización de primos

Sigo pensando que la respuesta de Margus es la mejor. Sin embargo, si quieres calcular los factoriales de números dentro del rango 0 a 1 (es decir, la función gamma) también, entonces no puedes usar ese enfoque porque la tabla de búsqueda tendrá que contener infinitos valores.
Creo que la mejor solución sería usar los valores en caché, como mencionó Margus y usar la aproximación de stirlings para valores más grandes (se supone que hay que ser realmente rápido y no hay que ser tan exacto en números tan grandes).
He aquí el memoizer, que toma cualquier función de un solo argumento y la memoiza. Resulta ser marginalmente más rápido que la solución de @xPheRe, incluyendo el límite en el tamaño de la caché y la comprobación asociada, porque utilizo shortcircuiting y demás.
Este es el ejemplo de trabajo utiliza BigInt, porque muchas respuestas aquí todos escapar de la frontera segura de Número (MDN) casi de inmediato. No es el más rápido, pero es simple y por lo tanto más claro para adaptar otras optimizaciones (como un caché de los primeros 100 números).
Creo que el siguiente es el trozo de código más sostenible y eficiente de los comentarios anteriores. Puedes usar esto en tu arquitectura global de la aplicación js… y, no preocuparte por escribirlo en múltiples namespaces (ya que es una tarea que probablemente no necesita mucho aumento). He incluido 2 nombres de métodos (basado en la preferencia) pero ambos pueden ser utilizados ya que son sólo referencias.

Acerca del autor

Rebeca Sánchez

Rebeca Sánchez

Ver todos los artículos