https://www.acmicpc.net/problem/13172
13172번: Σ
모듈러가 11에서 1,000,000,007이 되어 답이 달라졌지만, 역시 3을 곱한 다음 1,000,000,007으로 나눈 나머지는 7이 된다.
www.acmicpc.net
모듈러 역원에 대해서 잘 설명해 놓은 문제이다.
핵심은 7/3 과 같은 분수를 답으로 하는 문제들을 판별하기 위해 a × b ^(-1) mod X 형태로 만드는것이다.
여기서 b^-1 이 모듈러 곱셈의 역원이다.
ll dq(ll a, ll b)
{
if (b == 1)
return a;
if (b % 2 == 1)
return a * dq(a, b - 1) % MOD;
ll c = dq(a, b / 2);
return c * c % MOD;
}
for (int i = 0; i < N; i++)
{
cin >> b >> a;
ll mok = gcd(a, b);
b /= mok;
a /= mok;
ans += a * dq(b, MOD - 2) % MOD;
ans %= MOD;
}
문제 나와있지만 중요한것은 페르마의 소정리이다. 소수 에서만 성립하는 정리이기때문에 이와 gcd를 활용하면 모듈러 곱셈의 역원을 구해 나눗셈을 알 수 있다.
'알고리즘 > 알고리즘 이론, 템플릿' 카테고리의 다른 글
다익스트라 (0) | 2023.10.26 |
---|---|
포함배제원리와 뫼비우스함수 (0) | 2023.09.20 |
레이지세그 (0) | 2023.08.21 |
코포 템플릿 (0) | 2023.08.07 |
분할 정복을 이용한 거듭제곱 (0) | 2023.07.17 |