[学习笔记] 单位根反演

单位根反演

[ k ∣ n ] = 1 k ∑ i = 0 k − 1 ω k i n [k\mid n]=\frac 1k\sum_{i=0}^{k-1}\omega_k^{in} [kn]=k1i=0k1ωkin

k k k 次单位根是 k k k 次幂为 1 1 1 的复数解 w k w_k wk。利用单位圆和单位根的关系很容易证明。

  • k ∣ n k\mid n kn

    显然 ω 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 k1i=0k11=1=kn

  • k ∤ n k\nmid n kn

    使用等比数列求和。

    [ 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} [kn]=k1i=0k1ωkin=k1ωkn1ωknk1

    ∵ ω 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 ωknk1=ωk01=0ωkn1=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 k1i=0k1ωkin=0=[kn]=kn

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)siai(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=0n(in)sij=03aj[i mod 4=j]=i=0n(in)sij=03aj[4(ij)]
直接单位根反演: [ 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(ij)]=41k=03ω4k(ij)
⇒ ∑ 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=0n(in)si41j=03ajk=03ω4kiω4kj=41j=03ajk=03ω4kji=0n(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=03ajk=03ω4jk(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(mod1)/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
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值