El ejemplo que está publicando está muy relacionado con el problema # 381 de Euler. Así que publicaré una respuesta que no resuelve el problema de Euler. Publicaré cómo puedes calcular factoriales módulo a primo.
Entonces: ¿Cómo calcular n! módulo p?
Observación rápida: Si n ≥ p, entonces n! tiene un factor p, por lo que el resultado es 0. Muy rápido. Y si ignoramos el requisito de que p debería ser un primo, ¡entonces sea q el factor primo más pequeño de p, yn! módulo p es 0 si n ≥ q. Tampoco hay muchas razones para exigir que p sea primordial para responder a su pregunta.
Ahora en tu ejemplo (n - i)! para 1 ≤ i ≤ 5 surgió. No tiene que calcular cinco factoriales: ¡Calcula (n - 5) !, multiplique por (n - 4) vaya a obtener (n - 4) !, multiplique por (n - 3) para obtener (n - 3)! etc. Esto reduce el trabajo en casi un factor 5. No resuelva el problema literalmente.
La pregunta es cómo calcular n! módulo m. La forma obvia es calcular n !, un número con aproximadamente n log n dígitos decimales, y calcular el módulo restante p. Eso es trabajo duro. Pregunta: ¿Cómo podemos obtener este resultado más rápido? Al no hacer lo obvio.
Sabemos que ((a * b * c) módulo p = (((a * b) módulo p) * c) módulo p.
Para calcular n !, normalmente comenzaríamos con x = 1, luego multiplicaríamos x por 1, 2, 3, ... n. Usando la fórmula del módulo, calculamos n! módulo p sin calcular n !, comenzando con x = 1, y luego para i = 1, 2, 3, .., n reemplazamos x con (x * i) módulo p.
Siempre tenemos x <p e i <n, por lo que solo necesitamos suficiente precisión para calcular x * p, ¡no la precisión mucho más alta para calcular n !. Entonces para calcular n! módulo p para p ≥ 2 tomamos los siguientes pasos:
Step 1: Find the smallest prime factor q of p. If n ≥ q then the result is 0.
Step 2: Let x = 1, then for 1 ≤ i ≤ n replace x with (x * i) modulo p, and x is the result.
(Algunas respuestas mencionan el teorema de Wilson, que solo responde la pregunta en el caso muy especial del ejemplo dado, y es muy útil para resolver el problema de Euler # 381, pero en general no es útil para resolver la pregunta que se hizo).