Gönderdiğiniz örnek 388 numaralı Euler sorunu ile çok yakından ilgilidir. Bu yüzden Euler sorununu çözmeyen bir cevap göndereceğim. Bir faktöriyel modulo nasıl hesaplayabileceğinizi yazacağım.
Yani: n nasıl hesaplanır! modulo p?
Hızlı gözlem: n ≥ p ise n! bir p faktörüne sahiptir, dolayısıyla sonuç 0 olur. Çok hızlı. Ve p'nin asal olması şartı göz ardı edilirse, q'nun p'nin en küçük asal faktörü olmasına izin verin ve n! n ≥ q ise modulo p 0'dır. Ayrıca, p'nin sorunuzu cevaplamak için bir ana olmasını gerektirecek çok fazla neden yoktur.
Şimdi örneğinizde (n - i)! 1 ≤ i ≤ 5 geldi. Beş faktöriyeli hesaplamak zorunda değilsiniz: (n - 5)! Bu, işi neredeyse bir faktör 5 azaltır. Sorunu tam anlamıyla çözmeyin.
Soru n'nin nasıl hesaplanacağı! modulo m. Açık olan yol, kabaca n log n ondalık basamağı olan bir sayı olan n! 'Yı hesaplamak ve kalan modulo p'yi hesaplamaktır. Bu zor bir iş. Soru: Bu sonucu nasıl daha çabuk alabiliriz? Bariz olanı yapmayarak.
((A * b * c) modulo p = ((((a * b) modulo p) * c) modulo p olduğunu biliyoruz.
N! 'Yi hesaplamak için normalde x = 1 ile başlayıp, x'i 1, 2, 3, ... n ile çarparız. Modulo formülünü kullanarak n'yi hesaplıyoruz! n! 'yi hesaplamaksızın modulo p, x = 1 ile başlayıp i = 1, 2, 3, .. için, n yerine x'i (x * i) modulo p ile değiştiriyoruz.
Her zaman x <p ve i <n'ye sahibiz, bu nedenle x * p'yi hesaplamak için yeterli hassasiyete ihtiyacımız var, n'yi hesaplamak için çok daha yüksek hassasiyete değil! N hesaplamak için! p ≥ 2 için modulo p aşağıdaki adımları atıyoruz:
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.
(Bazı cevaplar, yalnızca verilen örneğin çok özel durumunda soruyu cevaplayan Wilson'ın teoreminden bahseder ve Euler problemi # 381'i çözmek için çok yararlıdır, ancak genel olarak sorulan soruyu çözmek için yararlı değildir).