Processing math: 85%

[BOJ 19549] 레이저 연구소

2022. 8. 21. 00:05PS/백준

원점에서 (n,m)으로 레이저를 쏘는 상황을 생각해보자. 집은 몇 개가 부숴질까? y=mnx를 생각해보자. 이 직선에서 x,y가 모두 정수인 점이 집이 있는 구간이다. 결국 mx=ny의 정수 해의 개수가 된다. (m,n)=d라 하면 m=m/d, n=n/d 일 때 mx=ny이고 따라서 x=αn, y=αm(1αd)이다. 그러므로 총 d개 의 집이 부숴진다. 원점도 집이 있으므로 d+1개 부숴진다. 벽을 지난다는 것은 무엇을 의미할까? 세로 벽을 생각하면 위에서 생각한 직선이 (a,b)(a,b+1)의 사이를 지난다는 것을 의미한다 그렇다는 것은 b<amn<b+1이고 amn1<b<amn에서 다음을 얻는다 amn1<bamn. 이는 amn이 정수가 아닐 경우 벽의 개수는 각 a마다 1개씩 존재함을 의미한다. amn이 정수일 경우는 결국 집의 경우이므로 세로 벽의 개수는 md개 임을 알 수 있다. 마찬가지로 가로 벽의 개수는 nd개 이다. 따라서 집의 수리 비용을 A 벽의 수리 비용을 B라고 하면 A+(A2B)d+B(n+m)가 총 비용임을 알 수 있다. 그럼 전체 N×M 직사각형에서 n×m 직사각형은 총 몇 개나 있을까? 정답은~ (N+1n)(M+1m)개 있다. 또, 레이저를 우측 상향, 우측 하향, 좌측 상향, 좌측 하향으로 총 4번 쏠 수 있기 때문에 다음을 구하는 것이 우리의 정답이다.

4Ni=1Mj=1(N+1i)(M+1j)(A+(A2B)d+B(i+j))

이때 d=(i,j)를 의미한다. 결국 문제의 핵심은 d, id, jd, ijd를 어떻게 구하냐 이다. id의 합을 구하는 과정을 살펴보자. 

Ni=1Mj=1igcd

이제 나머지도 같은 방법으로 계산하면 된다. \phi(k),\ k\phi(k), k^{2}\phi(k)들은 모두 곱셈적 함수이므로 xudyh's sieve를 쓸 수 있다. g(n)=n이고 f(n)=n\phi(n)일 때

(f*g)(n)=\sum_{d|n}f(n)g(n/d)=\sum_{d|n} d\phi(d)\frac{n}{d}=n\sum_{d|n} \phi(d)=n^{2}

임을 이용하자.

'PS > 백준' 카테고리의 다른 글

[BOJ 18578] Jimp Numbers  (0) 2023.03.04
[BOJ 3904] The Teacher's Side of Math  (0) 2022.09.02
[BOJ 12797] 연금술  (0) 2022.08.20
[BOJ 16123] 피타고라스 쌍  (0) 2022.07.14
[BOJ 15868] Yule Lads  (0) 2022.06.17