(A + B) mod M = ((A mod M) + (B mod M)) mod M
const ans = ((A % M) + (B % M)) % M;
(A - B) mod M = ((A mod M) - (B mod M)) mod M
const ans = ((A % M) - (B % M)) % M;
(A * B) mod M = ((A mod M) * (B mod M)) mod M
const ans = ((A % M) * (B % M)) % M;
페르소마 소정리: B^M-1 mod M = (B * B^M-2) mod M = 1
, 단 M은 소수이고 B가 M의 배수가 아닌 경우
p-1의 집합 M = {1, 2, ... , p - 1}
에서 모든 원소에 a를 곱한 aM = {a, 2a, ... , a(p - 1)}
이 있을 때, M = aM mod p
입니다. 예를 들어 p = 5, a = 2
일 때, M = {1, 2, 3, 4}
, aM = {2, 4, 6, 8}
입니다. 이경우 aM mod p = {2, 4, 1, 3} = {1, 2, 3, 4}
로 M = aM mod p
입니다.
M = {1, 2, ... , p - 1}
의 p - 1개 원소들은 모두 다르기 때문에 1에서 p의 수가 M에 전부 들어있습니다. 만약 {a, 2a, ... , a(p - 1)} mod p
의 p - 1개 원소들도 서로 다르다면 M = aM mod p
가 증명됩니다. 증명은 귀류법을 사용하면 간단합니다.
i !== j
인데 ai mod p = aj mod p
인 i, j가 존재한다고 가정합니다.i mod p = j mod p
가 되고, 1 <= i, j <= p - 1
인 조건에서는 i = j
가 되므로 1번 가정은 모순입니다.M = aM mod p
입니다.두 집합이 p에 대해 동일하므로 이 두 집합의 모든 각 원소를 곱한 값도 같을 것입니다.
{1, 2, ... , p - 1}! mod p = {a, 2a, ... , a(p - 1)}! mod p
입니다.(1 * 2 * ... * (p - 1)) mod p = (a * 2a * ... * a(p - 1)) mod p
로 전개됩니다.(p - 1)! mod p = (a^p-1 * (p - 1)!) mod p
이 성립합니다.(p − 1)!
과 p
는 공통 인수를 가지지 않으므로 서로소입니다(p − 1)!
의 역원이 존재하며, 양변을 (p − 1)!
으로 나누면 a^p-1 mod p = 1 mod p
이 성립됩니다.(A / B) mod M
= (A * B^-1) mod M
= ((A mod M) * (B^-1 mod M)) mod M
= ((A mod M) * (B^-1 mod M) * ((B * B^M-2) mod M )) mod M
= ((A mod M) * ((B^-1 * B * B^M-2) mod M)) mod M
= ((A mod M) * (B^M-2 mod M)) mod M
const ans = ((A % M) * (Math.pow(B, M - 2) % M)) % M;