D. Many Perfect Squares

어떤 두 쌍을 보려는 생각은 했는데 식을 전개를 못시켰다. 에디토리얼을 보자.


어떤 두 쌍에 대해 i<ji<j, ai+xa_i+xaj+xa_j+x 가 완전제곱수가 될 수 있는지 보자.

ai+x=p2, aj+x=q2a_i+x=p^2,\ a_j+x=q^2 가 된다고 하자.

ajai=q2p2=(qp)(q+p)a_j-a_i=q^2-p^2=(q-p)(q+p) 이다.

이는 qpq-pajaia_j-a_i의 양의 약수임을 보인다.

ajaia_j-a_i의 모든 약수들을 O(ajai)O(\sqrt{ a_j-a_i }) 에 순회할 수 있다.

어떤 약수 dd에 대해 단순한 p,qp,q에 대한 이차연립방정식을 풀어보자.

{qp=dq+p=ajaid \begin{cases} q-p=d \\ q+p=\dfrac{a_j-a_i}{d} \end{cases}

이걸 풀면

아니 진짜 연립방정식을 푸는 문젠지 몰랐다;

{p=12(ajaidd)q=12(ajaid+d) \begin{cases} p=\dfrac{1}{2}\left( \dfrac{a_j-a_i}{d}-d \right) \\ q=\dfrac{1}{2}\left( \dfrac{a_j-a_i}{d}+d \right) \end{cases}

이다.

만약 p,qp,q 모두 정수라면 우린 xx의 후보로 p2aip^2-a_iq2ajq^2-a_j 를 포함할 수 있다.

이걸 모두 브루트포스로 돌려버리면 된다.

시간복잡도를 좀 보자.

O(n2109nlog1018)O(n^2 \cdot \sqrt{ 10^9 } \cdot n \cdot \log 10^{18}) 정도이다. 제곱수인지는 이분탐색으로 찾아주면 된다.

Comments