首页 > 其他分享 >【瞎口胡】单位根反演

【瞎口胡】单位根反演

时间:2022-09-01 11:58:21浏览次数:90  
标签:dbinom limits cdot dfrac sum 瞎口 单位根 反演 omega

单位根反演是用单位根来表示整除关系的东西。

定义式

\[\left[k\mid n\right] = \dfrac{1}{k} \sum \limits_{i=0}^{k-1} \omega_k^{in} \]

如果 \(k \mid n\),那么 \(\omega_k^{n}=(\omega_k^{k})^{\frac nk}=1\),从而 \(\omega_{k}^{in}=1\),于是右边和式的值等于 \(k\),乘上 \(\dfrac{1}{k}\) 后等于 \(1\)。

如果 \(k \nmid n\),那么 \(\omega_{k}^n \neq 1\),此时使用等比数列求和公式求得右边等于 \(\dfrac{\omega_{k}^{nk}-\omega_k^{0}}{\omega_{k}^n-1} = 0\)。

这样和式里面需要枚举整除关系的时候我们就可以用这个来代替,方便简化式子。

例题 Luogu P5591 小猪佩奇学数学

题意

给定 \(n,p,k\),求

\[\sum_{i=0}^n \binom n i \times p^{i} \times \left\lfloor \frac{i}{k} \right\rfloor \bmod 998244353 \]

\(1 \leq n,p <998244353,k \in \{2^{w}|0 \leq w \leq 20\}\)

题解

注意到这东西不能整除分块,于是我们先对那个下取整开刀,变成 \(\dfrac{i - i \bmod k}{k}\),然后提出 \(\dfrac{1}{k}\),于是原式等于

\[\dfrac{1}{k} \sum \limits_{i=0}^n \dbinom{n}{i}\times p^i(i - i \bmod k) \\ = \dfrac{1}{k} \left ( \sum \limits_{i=0}^n i \times \dbinom{n}{i} p^i - \sum \limits_{i=0}^n \dbinom{n}{i} p^i \times i \bmod k\right) \]

不管外面那个 \(\dfrac{1}{k}\),先看左边的那个和式,吸收公式

\[\sum \limits_{i=0}^n i \times \dbinom{n}{i} p^i = \sum \limits_{i=0}^n n\dbinom{n-1}{i-1} p^i \\ = n\sum \limits_{i=0}^{n-1} \dbinom{n-1}{i} p^{i+1} \\ = np \sum \limits_{i=0}^{n-1} \dbinom{n-1}{i} p^i \\ = np (1+p)^{n-1} \]

考虑右边的 \(\sum \limits_{i=0}^n \dbinom{n}{i} p^i \times i \bmod k\)。我们并没有什么办法来处理 \(i \bmod k\),于是枚举它,

\[\sum \limits_{i=0}^n \dbinom{n}{i} p^i \times i \bmod k = \sum \limits_{r=0}^{k-1} r \sum \limits_{i=0}^{n} \dbinom{n}{i} p^i [k \mid (i - r)] \\ \]

接上单位根反演

\[\sum \limits_{r=0}^{k-1} r \sum \limits_{i=0}^{n} \dbinom{n}{i} p^i \left( \dfrac{1}{k} \sum \limits_{j=0}^{k-1} \omega_k^{j(i-r)}\right) \\ =\dfrac{1}{k} \sum \limits_{r=0}^{k-1} r \sum \limits_{i=0}^{n} \dbinom{n}{i} p^i \sum \limits_{j=0}^{k-1} \omega_k^{ij}·\omega_{k}^{-jr} \]

第二个求和号很像二项式,于是把它往里面放

\[= \dfrac 1k \sum \limits_{r=0}^{k-1} r \sum \limits_{j=0}^{k-1} \omega_{k}^{-jr} \sum \limits_{i=0}^n \dbinom{n}{i} p^i \omega_{k}^{ij} \\ = \dfrac 1k \sum \limits_{r=0}^{k-1} r \sum \limits_{j=0}^{k-1} \omega_{k}^{-jr} \sum \limits_{i=0}^n \dbinom{n}{i} (p\cdot \omega_k^j)^i \\ = \dfrac 1k \sum \limits_{r=0}^{k-1} r \sum \limits_{j=0}^{k-1} \omega_k^{-jr} (1+p\cdot \omega_k^j)^n \]

里面的一坨只和 \(j\) 一个变量相关,考虑交换求和号

\[= \dfrac 1k \sum \limits_{j=0}^{k-1} (1+p\cdot\omega_k^j)^n \sum \limits_{r=0}^{k-1} r (\omega_{k}^{-j})^r \]

第二个求和号是一个差比数列求和,求和方法和等比数列类似,考虑多算一项,和当前项做差后比较系数。形如

\[\sum \limits_{i=0}^{n-1} i\cdot a^i \]

的数列,记其和为 \(S\),那么

\[S = \sum \limits_{i=0}^{n-1} (i+1)\cdot a^{i+1} - n\cdot a^n \\ = a \sum \limits_{i=0}^{n-1} i \cdot a^i - a \sum \limits_{i=0}^{n-1} a^i - n\cdot a^n \\ = aS - a\dfrac{a^n-1}{a-1}-n\cdot a^n \]

移项,得

\[(a-1)S = n\cdot a^n - \dfrac{a^{n+1}-a}{a-1} \\ S = \dfrac{n \cdot a^n}{a-1} - \dfrac{a^{n+1}-a}{(a-1)^2} \ \ (a \neq 1) \]

如果 \(a=1\),那么 \(S=\dfrac{n(n-1)}{2}\)。

再来看上面的式子

\[= \dfrac 1k \sum \limits_{j=0}^{k-1} (1+p\cdot\omega_k^j)^n \sum \limits_{r=0}^{k-1} r (\omega_{k}^{-j})^r \]

预处理单位根,枚举 \(j\) 的时候用快速幂算 \((1+p\cdot \omega_k^j)^n\) 和后面的差比数列和即可,只有一个 \(\log\)。

# include <bits/stdc++.h>

const int N=1048580,INF=0x3f3f3f3f,MOD=998244353;

int w[N];
int n,p,k;

inline int read(void){
	int res,f=1;
	char c;
	while((c=getchar())<'0'||c>'9')
		if(c=='-')f=-1;
	res=c-48;
	while((c=getchar())>='0'&&c<='9')
		res=res*10+c-48;
	return res*f;
}
inline int qpow(int d,int p){
	int ans=1;
	for(;p;p>>=1,d=1ll*d*d%MOD) (p&1)&&(ans=1ll*ans*d%MOD);
	return ans;
}
inline int add(int x,int y){
	return (x+y>=MOD)?(x+y-MOD):(x+y);
}
inline int mi(int x,int y){
	return (x-y<0)?(x-y+MOD):(x-y);
}
inline int S(int r,int n){
	if(r==1) return 1ll*n*(n-1)/2%MOD;
	return mi(1ll*n*qpow(r,n)%MOD*qpow(r-1,MOD-2)%MOD,1ll*mi(qpow(r,n+1),r)*qpow(qpow(r-1,2),MOD-2)%MOD);
}

int main(void){
	n=read(),p=read(),k=read();
	int ans=1ll*n*p%MOD*qpow(p+1,n-1)%MOD,sum=0;
	w[0]=1,w[1]=qpow(3,(MOD-1)/k);
	for(int i=2;i<=k;++i) w[i]=1ll*w[i-1]*w[1]%MOD;
	for(int i=0;i<k;++i) sum=add(sum,1ll*qpow(add(1ll*w[i]*p%MOD,1),n)*S(w[k-i],k)%MOD);
	ans=mi(ans,1ll*sum*qpow(k,MOD-2)%MOD);
	printf("%lld",1ll*ans*qpow(k,MOD-2)%MOD);
	return 0;
}

标签:dbinom,limits,cdot,dfrac,sum,瞎口,单位根,反演,omega
From: https://www.cnblogs.com/liuzongxin/p/16646024.html

相关文章

  • 【瞎口胡】Min-Max 容斥
    Min-Max容斥是通过容斥集合的最小值来得到集合最大值的一种方法。结合期望的线性性,我们得以计算几个随机变量最值的期望,它往往不和这些变量期望的最值相等。Min-Max容斥......
  • 莫比乌斯函数与莫比乌斯反演
    莫比乌斯函数很简单,莫比乌斯函数\(\mu(n)=\begin{cases}0&n有平方质因子\\1&n=1\\(-1)^k&k为本质不同质因子数量\end{cases}\)莫比乌斯函数可以用来做容......
  • 欧拉反演与它的证明
    就是证明,用狄利克雷卷积做,欧拉反演狗都不用/oh\(\sum\limits_{d|n}\varphi(d)=n\)。长得很像狄利克雷卷积,令\(g(n)\)恒等于\(1\),作\(\varphi(n)\)与\(g(n)\)的......
  • 【瞎口胡】多步容斥和二项式反演
    多步容斥多步容斥是指,对于\(n\)个集合\(A_1,A_2,\cdots,A_n\),有\[|A_1\cupA_2\cdots\cupA_n|=\sum\limits_{1\leqi\leqn}|A_i|-\sum\limits_{1\leqi<......
  • 莫比乌斯反演
    莫比乌斯反演莫比乌斯函数定义将\(n\) 质因数分解\[n=\prod_{i=1}^{k}p_i^{\alpha_i}\]则\[\mu(n)=\left\{\begin{matrix}1,&n=1\\0,&\exists\alph......
  • [莫比乌斯反演]一些常用公式总结
    一.莫比乌斯反演公式$$$\qquad\qquad\qquad\qquad\qquad$设$F(n)=\sum\limits_{d|n}f(d)$,那么有$f(n)=\sum\limits_{d|n}\mu(d)F(\frac{n}{d})$其中$\mu(d)$......
  • 狄利克雷卷积 + 莫比乌斯反演
    一.狄利克雷卷积对于两个数论函数,我们定义定义狄利克雷卷积:$*$那么对于数论函数\(f(x)\)和\(g(x)\),他们的狄利克雷卷积结果为\(h(x)\)定义为:\[h(x)=\sum......