코드 순열

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

요약
순열의 위수(순환 길이들의 최소공배수)가 정확히 K인 1부터 N까지의 순열 개수를 2^31-1로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법, 정수론, 수학
정답자
아직 제출이 없습니다

문제

금고를 열려면 11부터 NN까지의 자연수를 정해진 비밀 순서대로 입력해야 합니다. 이 순서는 1,2,…,N1, 2, \dots, N의 한 순열이며, 이 순열의 위수(order)가 정확히 KK임을 당신은 확실히 알고 있습니다.

순열의 위수란 그 순열을 mm번 적용했을 때 모든 원소가 처음 위치로 돌아오게 하는 가장 작은 양의 정수 mm을 말합니다. 이는 순열을 이루는 각 순환(cycle) 길이들의 최소공배수와 같습니다. 예를 들어 코드 2 3 12\ 3\ 1의 위수는 33인데, 1→3→2→11 \to 3 \to 2 \to 1, 2→1→3→22 \to 1 \to 3 \to 2, 3→2→1→33 \to 2 \to 1 \to 3이기 때문입니다.

위수를 알면 시도해야 할 코드의 개수를 크게 줄일 수 있으며, 당신은 그 개수를 정확히 알고 싶습니다. 소수 P=231−1P = 2^{31} - 1보다 큰 수는 인정하지 않기로 했으므로, 그 개수를 PP로 나눈 나머지로 답하세요. (예를 들어 개수가 2312^{31}이면 231 mod P=12^{31} \bmod P = 1이 됩니다.)

NN과 KK가 주어질 때, {1,…,N}\{1, \dots, N\}의 순열 중 위수가 정확히 KK인 것의 개수를 231−12^{31} - 1로 나눈 나머지를 구하세요.

입력

두 정수 NN과 KK가 한 줄에 주어집니다 (1≤N≤1001 \le N \le 100, 1≤K≤231−11 \le K \le 2^{31} - 1).

출력

NN개의 원소로 이루어진 순열 중 위수가 정확히 KK인 것의 개수를 231−12^{31} - 1로 나눈 나머지를 정수 하나로 출력하세요.

예제3

  1. 예제 1

    입력
    3 2
    
    예상 출력
    3
    
  2. 예제 2

    입력
    6 6
    
    예상 출력
    240
    
  3. 예제 3

    입력
    15 12
    
    예상 출력
    1789014075