题目描述
题面参考 Codeforces Gym 102471 C. Dirichlet k-th root。
请注意,唯一的不同为数据范围。
定义两个函数 f,g:{1,2,…,n}→Z 的狄利克雷卷积 f∗g 为:
(f∗g)(n)=d∣n∑f(d)g(dn)
我们定义 g=fk 即 k 次幂为:
$$f^{k}=\underbrace {f * \dots * f} _{k~{\textrm {个}}}
$$
在本题中,我们想要解决这个问题的逆问题:给你 g 和 k,你需要找到一个函数 f 使得 g=fk。
另外,保证 g(1)=1,你需要保证 f(1)=1。所有的运算在 Fp 上进行,其中 p=998244353,这意味着狄利克雷卷积为 $(f*g)(n) = \left(\sum_{d|n} f(d)g(\frac nd)\right) \bmod p$。
输入格式
第一行输入两个正整数 n,k。
第二行输入 n 个整数,g(1),g(2),…,g(n),保证 0≤g(i)<998244353,g(1)=1。
输出格式
如果无解,输出 −1。
否则,一行输出 n 个整数 f(1),f(2),…,f(n),要求 0≤f(i)<998244353,f(1)=1,如果有多个解,你只需要输出任意一个。
5 2
1 8 4 26 6
1 4 2 5 3
数据范围与提示
对于 50% 的数据,保证 n≤105。
对于 100% 的数据,保证 2≤n≤106,1≤k<998244353。