O exemplo que você está postando está muito relacionado ao problema de Euler # 381. Então, vou postar uma resposta que não resolve o problema de Euler. Vou postar como você pode calcular fatoriais modulo um primo.
Então: Como calcular n! módulo p?
Observação rápida: Se n ≥ p, então n! tem um fator p, então o resultado é 0. Muito rápido. E se ignorarmos o requisito de que p deve ser um primo, então deixe q ser o menor fator primo de p, e n! módulo p é 0 se n ≥ q. Também não há muitas razões para exigir que p seja o principal para responder à sua pergunta.
Agora no seu exemplo (n - i)! para 1 ≤ i ≤ 5 surgiu. Você não precisa calcular cinco fatoriais: você calcula (n - 5) !, multiplica por (n - 4) vai buscar (n - 4) !, multiplica por (n - 3) para obter (n - 3)! etc. Isso reduz o trabalho em quase um fator 5. Não resolva o problema literalmente.
A questão é como calcular n! módulo m. A maneira óbvia é calcular n !, um número com aproximadamente n log n dígitos decimais e calcular o restante módulo p. Isso é trabalho duro. Pergunta: Como podemos obter esse resultado mais rapidamente? Por não fazer a coisa óbvia.
Sabemos que ((a * b * c) módulo p = (((a * b) módulo p) * c) módulo p.
Para calcular n !, normalmente começamos com x = 1 e depois multiplicamos x por 1, 2, 3, ... n. Usando a fórmula do módulo, calculamos n! módulo p sem calcular n !, começando com x = 1 e, em seguida, para i = 1, 2, 3, .., n substituímos x por (x * i) módulo p.
Sempre temos x <pe i <n; portanto, precisamos apenas de precisão suficiente para calcular x * p, e não de uma precisão muito maior para calcular n !. Então, para calcular n! módulo p para p ≥ 2, seguimos os seguintes passos:
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.
(Algumas respostas mencionam o teorema de Wilson, que apenas responde à pergunta no caso muito especial do exemplo dado, e é muito útil para resolver o problema de Euler # 381, mas em geral não é útil para resolver a pergunta que foi feita).