Processing math: 100%

[BOJ 16141] 정수론과 응용: 레시테이션

2022. 6. 16. 23:35PS/백준

아주 교육적인 문제 xudyh's sieve를 잘 활용할 수 있냐를 묻고 있다.(아마 그럴거다)
xudyh's sieve를 유도하면서 어떻게 식을 변형할지 알아보자. 앞으로 어떤 함수의 1부터 N까지 부분합을 Sf(N)이라 적겠다. 위 테그닉은 Sfg(N)Sg(N)을 쉽게 계산할 수 있을 때 Sf(N)을 쉽게 계산하는 방법에 대해 말해준다. 다음 식과 함께 시작하자.
Sfg(N)=Nd=1g(d)Sf(Nd)
이때 적절한 변형을 통해 다음을 얻는다.
Sf(N)=1g(1)(Sfg(N)Nd=2g(d)Sf(Nd))
자 이제 본 문제의 주어진 식을 변형해보자.
ni=1vu=1ϕ(i,u)
이때 ϕ(n,k)는 Jordan totient function이라고도 불리는데 다음을 만족한다.
ϕ(n,k)=d|nμ(d)Ndk
다음을 정의하자.
H(n,k)=ki=1ni
구한 식들을 이용해 준식을 변형해보자. 
ni=1d|iμ(d)H(id,v)
이때 이렇게 쓰면 어떨까?
f(i)=d|iμ(d)H(id,v)
sf(n)=ni=1f(i)
짜잔, 우리가 구하려는 식은 f의 부분합이 되어버렸다. 우린 f=μH라는 것을 알 수 있고 이로써 uf=H를 얻는다.(uμ=I) 앞서 유도한 xudyh's sieve에 대입해보자.
Sf(n)=SH(n)nd=2dSf(nd))
세상에... 이것보다 간단할 수 있을까? 이제 최적화를 해보자. SH(n)을 빨리 구할 방도를 마련해보자.
SH(n)=ni=1vj=1ij=vj=1ni=1ij
이렇게 변형하면 dp를 이용해서 우변을 빠르게 계산할 수 있다. 마치 1492번처럼!
이로써 이번 글을 마치겠다. 끝!

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