L'esempio che stai postando è strettamente correlato al problema n. 381 di Eulero. Quindi posterò una risposta che non risolve il problema di Eulero. Pubblicherò come calcolare i fattoriali modulo a prime.
Quindi: come calcolare n! modulo p?
Osservazione rapida: se n ≥ p, quindi n! ha un fattore p, quindi il risultato è 0. Molto veloce. E se ignoriamo il requisito che p dovrebbe essere un numero primo, allora lascia che q sia il fattore primo più piccolo di p, e n! modulo p è 0 se n ≥ q. Inoltre, non ci sono molte ragioni per richiedere che p sia un numero primo per rispondere alla tua domanda.
Ora nel tuo esempio (n - i)! per 1 ≤ i ≤ 5 è venuto fuori. Non devi calcolare cinque fattoriali: calcoli (n - 5) !, moltiplica per (n - 4) vai a ottenere (n - 4) !, moltiplica per (n - 3) per ottenere (n - 3)! ecc. Questo riduce il lavoro di quasi un fattore 5. Non risolvere il problema alla lettera.
La domanda è come calcolare n! modulo m. Il modo ovvio è calcolare n !, un numero con circa n log n cifre decimali e calcolare il resto modulo p. È un duro lavoro. Domanda: come possiamo ottenere questo risultato più velocemente? Non facendo la cosa ovvia.
Sappiamo che ((a * b * c) modulo p = (((a * b) modulo p) * c) modulo p.
Per calcolare n !, normalmente inizieremo con x = 1, quindi moltiplicheremo x per 1, 2, 3, ... n. Usando la formula del modulo, calcoliamo n! modulo p senza calcolare n !, iniziando con x = 1, quindi per i = 1, 2, 3, .., n sostituiamo x con (x * i) modulo p.
Abbiamo sempre x <p e i <n, quindi abbiamo bisogno solo di una precisione sufficiente per calcolare x * p, non della precisione molto più elevata per calcolare n !. Quindi per calcolare n! modulo p per p ≥ 2 prendiamo i seguenti passi:
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.
(Alcune risposte menzionano il teorema di Wilson, che risponde alla domanda solo nel caso molto particolare dell'esempio fornito, ed è molto utile per risolvere il problema di Eulero # 381, ma in generale non è utile per risolvere la domanda che è stata posta).