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

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

디리클레 kk제곱근

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

요약
F_p 위에서 g(1)=1인 함수 g가 1..n에 주어질 때, f의 k번 디리클레 합성곱이 g가 되는 f(1)=1인 함수 f를 구하거나 해가 없으면 -1을 출력한다.
난이도

어려움10점 중 9점

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

문제

수학자 Pang은 이전 캠프에서 디리클레 합성곱을 배웠다. 하지만 심층 강화 학습에 비하면 그것은 그에게 너무 쉬웠다. 그래서 그는 특별한 일을 했다.

f,g:{1,2,…,n}→Zf,g: \{1,2,\ldots,n\} \to \mathbb {Z} 가 양의 정수에서 정수로 가는 두 함수라면, 디리클레 합성곱 f\*gf \* g는 다음과 같이 정의되는 새로운 함수이다. (f\*g)(n)=∑_d∣nf(d)g(nd).(f \* g)(n) =\sum\_{d \mid n}f(d)g ({\frac {n}{d}}) .

함수 g=fkg=f^k의 kk제곱을 다음과 같이 정의한다. fk=f\*…\*f⏟_ktimes. f^{k}=\underbrace {f \* \dots \* f} \_{k {\textrm {times}}}.

이 문제에서는 역문제를 푼다. gg와 kk가 주어졌을 때, g=fkg=f^k를 만족하는 함수 ff를 찾아야 한다.

또한 f(1)f(1)과 g(1)g(1)은 11이어야 한다는 추가 조건이 있다. 모든 연산은 p=998244353p=998244353인 F_p\mathbb{F}\_{p}에서 수행된다. 즉 디리클레 합성곱에서 (f\*g)(n)=(∑_d∣nf(d)g(nd)) mod p(f \* g)(n) =\left(\sum\_{d \mid n}f(d)g ({\frac {n}{d}})\right) \bmod p이다.

입력

첫째 줄에 두 정수 nn과 kk가 주어진다. (2≤n≤105,1≤k<998244353)(2\leq n\leq 10^5,1\leq k<998244353)

둘째 줄에 nn개의 정수 g(1),g(2),...,g(n)g(1), g(2),..., g(n)이 주어진다. (0≤g(i)<998244353,g(1)=1)(0\le g(i)<998244353, g(1)=1)

출력

해가 없으면 −1-1을 출력한다.

그렇지 않으면 f(1),f(2),...,f(n)f(1), f(2), ..., f(n)을 출력한다. (0≤f(i)<998244353,f(1)=1)(0\le f(i)<998244353, f(1)=1) 해가 여러 개면 아무거나 출력한다.

예제1

  1. 예제 1

    입력
    5 2
    1 8 4 26 6
    
    예상 출력
    1 4 2 5 3