[BOJ 18718] Bags of Candies

2023. 3. 11. 15:41PS/백준

이 문제는 {1,,n}까지의 수 중에서 gcd(i,j)>1을 만족하는 (i,j) 쌍들을 최대한 많이 만들고 쌍을 만들 수 없는 경우 자기 자신이 쌍이 될 때 최소의 쌍의 개수가 몇 개인지 구하는 것이다. 우리는 p>N/2이면 p는 쌍을 만들 수 없다는 사실을 안다. 다음과 같은 과정을 생각해보자.

{1n}에서 쌍이 완벽히 지어졌다 가정하자. 우리는 n+1을 저 집합에 추가하고 최적의 쌍을 얻어낼 것이다.

0. n+1이 소수이다. 

- (n+1,n+1)을 쌍으로 한다.

1. {1n} 중에서 짝지어지지 않은 소수 p가 존재하여 p|n+1이다.

- (p,n+1)을 쌍으로 한다. 

2. {1n}에서 p>N/2인 소수와 1을 제외한 모든 수들이 쌍으로 묶여있다. 

- (n+1,n+1)을 쌍으로 한다.

3. {1n}에서 p>N/2인 소수와 1, 그리고 합성수 α를 제외한 모든 수들이 쌍으로 묶여있다.

α의 최소인수를 p, n+1의 최소인수를 q라고 하자. p>N이라 가정하자. 그럼 p2>N인데 α가 합성수라는 조건에 모순이다. 따라서 p,qN이고 pqN이다. 즉, (pq,β)라는 쌍이 존재한다. βp의 배수거나 q의 배수임이 분명하다. p|β이면 (pq,n+1)(β,α)를 쌍으로 하자. q|β이면 (pq,α)(β,n+1)을 쌍으로 하자. 

 

위 과정을 따르게 된다면 항상 최소 개수의 쌍을 유지할 수 있다. 여기에서 알 수 있는 것은 1p>N/2인 소수들을 제외한 모든 수들은 짝이 지어진다는 것이다. 따라서 n까지 소수의 개수를 π(n)이라고 하면 우리가 구하고자 하는 최소 쌍의 개수는 다음과 같다.

π(N)π(N/2)+1+Nπ(N)+π(N/2)12

다만 Nπ(N)+π(N/2)1가 홀수가 되는 경우 1을 더해야 한다. pair가 안맞는 친구가 1개 존재한다는 뜻이기 때문에 그 친구는 혼자서 pair가 된다. 

쿼리가 총 5번 들어오므로 각 퀴리를 O(N2/3)에 처리하면 될 것이다. 이것은 Lucy-Hedgehog를 효율적으로 구성하면 된다. DB를 제작해서 하는 풀이도 있지만 컴퓨터가 아파해서 안될 것 같다.

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