单位根反演
[ k ∣ n ] = 1 k ∑ i = 0 k − 1 ω k i n [k\mid n]=\frac 1k\sum_{i=0}^{k-1}\omega_k^{in} [k∣n]=k1∑i=0k−1ωkin
k k k 次单位根是 k k k 次幂为 1 1 1 的复数解 w k w_k wk。利用单位圆和单位根的关系很容易证明。
-
k ∣ n k\mid n k∣n
显然 ω k i n \omega_k^{in} ωkin,相当于转了 i n k \frac{in}k kin 圈单位圆,结果仍是 1 1 1。
1 k ∑ i = 0 k − 1 1 = 1 = k ∣ n \frac 1k\sum_{i=0}^{k-1}1=1=k\mid n k1∑i=0k−11=1=k∣n
-
k ∤ n k\nmid n k∤n
使用等比数列求和。
[ k ∣ n ] = 1 k ∑ i = 0 k − 1 ω k i n = 1 k ⋅ ω k n k − 1 ω k n − 1 [k\mid n]=\frac 1k\sum_{i=0}^{k-1}\omega_k^{in}=\frac 1k·\frac{\omega_k^{nk}-1}{\omega_k^n-1} [k∣n]=k1∑i=0k−1ωkin=k1⋅ωkn−1ωknk−1
∵ ω k n k − 1 = ω k 0 − 1 = 0 ∧ ω k n − 1 ≠ 0 \because\omega_k^{nk}-1=\omega_k^0-1=0\wedge \omega_k^n-1\neq 0 ∵ωknk−1=ωk0−1=0∧ωkn−1=0
∴ 1 k ∑ i = 0 k − 1 ω k i n = 0 = [ k ∣ n ] = k ∤ n \therefore \frac 1k\sum_{i=0}^{k-1}\omega_k^{in}=0=[k\mid n]=k\nmid n ∴k1∑i=0k−1ωkin=0=[k∣n]=k∤n
LOJ6485. LJJ学二项式定理
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 C ( n , i ) ⋅ s i ⋅ a i ( m o d 4 ) \sum_{i=0}^nC(n,i)·s^i·a_{i\pmod 4} ∑i=0nC(n,i)⋅si⋅ai(mod4)。结果对 998244353 998244353 998244353 取模。
趁热打铁,我们很容易想到将
i
i
i 按模
4
4
4 的余数进行分类。对于每一类我们只想统计该统计的数。
∑
i
=
0
n
(
n
i
)
s
i
∑
j
=
0
3
a
j
[
i
mod
4
=
j
]
=
∑
i
=
0
n
(
n
i
)
s
i
∑
j
=
0
3
a
j
[
4
∣
(
i
−
j
)
]
\sum_{i=0}^n\binom nis^i\sum_{j=0}^3a_j[i\ \text{mod}\ 4=j]=\sum_{i=0}^n\binom nis^i\sum_{j=0}^3a_j[4\mid(i-j)]
i=0∑n(in)sij=0∑3aj[i mod 4=j]=i=0∑n(in)sij=0∑3aj[4∣(i−j)]
直接单位根反演:
[
4
∣
(
i
−
j
)
]
=
1
4
∑
k
=
0
3
ω
4
k
(
i
−
j
)
[4|(i-j)]=\frac{1}{4}\sum_{k=0}^3\omega_{4}^{k(i-j)}
[4∣(i−j)]=41∑k=03ω4k(i−j)
⇒
∑
i
=
0
n
(
n
i
)
s
i
⋅
1
4
∑
j
=
0
3
a
j
⋅
∑
k
=
0
3
ω
4
k
i
ω
4
−
k
j
=
1
4
∑
j
=
0
3
a
j
∑
k
=
0
3
ω
4
−
k
j
∑
i
=
0
n
(
n
i
)
s
i
ω
4
k
i
\Rightarrow \sum_{i=0}^n\binom nis^i·\frac 14\sum_{j=0}^3a_j·\sum_{k=0}^3\omega_4^{ki}\omega_4^{-kj}=\frac 14\sum_{j=0}^3a_j\sum_{k=0}^3\omega_4^{-kj}\sum_{i=0}^n\binom nis^i\omega_4^{ki}
⇒i=0∑n(in)si⋅41j=0∑3aj⋅k=0∑3ω4kiω4−kj=41j=0∑3ajk=0∑3ω4−kji=0∑n(in)siω4ki
二项式定理:
∑
i
=
0
n
(
n
i
)
s
i
ω
4
k
i
=
∑
i
=
0
n
(
n
i
)
(
s
ω
4
k
)
i
=
(
s
ω
4
k
+
1
)
n
\sum_{i=0}^n\binom nis^i\omega_4^{ki}=\sum_{i=0}^n\binom ni(s\omega_4^k)^i=(s\omega_4^k+1)^n
∑i=0n(in)siω4ki=∑i=0n(in)(sω4k)i=(sω4k+1)n
⇒
1
4
∑
j
=
0
3
a
j
∑
k
=
0
3
ω
4
−
j
k
(
s
ω
4
k
+
1
)
n
\Rightarrow \frac 14\sum_{j=0}^3a_j\sum_{k=0}^3\omega_4^{-jk}(s\omega_4^k+1)^n
⇒41j=0∑3ajk=0∑3ω4−jk(sω4k+1)n
模
998244353
998244353
998244353 意义下是有四次单位根的,且原根为
3
3
3,有
ω
4
1
=
g
(
m
o
d
−
1
)
/
4
\omega_4^1=g^{(mod-1)/4}
ω41=g(mod−1)/4。
直接算即可。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353
int T, n, s;
int a[10], w[10] = { 1, 911660635, 998244352, 86583718 };
int qkpow( int x, int y ) {
int ans = 1;
while( y ) {
if( y & 1 ) ans = ans * x % mod;
x = x * x % mod;
y >>= 1;
}
return ans;
}
signed main() {
scanf( "%lld", &T );
while( T -- ) {
scanf( "%lld %lld", &n, &s );
for( int i = 0;i < 4;i ++ ) scanf( "%lld", &a[i] );
int ans = 0;
for( int i = 0;i < 4;i ++ ) {
int sum = 0;
for( int j = 0;j < 4;j ++ )
( sum += w[(4 - i) * j % 4] * qkpow( s * w[j] % mod + 1, n ) ) %= mod;
( ans += sum * a[i] ) %= mod;
}
printf( "%lld\n", ans * qkpow( 4, mod - 2 ) % mod );
}
return 0;
}
/*
6
1 2 3 4 5 6
2 3 4 5 6 1
3 4 5 6 1 2
4 5 6 1 2 3
5 6 1 2 3 4
6 1 2 3 4 5
*/