320x100
13172번 : Σ
문제가 정말 길고 비문학을 읽는 듯한 기분을 주지만 다른 지식 필요없고 문제만 풀고 싶다면 집중해야할 부분은 정해져 있다.
문제를 열심히 읽다보면 어쨌든 b의 모듈러 곱셈에 대한 역원 (b^-1)을 구해야 한다는 것을 깨달을 수 있는데, 그 값은 (b^x-2)%x 를 통해 얻을 수 있다고 한다. 이 부분만 캐치했다면 어떻게든 문제는 풀어낼 수 있다.
내 코드:
from sys import stdin
from math import gcd
input = stdin.readline
mod = 1_000_000_007
ans = 0
# 거듭제곱
def multi(x,y):
if y == 1: return x
if y%2 : return x * multi(x,y-1) % mod
t = multi(x, y // 2)
return t * t % mod
for _ in range(int(input())):
n,m = map(int,input().split())
# 기약분수 만들기
g = gcd(n,m)
n //= g
m //= g
# 모듈러 역원 구해서 더하기
ans += m * multi(n,mod-2) % mod
ans %= mod
print(ans)
하나 주의할 점은 mod 값이 10억이 넘는 큰 값이므로 거듭제곱 시 분할정복을 이용해야 한다는 점이다. 안그러면 하나 구할때도 한참 걸린다.
'PS > solved.ac' 카테고리의 다른 글
[CLASS 4]백준 17070번 - 파이프 옮기기 1 (0) | 2021.04.28 |
---|---|
[CLASS 4]백준 14502번 - 연구소 (0) | 2021.04.26 |
[CLASS 4]백준 13549번 - 숨바꼭질 3 (0) | 2021.03.29 |
[CLASS 4]백준 12865번 - 평범한 배낭 (0) | 2021.03.26 |
[CLASS 4]백준 12851번 - 숨바꼭질 2 (0) | 2021.03.25 |
댓글