Contoh yang Anda posting sangat terkait dengan masalah Euler # 381. Jadi saya akan mengirim jawaban yang tidak memecahkan masalah Euler. Saya akan memposting bagaimana Anda dapat menghitung faktorial modulo prima.
Jadi: Bagaimana cara menghitung n! modulo p?
Pengamatan cepat: Jika n ≥ p, maka n! memiliki faktor p, jadi hasilnya 0. Sangat cepat. Dan jika kita mengabaikan persyaratan bahwa p harus menjadi prima maka biarkan q menjadi faktor prima terkecil dari p, dan n! modulo p adalah 0 jika n ≥ q. Tidak ada banyak alasan untuk meminta p sebagai jawaban utama untuk menjawab pertanyaan Anda.
Sekarang dalam contoh Anda (n - i)! untuk 1 ≤ i ≤ 5 muncul. Anda tidak harus menghitung lima faktorial: Anda menghitung (n - 5) !, dikalikan dengan (n - 4), dapatkan (n - 4)!, Kalikan dengan (n - 3) untuk mendapatkan (n - 3)! dll. Ini mengurangi pekerjaan hampir faktor 5. Jangan memecahkan masalah secara harfiah.
Pertanyaannya adalah bagaimana cara menghitung n! modulo m. Cara yang jelas adalah menghitung n !, suatu angka dengan kira-kira n log dan angka desimal, dan menghitung modulo p sisanya. Itu kerja keras. Pertanyaan: Bagaimana kita bisa mendapatkan hasil ini lebih cepat? Dengan tidak melakukan hal yang jelas.
Kita tahu bahwa ((a * b * c) modulo p = (((a * b) modulo p) * c) modulo p.
Untuk menghitung n !, kita biasanya mulai dengan x = 1, lalu kalikan x dengan 1, 2, 3, ... n. Menggunakan rumus modulo, kami menghitung n! modulo p tanpa menghitung n !, dengan memulai dengan x = 1, dan kemudian untuk i = 1, 2, 3, .., n kita ganti x dengan (x * i) modulo p.
Kami selalu memiliki x <p dan i <n, jadi kami hanya membutuhkan cukup presisi untuk menghitung x * p, bukan presisi yang jauh lebih tinggi untuk menghitung n !. Jadi untuk menghitung n! modulo p untuk p ≥ 2 kita mengambil langkah-langkah berikut:
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.
(Beberapa jawaban menyebutkan teorema Wilson, yang hanya menjawab pertanyaan dalam kasus yang sangat khusus dari contoh yang diberikan, dan sangat berguna untuk menyelesaikan masalah Euler # 381, tetapi secara umum tidak berguna untuk menyelesaikan pertanyaan yang diajukan).