만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

완전제곱수

시간 제한1초메모리 제한2048 MB

요약
n이 최대 10^12일 때 제곱수 세 개의 합으로 n을 나타내는 세 정수를 찾고, 불가능하면 -1을 출력합니다.
난이도

보통10점 중 5점

유형
수학, 정수론, 완전 탐색
정답자
아직 제출이 없습니다

문제

수론의 유명한 정리에 따르면 모든 양의 정수는 네 개의 완전제곱수의 합으로 나타낼 수 있다. 하지만 보통은 더 적은 개수의 제곱수로 충분하다. 예를 들어 2727은 세 개의 완전제곱수만으로 나타낼 수 있다: 27=52+12+1227 = 5^2 + 1^2 + 1^2.

수학자 친구가 완전제곱수에 관한 다음 사실들을 알려 준다.

  • 홀수 소수 pp가 두 제곱수의 합으로 나타나는 것은 p≡1(mod4)p \equiv 1 \pmod 4일 때이고 그때에만 해당한다.
  • 두 양의 정수 aa와 bb가 각각 두 제곱수의 합으로 나타나면, 그 곱 abab도 두 제곱수의 합으로 나타난다.
  • 모든 양의 정수는 세 개의 완전제곱수의 합으로 나타낼 수 있다. 다만 4a⋅(8b+7)4^a \cdot (8b + 7) 꼴인 수는 제외한다. 여기서 aa와 bb는 음이 아닌 정수이다.

세 제곱수의 합에 관한 마지막 사실이 흥미로워서, 이 주장이 참인지 확인하고 실제 제곱수를 구하는 프로그램을 작성하려 한다.

입력

정수 nn (1≤n≤10121 ≤ n ≤ 10^{12}) 하나가 주어진다.

출력

nn을 세 제곱수의 합으로 나타낼 수 있으면 세 정수 xx, yy, zz를 출력한다. 0≤x,y,z≤n0 ≤ x, y, z ≤ \sqrt{n}이고 n=x2+y2+z2n = x^2 + y^2 + z^2이면 정답으로 인정한다. 조건을 만족하는 xx, yy, zz의 조합이 여러 개이면 그중 아무것이나 출력해도 된다. nn이 두 개 이하의 제곱수 합으로만 나타나더라도 반드시 정확히 세 정수를 출력한다. nn을 세 제곱수의 합으로 나타낼 수 없으면 −1-1을 출력하고 다른 값은 출력하지 않는다.

예제3

  1. 예제 1

    입력
    22
    
    예상 출력
    3 3 2
    
  2. 예제 2

    입력
    23
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    999999999989
    
    예상 출력
    471545 0 881842