만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

DFT에 관한 또 하나의 문제

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

요약
소수 p와 n이 p-1을 나누는 배열 a가 주어질 때, 최소 원시근 g로 정한 w를 이용한 DFT를 m번 적용한 결과를 출력합니다.
난이도

어려움10점 중 8점

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

문제

pp는 소수이고, a=(a_0,a_1,…,a_n−1)a=(a\_0, a\_1, \ldots, a\_{n-1})는 정수 nn개로 이루어진 배열이다. 여기서 p=Kn+1p=Kn+1을 만족하는 양의 정수 KK가 있다. 모든 k=0,1,…,n−1k=0, 1, \ldots, n-1에 대해

a^_k=(∑_j=0n−1a_jwjk) mod p\hat{a}\_k = \left( \sum\_{j=0}^{n-1} a\_j w^{jk} \right) \bmod p

이 성립하면 배열 a^=(a^_0,a^_1,…,a^_n−1)\hat{a}=(\hat{a}\_0, \hat{a}\_1, \ldots, \hat{a}\_{n-1})를 aa의 이산 푸리에 변환이라 하고, a^=DFT(a)\hat{a} = \mathrm{DFT}(a)로 쓴다. 여기서 ww는 법 pp에서의 nn차 원시 단위근이다. 즉 wn≡1(modp)w^n \equiv 1 \pmod p이고, 0<i<n0 < i < n인 모든 ii에 대해 wi≢1(modp)w^i \not\equiv 1 \pmod p이다.

ww는 여러 값이 가능하므로 DFT가 하나로 정해지지 않는다. 이 문제에서는 다음 방식으로 ww를 정한다. gg를 법 pp의 생성원이라 하자. 즉 0<x<p0 < x < p인 모든 xx에 대해 x=gr mod px = g^r \bmod p인 0≤r<p−10 \leq r < p-1이 존재한다. 이런 gg 중 가장 작은 양의 값을 고르고, w=gK mod pw = g^K \bmod p로 둔다.

\mathrm{DFT}^{(m)}(a) = \underbrace{\mathrm{DFT}(\mathrm{DFT}( \ldots \mathrm{DFT}(a) \ldots ))}_{\text{m번}}로 정의한다. 이 문제의 과제는 DFT(m)(a)\mathrm{DFT}^{(m)}(a)를 구하는 것이다.

입력

첫 줄에 공백으로 구분된 세 정수 nn (2≤n≤3⋅1052 \leq n \leq 3 \cdot 10^5), pp (5≤p≤109+75 \leq p \leq 10^9+7), mm (0≤m≤10180 \leq m \leq 10^{18})이 주어진다. pp는 소수이고, nn은 p−1p-1을 나누어떨어뜨린다고 보장된다.

둘째 줄에는 공백으로 구분된 정수 nn개 a0,a1,…,an−1a_0, a_1, \ldots, a_{n-1} (0≤ai<p0 \leq a_i < p)이 주어진다.

출력

연산을 적용한 뒤의 배열 a0′,a1′,…,an−1′a'_0, a'_1, \ldots, a'_{n-1}을 공백으로 구분하여 nn개 출력한다.

힌트

예시에서 p=61p=61의 가장 작은 생성원은 g=2g=2이다. K=61−16=10K = \frac{61 - 1}{6} = 10이므로, 법 61에서 6차 원시 단위근으로 w=210 mod 61=48w = 2^{10} \bmod 61 = 48을 고른다. 처음 몇 번의 반복 결과는 다음과 같다.

  • DFT(0)(a)=(24,17,39,52,25,7)\mathrm{DFT}^{(0)}(a) = (24, 17, 39, 52, 25, 7)
  • DFT(1)(a)=(42,55,25,12,39,32)\mathrm{DFT}^{(1)}(a) = (42, 55, 25, 12, 39, 32)
  • DFT(2)(a)=(22,42,28,7,51,41)\mathrm{DFT}^{(2)}(a) = (22, 42, 28, 7, 51, 41)
  • DFT(3)(a)=(8,9,51,11,28,25)\mathrm{DFT}^{(3)}(a) = (8, 9, 51, 11, 28, 25)
  • DFT(4)(a)=(10,2,1,42,46,8)\mathrm{DFT}^{(4)}(a) = (10, 2, 1, 42, 46, 8)

예제1

  1. 예제 1

    입력
    6 61 4
    24 17 39 52 25 7
    
    예상 출력
    10 2 1 42 46 8