xx와 x+1x+1의 차이

시간 제한2초메모리 제한1024 MB

요약
양의 정수 x가 주어질 때, floor(x/k)와 floor((x+1)/k)의 값이 달라지는 x 이하의 양의 정수 k를 모두 출력한다.
난이도

보통10점 중 5점

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

문제

초등학생인 철수와 영희는 최근 나눗셈을 배우고 있습니다. 문득 영희는 이런 궁금증이 생겼습니다.

  • 998998을 kk로 나눈 몫과 999999를 kk로 나눈 몫이 다르게 되는 kk는 얼마나 많을까?

영희는 수학을 잘 하는 철수에게 물어봤지만, 철수도 그 답을 몰랐습니다. 이제 여러분이 철수와 영희의 궁금증을 해결해 줍시다.

여러분은 다음 문제를 해결해야 합니다.

  • 양의 정수 xx가 주어질 때, ⌊xk⌋\left\lfloor{\frac{{x}}{{k}}}\right\rfloor과 ⌊x+1k⌋\left\lfloor{\frac{{x+1}}{{k}}}\right\rfloor의 값이 다르게 되는 xx 이하의 양의 정수 kk의 값을 모두 찾아 주세요.†^\dagger

†^\dagger 두 양의 정수 aa와 bb가 주어질 때, ⌊ab⌋\left\lfloor{\frac{{a}}{{b}}}\right\rfloor는 aa를 bb로 나눈 몫을 의미합니다.

입력

한 줄에 양의 정수 xx가 주어집니다. (1≤x≤10121 \le x \le 10^{12})

출력

한 줄에 문제의 정답이 되는 kk의 값을 작은 것부터 순서대로 출력합니다.

모든 입력에 대해 출력해야 하는 값의 개수가 10,00010\\,000개를 초과하지 않음을 증명할 수 있습니다.

힌트

입력과 출력이 32비트 정수의 최댓값을 초과할 수 있음에 유의하세요. 값을 저장하기 위해 다음을 사용할 것을 권장합니다.

  • C/C++: long long
  • Java: long
  • Python: int (별도의 처리를 할 필요가 없습니다.)
  • 이외의 언어: 언어별 레퍼런스를 참고합니다.

예제1

  1. 예제 1

    입력
    998
    
    예상 출력
    1 3 9 27 37 111 333