제곱수의 합 2 (More Huge)
시간 제한0.5초메모리 제한512 MB
10^18 이하의 자연수 n이 주어질 때, n을 이루는 제곱수 항의 최소 개수와 그 제곱근들을 구해 출력한다.
문제
라그랑주는 1770년에 모든 자연수가 넷 이하의 제곱수의 합으로 표현된다는 것을 증명했다. 어떤 자연수는 여러 방법으로 표현된다. 예를 들어 26은 과 의 합이고, 로도 나타낼 수 있다. 역사적으로 암산의 명수들에게 공통적으로 주어진 문제는 자연수를 넷 이하의 제곱수 합으로 나타내라는 것이었다. 1900년대 초반에 한 암산가가 라는 해를 구하는 데 8초가 걸렸다는 보고가 있다. 더 어려운 문제에는 56초가 걸렸다: .
자연수 이 주어질 때, 을 최소 개수의 제곱수 합으로 표현하는 컴퓨터 프로그램을 작성하시오.
입력
입력은 표준입력을 사용한다. 입력은 자연수 을 포함하는 한 줄로 구성된다. 여기서 이다.
출력
출력은 표준출력을 사용한다. 합이 과 같게 되는 제곱수들의 최소 개수를 첫째 줄에 출력한다.
둘째 줄에는, 제곱의 합이 과 같게 되는 수들을 첫째 줄에 출력한 개수만큼 공백으로 구분하여 출력한다. 음의 정수는 출력해서는 안 된다.
답이 여러 개인 경우, 아무거나 출력해도 좋다.