D e s c r i p t i o n \mathcal{Description} Description
T
T
T组询问,每次给
n
,
s
,
a
0
,
a
1
,
a
2
,
a
3
n,s,a_0,a_1,a_2,a_3
n,s,a0,a1,a2,a3求
(
∑
i
=
0
n
(
n
i
)
⋅
s
i
⋅
a
i
m
o
d
4
)
m
o
d
998244353
\begin{aligned}\left(\sum ^{n}_{i=0}\begin{pmatrix} n \\ i \end{pmatrix}\cdot s^{i}\cdot a_{i\ mod\ 4}\right)mod\ 998244353\end{aligned}
(i=0∑n(ni)⋅si⋅ai mod 4)mod 998244353
S o l u t i o n \mathcal{Solution} Solution
这道题要用单位根反演
[
n
∣
k
]
=
1
n
∑
i
=
0
n
−
1
w
n
i
k
\begin{aligned}\left[ n\ |\ k\right] =\dfrac {1}{n}\sum ^{n-1}_{i=0}w^{ik}_{n}\end{aligned}
[n ∣ k]=n1i=0∑n−1wnik
我们先打表,或者查表找出在模
998244353
998244353
998244353下的原根
ω
4
0
\omega_4^0
ω40并处理好
ω
4
1
,
ω
4
2
,
ω
4
3
\omega_4^1,\omega_4^2,\omega_4^3
ω41,ω42,ω43
考虑对每个
a
i
a_i
ai单独计算其答案
以
a
0
a_0
a0为例
a
n
s
a
0
=
1
4
a
0
∑
i
=
0
n
[
4
∣
i
]
(
n
i
)
s
i
=
1
4
a
0
∑
i
=
0
n
(
n
i
)
s
i
∑
j
=
0
3
(
ω
4
j
)
i
=
1
4
a
0
∑
j
=
0
3
∑
i
=
0
n
(
n
i
)
s
i
(
ω
4
j
)
i
=
1
4
a
0
∑
j
=
0
3
(
s
ω
4
j
+
1
)
n
\begin{aligned} ans_{a_0}&=\frac{1}{4}a_0\sum_{i=0}^n [4\ |\ i]{n\choose i}s^i\\ &=\frac{1}{4}a_0\sum_{i=0}^n{n\choose i}s^i\sum_{j=0}^3 (\omega_4^{j})^i\\ &=\frac{1}{4}a_0\sum_{j=0}^3\sum_{i=0}^n {n\choose i}s^i(\omega_4^j)^i\\ &=\frac{1}{4}a_0\sum_{j=0}^3(s\omega_4^j+1)^n \end{aligned}
ansa0=41a0i=0∑n[4 ∣ i](in)si=41a0i=0∑n(in)sij=0∑3(ω4j)i=41a0j=0∑3i=0∑n(in)si(ω4j)i=41a0j=0∑3(sω4j+1)n
对于其他
a
i
a_i
ai,我们可以将其写成
[
4
∣
i
+
4
−
k
]
[4\ |\ i+4-k]
[4 ∣ i+4−k]的形式,并提一个
ω
x
\omega^x
ωx出来
下面完整的推一遍
a
n
s
=
∑
k
=
0
3
a
k
∑
i
=
0
n
[
4
∣
i
+
4
−
k
]
s
i
⋅
(
n
i
)
=
∑
k
=
0
3
1
4
a
k
∑
i
=
0
n
∑
j
=
0
3
ω
4
j
⋅
(
i
+
4
−
k
)
⋅
s
i
⋅
(
n
i
)
=
∑
k
=
0
3
1
4
a
k
∑
i
=
0
n
∑
j
=
0
3
ω
4
(
4
j
−
j
k
)
⋅
ω
4
j
i
⋅
s
i
⋅
(
n
i
)
=
∑
k
=
0
3
1
4
a
k
∑
j
=
0
3
ω
4
(
4
j
−
j
k
)
∑
i
=
0
n
ω
j
i
⋅
s
i
⋅
(
n
i
)
=
∑
k
=
0
3
1
4
a
k
∑
j
=
0
3
ω
4
(
4
j
−
j
k
)
(
s
⋅
ω
4
j
+
1
)
n
\begin{aligned}ans&=\sum ^{3}_{k=0}a_{k}\sum ^{n}_{i=0}\left[ 4\ |\ i+4-k\right] s^{i}\cdot \begin{pmatrix} n \\ i \end{pmatrix}\\ &=\sum ^{3}_{k=0}\dfrac {1}{4}a_{k}\sum ^{n}_{i=0}\sum ^{3}_{j=0}\omega^{j\cdot\left( i+4-k\right) }_{4}\cdot s^{i}\cdot \begin{pmatrix} n \\ i \end{pmatrix}\\ &=\sum ^{3}_{k=0}\dfrac {1}{4}a_{k}\sum ^{n}_{i=0}\sum ^{3}_{j=0}\omega^{\left(4j-jk\right) }_{4}\cdot \omega^{j^i}_4\cdot s^{i}\cdot \begin{pmatrix} n \\ i \end{pmatrix}\\ &=\sum ^{3}_{k=0}\dfrac {1}{4}a_{k}\sum ^{3}_{j=0}\omega^{\left(4j-jk\right) }_{4}\sum ^{n}_{i=0} \omega^{j^i}\cdot s^{i}\cdot \begin{pmatrix} n \\ i \end{pmatrix}\\ &=\sum ^{3}_{k=0}\dfrac {1}{4}a_{k}\sum ^{3}_{j=0}\omega^{\left(4j-jk\right) }_{4}\left(s\cdot \omega^j_4+1\right)^n \\ \end{aligned}
ans=k=0∑3aki=0∑n[4 ∣ i+4−k]si⋅(ni)=k=0∑341aki=0∑nj=0∑3ω4j⋅(i+4−k)⋅si⋅(ni)=k=0∑341aki=0∑nj=0∑3ω4(4j−jk)⋅ω4ji⋅si⋅(ni)=k=0∑341akj=0∑3ω4(4j−jk)i=0∑nωji⋅si⋅(ni)=k=0∑341akj=0∑3ω4(4j−jk)(s⋅ω4j+1)n
拿出来,再写一遍
a
n
s
=
∑
i
=
0
3
1
4
a
i
∑
j
=
0
3
ω
4
(
4
j
−
i
j
)
(
s
⋅
ω
4
j
+
1
)
n
\begin{aligned}ans=\sum ^{3}_{i=0}\dfrac {1}{4}a_{i}\sum ^{3}_{j=0}\omega^{\left(4j-ij\right) }_{4}\left(s\cdot \omega^j_4+1\right)^n \\ \end{aligned}
ans=i=0∑341aij=0∑3ω4(4j−ij)(s⋅ω4j+1)n
C o d e \mathcal{Code} Code
#include <cstdio>
#define ll long long
using namespace std;
const int mod = 998244353;
const int w [] = {1,911660635,998244352,86583718};
ll T,n,s,ans,res,inv;
ll a[4];
ll ksm (ll a,ll b)
{
a%=mod;
ll s=1;
for (;b;b>>=1,a=a*a%mod)
if (b&1) s=s*a%mod;
return s;
}
int main ()
{
scanf("%lld",&T);
inv=ksm(4,mod-2);
while (T--){
scanf("%lld%lld%lld%lld%lld%lld",&n,&s,&a[0],&a[1],&a[2],&a[3]);
ans=0;
for (int i=0;i<=3;++i){
res=0;
for (int j=0;j<=3;++j)
res=(res+w[(4*j-i*j)%4]*ksm(s*w[j]+1,n)%mod)%mod;
ans=(ans+a[i]*res%mod)%mod;
}
printf("%lld\n",ans*inv%mod);
}
return 0;
}
如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧