아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

제곱수의 합 2 (More Huge)

시간 제한0.5초메모리 제한512 MB

요약
10^18 이하의 자연수 n이 주어질 때, n을 이루는 제곱수 항의 최소 개수와 그 제곱근들을 구해 출력한다.
난이도

어려움10점 중 8점

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

문제

라그랑주는 1770년에 모든 자연수가 넷 이하의 제곱수의 합으로 표현된다는 것을 증명했다. 어떤 자연수는 여러 방법으로 표현된다. 예를 들어 26은 525^2과 121^2의 합이고, 42+32+124^2 + 3^2 + 1^2로도 나타낼 수 있다. 역사적으로 암산의 명수들에게 공통적으로 주어진 문제는 자연수를 넷 이하의 제곱수 합으로 나타내라는 것이었다. 1900년대 초반에 한 암산가가 15663=1252+62+12+1215663 = 125^2 + 6^2 + 1^2 + 1^2라는 해를 구하는 데 8초가 걸렸다는 보고가 있다. 더 어려운 문제에는 56초가 걸렸다: 11339=1052+152+82+5211339 = 105^2 + 15^2 + 8^2 + 5^2.

자연수 nn이 주어질 때, nn을 최소 개수의 제곱수 합으로 표현하는 컴퓨터 프로그램을 작성하시오.

입력

입력은 표준입력을 사용한다. 입력은 자연수 nn을 포함하는 한 줄로 구성된다. 여기서 1≤n≤1,000,000,000,000,000,0001 \le n \le 1{,}000{,}000{,}000{,}000{,}000{,}000이다.

출력

출력은 표준출력을 사용한다. 합이 nn과 같게 되는 제곱수들의 최소 개수를 첫째 줄에 출력한다.

둘째 줄에는, 제곱의 합이 nn과 같게 되는 수들을 첫째 줄에 출력한 개수만큼 공백으로 구분하여 출력한다. 음의 정수는 출력해서는 안 된다.

답이 여러 개인 경우, 아무거나 출력해도 좋다.

예제4

  1. 예제 1

    입력
    25
    
    예상 출력
    1
    5
    
  2. 예제 2

    입력
    26
    
    예상 출력
    2
    1 5
    
  3. 예제 3

    입력
    11339
    
    예상 출력
    3
    1 27 103
    
  4. 예제 4

    입력
    34567
    
    예상 출력
    4
    1 22 109 149