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

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

FFT 알고리즘

시간 제한1.5초메모리 제한512 MB

요약
m과 k가 주어질 때, m에 대한 원시 2^k승근을 하나 찾거나 존재하지 않으면 -1을 출력한다.
난이도

어려움10점 중 9점

유형
정수론, 수학, 구현, 분할 정복
정답자
아직 제출이 없습니다

문제

차수가 2k2^k 미만인 다항식에 모듈러 연산 환경에서 FFT 알고리즘을 적용하려면, 원시 2k2^k차 단위근 ω\omega를 찾아야 한다.

두 정수 mm과 kk가 주어졌을 때, 다음 조건을 만족하는 정수 ω\omega를 찾아야 한다.

  • 0≤ω<m0 \le \omega < m
  • ω2k≡1(modm)\omega^{2^k} \equiv 1 \pmod{m}
  • 0<p<2k0 < p < 2^k인 모든 pp에 대해 ωp≢1(modm)\omega^p \not\equiv 1 \pmod{m}

이 문제에서는 그러한 ω\omega를 찾거나, 존재하지 않음을 판별해야 한다. FFT 적용을 염두에 두고 kk에 합리적인 제한을 두었다. kk가 작으면 단순한 다항식 곱셈으로 충분하고, kk가 크면 FFT가 1초 이상 걸리기 때문이다(어차피 우리는 경쟁 프로그래머니까).

입력

첫 번째 줄에 두 정수 mm과 kk가 주어진다. (2≤m≤4⋅10182 \le m \le 4 \cdot 10^{18}, 15≤k≤2315 \le k \le 23)

출력

조건을 만족하는 ω\omega를 아무거나 출력한다. 그러한 ω\omega가 없으면 −1-1을 출력한다.

예제3

  1. 예제 1

    입력
    998244353 23
    
    예상 출력
    683321333
    
  2. 예제 2

    입력
    1048576 15
    
    예상 출력
    64609
    
  3. 예제 3

    입력
    3 23
    
    예상 출력
    -1