먼저, p>q임을 캐치합시다. 구간 P는 항상 구간 Q의 왼쪽에 붙어있기 때문에, p≤q라면, 항상 구간 P의 합은 구간 Q의 합보다 작습니다. 따라서, p>q여야만 두 구간의 합이 같을 수 있습니다.
양의 정수 n이 구간 P의 오른쪽 끝이라고 합시다. 구간 Q의 합은 당연히 양의 정수이므로, 구간 P의 합이 양의 정수가 되기 위해서는, n이 양의 정수여야 함이 자명합니다.
구간 P의 합은, p termsn+(n−1)+⋯+(n−p+1)이므로, pn−2p(p−1)로 정리할 수 있습니다. 같은 방법으로, 구간 Q의 합은, q terms(n+1)+(n+2)+⋯+(n+q)이므로, qn+2q(q+1)로 정리할 수 있습니다.
두 합이 같아야 하므로, pn−2p(p−1)=qn+2q(q+1)로 놓고, 식을 조금 변형합시다. (p−q)n=2p2+q2−2p−q, p>q이므로, 양변을 (p−q)로 나누면, n=2(p−q)p2+q2−21입니다. p2+q2=p2−q2+2q2=(p+q)(p−q)+2q2를 이용해서 다시 정리해주면, n=2p+q−1+p−qq2가 됩니다. 이를 만족하는 모든 n, p의 쌍을 찾아봅시다!
1-1. 1-2. 케이스를 정리해 보면, 1-1.에서 가능한 p의 개수는 q와 q2가 모두 홀수이므로, q2의 약수의 개수와 같다는 것을 알 수 있고, 1-2.에서 가능한 모든 p−q들은 1-1.에서 가능한 모든 p−q들에 2를 곱한 값이고, 이들은 서로 홀짝성이 다르기 때문에, 전부 서로 다른 정수임을 알 수 있습니다.
따라서, q가 홀수일 때 가능한 p의 개수는 q2의 약수의 개수의 2배가 됩니다.
2-1. 2-2. 케이스도 정리해 보면, 2-1.에서의 p−q가 가질 수 있는 값이 r2의 약수뿐이고, 2-2.에서 s가 가질 수 있는 값도 r2의 약수뿐이니, 가능한 p−q와 s의 개수는 각각 r2의 약수의 개수로 같습니다. 다만, 2-2.의 p−q는s×22k+1이므로 2-1.에서의 p−q와 각각 다르고, 홀짝성도 다르므로, 전부 서로 다른 정수임을 알 수 있습니다.
따라서, q가 짝수일 때 가능한 p의 개수는 q=2k×r인 홀수 r에 대하여, r2의 약수의 개수의 2배가 됩니다.
1-1.~2-2.를 모두 일반화 시킬 수도 있습니다. q가 2로 나누어떨어지지 않을 때까지 나눈 수를 q′이라고 하면, {q′}2의 약수의 개수의 2배가 문제의 정답이 됩니다.
구현은 에라토스테네스의 체를 쓰든 폴라드-로를 쓰든 넉넉하게 통과됩니다. 참고로 저는 안전하게 폴라드-로를 사용했습니다.