실수
시간 제한2초메모리 제한512 MB
1부터 r까지의 각 정수 v에 대해 고정소수점 반올림으로 1을 v로 나눈 뒤 다시 v를 곱하는 과정을 모사하고, 메모리에 저장한 결과가 1이 되지 않는 v를 찾는다.
문제
실수의 첫 번째 규칙 --- 실수를 사용하지 마라
자콜코보에서 들은 이야기
페티야는 과학도시 자콜코보에서 일한다. 그는 새 마이크로프로세서 체부르의 개발을 맡고 있다. 체부르의 수석 설계자가 부동 소수점 수를 매우 싫어하기 때문에, 체부르에서는 실수를 고정 소수점 형식으로 저장한다.
프로세서의 내부 레지스터는 실수를 소수점 이하 정확히 개의 이진 자릿수를 가진 이진 분수로 저장한다. 소수점 위 자릿수에는 제한이 없다. 이 형식으로는 어떤 정수 에 대해 인 수를 표현할 수 있다. 실수에 대한 산술 연산의 결과로 얻은 수 는 프로세서 레지스터에 저장될 때 가장 가까운 표현 가능한 수로 바뀌며, 가 두 표현 가능한 수의 정확히 중간에 있으면 더 큰 쪽으로 바뀐다.
메모리에 수를 저장할 때는 실수를 소수점 이하 정확히 개의 이진 자릿수를 가진 이진 분수로 나타내는 형식을 쓴다(, 소수점 위 자릿수는 레지스터와 마찬가지로 제한이 없다). 이 형식으로는 어떤 정수 에 대해 인 수를 정확히 표현할 수 있다. 메모리에서 프로세서 레지스터로 수를 불러올 때, 수는 소수점 이하 개의 이진 자릿수가 되도록 0으로 채워진다. 레지스터에서 메모리로 수 를 저장할 때, 수는 가장 가까운 표현 가능한 수로 바뀌며, 가 두 표현 가능한 수의 정확히 중간에 있으면 더 큰 쪽으로 바뀐다.
예를 들어 , 라고 하자. 수 1은 메모리에 로 저장되고, 수 3은 메모리에 로 저장된다. 레지스터로 불러올 때 각각 와 로 0이 채워진다. 1을 3으로 나누었다고 하자. 나눗셈 결과 을 이진법으로 쓰면 가 된다. 여기서 괄호 안의 부분은 십진 분수에서와 마찬가지로 무한 이진 분수의 순환마디를 뜻한다. 프로세서 레지스터에 저장할 때 이 분수는 로 근사된다. 이제 이 수에 3을 곱하자. 결과는 이고, 이 형태 그대로 프로세서 레지스터에 저장된다. 메모리에 저장할 때는 소수점 이하 5자리의 가장 가까운 이진 분수인 로 근사된다.
페티야는 레지스터에 1과 정수 를 불러와 1을 로 나누고, 나눗셈 결과에 를 곱한 다음, 곱셈 결과를 메모리에 저장하면 저장된 최종 값이 항상 1은 아니라는 것을 알아냈다. 예를 들어 이면 나눗셈 후 레지스터에는 가 들어가고, 를 곱하면 가 되며, 메모리에 저장하면 로 변환된다. 페티야는 이런 수를 불운한 수라고 부른다.
페티야는 1부터 까지의 정수 중 어떤 것이 불운한 수인지 궁금해졌다. 그가 알아내도록 도와주자.
입력
입력 파일의 첫째 줄에 세 정수 , , 이 주어진다(, ).
출력
출력 파일의 첫째 줄에 1부터 까지의 범위에 있는 불운한 수의 개수 를 출력한다. 둘째 줄에 1부터 까지의 범위에 있는 모든 불운한 수를 오름차순으로 공백으로 구분해 출력한다.