Przykład, który publikujesz, jest bardzo blisko związany z problemem Eulera # 381. Więc opublikuję odpowiedź, która nie rozwiąże problemu Eulera. Napiszę, jak możesz obliczyć silnię modulo liczbę pierwszą.
Więc: Jak obliczyć n! modulo p?
Szybka obserwacja: Jeśli n ≥ p, to n! ma współczynnik p, więc wynik wynosi 0. Bardzo szybko. A jeśli zignorujemy wymóg, aby p było liczbą pierwszą, niech q będzie najmniejszym współczynnikiem liczby pierwszej p, a n! moduł p wynosi 0, jeżeli n ≥ q. Nie ma również wielu powodów, aby wymagać, aby p było liczbą pierwszą, aby odpowiedzieć na twoje pytanie.
Teraz w twoim przykładzie (n - i)! dla 1 ≤ i ≤ 5 pojawiły się. Nie musisz obliczać pięciu silni: obliczasz (n - 5) !, mnożymy przez (n - 4) idź zdobądź (n - 4) !, mnoż przez (n - 3), aby uzyskać (n - 3)! itp. Zmniejsza to pracę prawie 5-krotnie. Nie rozwiązuj problemu dosłownie.
Pytanie brzmi: jak obliczyć n! modulo m. Oczywistym sposobem jest obliczenie n !, liczby z grubsza n log n cyfr dziesiętnych i obliczenie reszty modułu p. To ciężka praca. Pytanie: Jak możemy szybciej uzyskać ten wynik? Nie robiąc rzeczy oczywistych.
Wiemy, że ((a * b * c) modulo p = (((a * b) modulo p) * c) modulo p.
Aby obliczyć n !, zwykle zaczynamy od x = 1, a następnie mnożymy x przez 1, 2, 3, ... n. Korzystając ze wzoru modulo, obliczamy n! modulo p bez obliczania n !, zaczynając od x = 1, a następnie dla i = 1, 2, 3, .., n zamieniamy x na (x * i) modulo p.
Zawsze mamy x <p i i <n, więc potrzebujemy tylko wystarczającej precyzji, aby obliczyć x * p, a nie dużo większej precyzji, aby obliczyć n !. Więc obliczyć n! modulo p dla p ≥ 2 wykonujemy następujące kroki:
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.
(Niektóre odpowiedzi wspominają twierdzenie Wilsona, które odpowiada tylko na pytanie w bardzo szczególnym przypadku podanego przykładu i jest bardzo przydatne do rozwiązania problemu Eulera # 381, ale ogólnie nie jest przydatne do rozwiązania zadanego pytania).