Saltar al contenido

Factorización prima de un factorial

Hola usuario de nuestro sitio, encontramos la respuesta a tu búsqueda, deslízate y la encontrarás más abajo.

Solución:

Considere, por ejemplo, 33!. Es un producto de:

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

los factores son:

2   2   2   2    2     2     2     2     2     2     2     2     2     2     2     2
    2       2          2           2           2           2           2           2
            2                      2                       2                       2
                                   2                                               2
                                                                                   2
  3     3     3        3        3        3        3        3        3        3        3
              3                          3                          3
                                                                    3
      5          5              5              5              5              5
                                                              5
          7                  7                    7                    7
                   11                               11                               11
                         13                                     13
                                     17
                                           19
                                                       23
                                                                         29    31

¿Ves el patrón?

33! = 2^( 33 div 2 + 33 div 4 + 33 div 8 + 33 div 16 + 33 div 32) *
      3^( 33 div 3 + 33 div 9 + 33 div 27) *
      5^( 33 div 5 + 33 div 25) *
      ----
      7^( 33 div 7) * 11^( 33 div 11) * 13^( 33 div 13) *
      ----
      17 * 19 * 23 * 29 * 31

Por lo tanto, para encontrar la factorización prima de n! sin hacer ninguna multiplicación o factorización, solo necesitamos tener la lista ordenada de primos no mayor que n, que procesamos (con una división entera repetida y una posible suma) en tres etapas: números primos que son más pequeños o iguales a la raíz cuadrada de n; tales que sean menores o iguales a n/2; y el resto.

En realidad, con la evaluación perezosa es incluso más simple que eso. Asumiendo primes ya está implementado devolviendo un flujo de números primos en orden, en Haskell, la factorización factorial se encuentra como

ff n = [(p, sum . takeWhile (> 0) . tail . iterate (`div` p) $ n) 
         | p <- takeWhile (<= n) primes]

-- Prelude> ff 33
-- [(2,31),(3,15),(5,7),(7,4),(11,3),(13,2),(17,1),(19,1),(23,1),(29,1),(31,1)]

porque 33 div 4 es (33 div 2) div 2, etc.

Cada número se puede representar mediante una multiplicación única (hasta reordenar) de números primos, denominada factorización prima del número, ya que está encontrando los factores primos que pueden crear ese número de forma única.

2^3=8

3^1=3

5^1=5

y 8*3*5=120

Pero esto también significa que: (2^3)*(3^1)*(5^1) = 120

No está diciendo que 2 aparece 3 veces como un dígito en el número 120, lo que obviamente no es así, sino más bien multiplicar 2 por 2 por 2, para un total de 3 dos. Lo mismo ocurre con el 3 y el 5, que ocurren una vez en la factorización prima de 120. La expresión que mencionas te muestra esta factorización prima única del número 120. Esta es una forma de obtener la factorización prima de un número en Python:

def pf(number):
    factors=[]
    d=2
    while(number>1):
        while(number%d==0):
            factors.append(d)
            number=number/d
        d+=1
    return factors

Al ejecutarlo, obtienes:

>>> pf(120)
[2, 2, 2, 3, 5]

Lo que multiplicado da 120, como se explicó anteriormente. Aquí hay un pequeño diagrama para ilustrar esto con mayor claridad:

ingrese la descripción de la imagen aquí

2^3 es otra forma de escribir 23, o dos elevado a la tercera potencia. (2^3)(3^1)(5^1) = 23 × 3 × 5 = 120

(2^3)(3^1)(5^1) es solo la factorización prima de 120 expresada en texto ASCII sin formato en lugar de con un formato bastante matemático. Su tarea requiere salida en este formulario simplemente porque es más fácil para usted de lo que sería para usted averiguar cómo generar ecuaciones formateadas (y probablemente porque es más fácil de procesar para la calificación).

Las convenciones utilizadas aquí para expresar ecuaciones en texto sin formato son lo suficientemente estándar como para que pueda escribir este texto directamente en google.com o wolframalpha.com y calculará el resultado como 120 para usted: (2 ^ 3) (3 ^ 1) ( 5 ^ 1) en wolframalpha.com / (2 ^ 3) (3 ^ 1) (5 ^ 1) en google.com


WolframAlpha también puede calcular factorizaciones primas, que puede utilizar para obtener resultados de pruebas para comparar su programa. Por ejemplo: factorización prima de 1000!

Una solución ingenua que realmente calcula el factorial solo manejará números hasta 12 (si usa entradas de 32 bits). ¡Esto es porque 13! es ~ 6.2 mil millones, mayor que el número más grande que se puede representar en un int de 32 bits.

Sin embargo, es posible manejar entradas mucho más grandes si evita calcular el factorial primero. No te voy a decir exactamente cómo hacerlo porque averiguarlo es parte de tu tarea o puedes preguntarle a tus profesores / profesores. Pero a continuación se muestran algunas sugerencias.

aB × aC = ab + c

ecuación (a) 10 = 21 × 51
ecuación (b) 15 = 31 × 51

10 × 15 =? Responda usando los lados derechos de las ecuaciones (a) y (b), no con el número 150.

10 × 15 = (21 × 51) × (31 × 51) = 21 × 31 × (51 × 51) = 21 × 31 × 52

Como puede ver, calcular la factorización prima de 10 × 15 se puede hacer sin multiplicar 10 por 15; En su lugar, puede calcular la factorización prima de los términos individuales y luego combinar esas factorizaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *