여러 가지 방법으로 반올림하기
면접 대비시간 제한1초메모리 제한1024 MB
주어진 N에 대해 2^a * 5^b 꼴이면서 N을 나누는 모든 X를 오름차순으로 구합니다.
문제
Timothy와 Alex는 UCF 학생회 선거에 출마하려던 꿈이 있었지만, 선거 티켓이 두운을 맞추지 못한다는 사실을 깨닫고 그 계획을 접었다. 대신 두 사람은 학생들에게 실시된 여러 설문 통계를 분석해서, 어떤 프로그래밍 팀원 두 명이 선거에서 가장 유리할지 알아보기로 했다.
문제는 모든 통계가 반올림되어 있다는 점이다. 설문 조사자들이 반올림 방식을 밝혔다면 문제가 없었겠지만, 그러지 않았다. (수학 용어 참고: 198을 200으로 반올림했다면, 198은 "참값", 200은 "반올림값"이라고 부른다.)
예를 들어 반올림값 750은 10의 자리로 반올림한 참값에서 나왔을 수도 있고, 250의 배수로 반올림한 참값에서 나왔을 수도 있다. 1의 자리로 반올림한 경우, 즉 사실상 반올림하지 않은 경우에도 나올 수 있다. 따라서 참값은 625일 수도 있고, 748처럼 더 가까운 값일 수도 있다.
다행히 Timothy와 Alex는 사전 조사를 거쳐 설문 조사자들이 쓴 일반적인 반올림 방식을 알아냈다.
- 원래 통계값은 양의 정수 S이다.
- 양의 정수 X를 고르는데, X는 10의 거듭제곱의 약수이다. 즉 를 만족하는 음이 아닌 정수 Y, Z가 존재한다.
- 마지막으로 통계값 S를 가장 가까운 X의 양의 배수로 반올림해 반올림값 N을 얻는다. 즉 을 만족하는 양의 정수 W가 존재하고, 이 최소이다.
주어진 반올림값 N에 대해, 위 조건을 바탕으로 N이 반올림되었을 수 있는 모든 경우를 구하라. 다시 말해 다음 두 식을 모두 만족하는 X 값을 모두 구하라.
입력
첫 번째이자 유일한 줄에 반올림값을 나타내는 정수 N (1 ≤ N ≤ 10^{18})이 주어진다.
출력
첫 번째 줄에 N이 도출될 수 있는 서로 다른 X 값의 개수를 출력한다. 이어서 이 X 값들을 오름차순으로 한 줄에 하나씩 출력한다.
힌트
아래 설명은 첫 번째 예시 입력과 출력에 대한 것이다.
출력: 1
X = 1, Y = 10, Z = 1, W = 30
1의 배수로 반올림: 1*10=10, 1*30=30
출력: 2
X = 2, Y = 5, Z = 1, W = 15
2의 배수로 반올림: 2*5=10, 2*15=30
출력: 5
X = 5, Y = 2, Z = 1, W = 6
5의 배수로 반올림: 5*2=10, 5*6=30
출력: 10
X = 10, Y = 1, Z = 1, W = 3
10의 배수로 반올림: 10*1=10, 10*3=30