메르센 수는 소수 P에 대해 2P−1 꼴로 쓰는 수다.
P가 작을 때는 메르센 수가 모두 소수인 듯 보인다.
| 소수 P | 메르센 수 2P−1 |
|---|---|
| 2 | 4−1=3, 소수 |
| 3 | 8−1=7, 소수 |
| 5 | 32−1=31, 소수 |
| 7 | 128−1=127, 소수 |
하지만 P가 충분히 큰 소수이면 메르센 수가 소수가 아닐 수도 있다. 이렇게 소수가 아닌 메르센 수를 메르센 합성수라 하자.
정수 K가 주어지면 P≤K인 메르센 합성수를 모두 찾아 소인수분해하는 프로그램을 작성하시오.
입력에는 정수 K가 하나 주어진다. (K<63)
P≤K인 메르센 합성수 2P−1을 모두 소인수분해해서 한 줄에 하나씩 출력한다. 각 줄의 형식은 다음과 같다.
q1 * q2 * ... * qm = M = ( 2 ^ P ) - 1
여기서 M=2P−1이고, q1≤q2≤⋯≤qm은 M의 소인수를 오름차순으로 나열한 것이다. 같은 소인수가 M을 여러 번 나누면 나누는 횟수만큼 반복해서 쓴다. 기호 사이의 공백도 위 형식 그대로 지킨다.
메르센 합성수 자체가 작은 것부터 출력한다. 조건을 만족하는 수가 없으면 아무것도 출력하지 않는다.