게시 한 예는 Euler problem # 381과 매우 밀접한 관련이 있습니다. 따라서 오일러 문제를 해결하지 못하는 답변을 게시하겠습니다. 나는 계 승률을 소수로 계산하는 방법을 게시 할 것입니다.
그래서 : n을 계산하는 방법! 모듈로 p?
빠른 관찰 : n ≥ p이면 n! 인수 p를 가지므로 결과는 0입니다. 매우 빠릅니다. 그리고 p가 소수 여야한다는 요구 사항을 무시하면 q는 p의 가장 작은 소수이며, n! n ≥ q 인 경우 모듈로 p는 0입니다. 또한 p가 귀하의 질문에 대답 할 수있는 주요한 이유는 아닙니다.
이제 당신의 예에서 (n-i)! 1 ≤ i ≤ 5가 나타났다. 5 개의 계승을 계산할 필요가 없습니다. (n-5)!를 계산하고, (n-4)를 곱하면 (n-4)가됩니다!, (n-3)을 곱하면 (n-3)이됩니다! 이것으로 작업이 거의 5 배 줄어 듭니다. 문제를 말 그대로 해결하지 마십시오.
문제는 n을 계산하는 방법입니다! 모듈로 m. 확실한 방법은 대략 n log n 소수 자릿수 인 n!을 계산하고 나머지 모듈로 p를 계산하는 것입니다. 힘든 일입니다. 질문 :이 결과를 어떻게 더 빨리 얻을 수 있습니까? 명백한 일을하지 않음으로써.
우리는 ((a * b * c) 모듈로 p = (((a * b) 모듈로 p) * c) 모듈로 p.
n!을 계산하려면 일반적으로 x = 1로 시작한 다음 x에 1, 2, 3, ... n을 곱합니다. 모듈로 공식을 사용하여 n을 계산합니다! x = 1로 시작하여 n!를 계산하지 않고 모듈로 p를 계산 한 다음 i = 1, 2, 3, .., n에 대해 x를 (x * i) 모듈로 p로 바꿉니다.
우리는 항상 x <p와 i <n을 가지고 있으므로, n *을 계산하는 데있어 더 높은 정밀도가 아니라 x * p를 계산하기에 충분한 정밀도 만 있으면됩니다. 그래서 n을 계산합니다! p ≥ 2의 모듈로 p는 다음 단계를 수행합니다.
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.
(일부 답변은 주어진 예제의 매우 특별한 경우에만 질문에 대답하고 윌러 문제 # 381을 해결하는 데 매우 유용하지만 일반적으로 묻는 질문을 해결하는 데는 유용하지 않은 Wilson의 정리를 언급합니다.)