아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

메르센 합성수

시간 제한1초메모리 제한128 MB

요약
K 이하의 소수 P에 대해 합성수인 메르센 수 2^P - 1을 모두 소인수분해해서 작은 수부터 출력합니다.
난이도

보통10점 중 7점

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

문제

메르센 수는 소수 PP에 대해 2P−12^P - 1 꼴로 쓰는 수다.

PP가 작을 때는 메르센 수가 모두 소수인 듯 보인다.

소수 PP메르센 수 2P−12^P - 1
24−1=34 - 1 = 3, 소수
38−1=78 - 1 = 7, 소수
532−1=3132 - 1 = 31, 소수
7128−1=127128 - 1 = 127, 소수

하지만 PP가 충분히 큰 소수이면 메르센 수가 소수가 아닐 수도 있다. 이렇게 소수가 아닌 메르센 수를 메르센 합성수라 하자.

정수 KK가 주어지면 P≤KP \le K인 메르센 합성수를 모두 찾아 소인수분해하는 프로그램을 작성하시오.

입력

입력에는 정수 KK가 하나 주어진다. (K<63K < 63)

출력

P≤KP \le K인 메르센 합성수 2P−12^P - 1을 모두 소인수분해해서 한 줄에 하나씩 출력한다. 각 줄의 형식은 다음과 같다.

q1 * q2 * ... * qm = M = ( 2 ^ P ) - 1

여기서 M=2P−1M = 2^P - 1이고, q1≤q2≤⋯≤qmq_1 \le q_2 \le \dots \le q_m은 MM의 소인수를 오름차순으로 나열한 것이다. 같은 소인수가 MM을 여러 번 나누면 나누는 횟수만큼 반복해서 쓴다. 기호 사이의 공백도 위 형식 그대로 지킨다.

메르센 합성수 자체가 작은 것부터 출력한다. 조건을 만족하는 수가 없으면 아무것도 출력하지 않는다.

예제1

  1. 예제 1

    입력
    31
    
    예상 출력
    23 * 89 = 2047 = ( 2 ^ 11 ) - 1
    47 * 178481 = 8388607 = ( 2 ^ 23 ) - 1
    233 * 1103 * 2089 = 536870911 = ( 2 ^ 29 ) - 1