单位根反演 小猪佩奇学数学

本文解析了一个复杂的数学问题,通过拆解、组合数公式、单位根反演等步骤,展示了如何利用特殊方法解决关于概率与组合的等差乘等比序列的求和问题。最后,文章详细介绍了从DFT到利用等比数列求和的简化过程,以及关键的时间和空间复杂度分析。

题面
一个比较纯粹的推式子题目,第一步先将整除拆开:
∑ i = 0 n ( n i ) p i 1 k ( i − i m o d    k ) \sum_{i=0}^n \binom{n}{i} p^i \frac{1}{k}(i-i \mod k) i=0n(in)pik1(iimodk)
拆开括号并枚举余数:
1 k ( ∑ i = 0 n ( n i ) p i i − ( n i ) p i ∑ j = 0 k − 1 [ ( i − j ) m o d    k = 0 ] j ) \frac{1}{k}(\sum_{i=0}^n \binom{n}{i} p^i i-\binom{n}{i}p^i \sum_{j=0}^{k-1}[(i-j)\mod k=0]j) k1(i=0n(in)pii(in)pij=0k1[(ij)modk=0]j)
利用组合数公式以及单位根反演得:
1 k ( ∑ i = 1 n ( n − 1 i − 1 ) n p i − ( n i ) p i ∑ j = 0 k − 1 j k ∑ t = 0 k − 1 ω k t ( i − j ) ) \frac{1}{k}(\sum_{i=1}^n \binom{n-1}{i-1}n p^i-\binom{n}{i}p^i \sum_{j=0}^{k-1} \frac{j}{k} \sum_{t=0}^{k-1} \omega_k^{t(i-j)}) k1(i=1n(i1n1)npi(in)pij=0k1kjt=0k1ωkt(ij))
根据二项式定理整理:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ j = 0 k − 1 j ∑ t = 0 k − 1 ω k − t j ∑ i = 0 n ( n i ) p i ω k t i ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k} \sum_{j=0}^{k-1}j \sum_{t=0}^{k-1} \omega_k^{-tj} \sum_{i=0}^n \binom{n}{i} p^i \omega_k^{ti}) k1(np(p+1)n1k1j=0k1jt=0k1ωktji=0n(in)piωkti)
再用二项式定理:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ j = 0 k − 1 ∑ t = 0 k − 1 j ω k − t j ( p ω k t + 1 ) n ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k} \sum_{j=0}^{k-1} \sum_{t=0}^{k-1} j \omega_k^{-tj}(p \omega_k^t+1)^n) k1(np(p+1)n1k1j=0k1t=0k1jωktj(pωkt+1)n)
根据这个式子的结构可以用任意模长DFT来求解,但又由于是等差乘等比的结构,可以使用特殊的方法:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ j = 0 k − 1 ∑ t = 0 k − 1 ( p ω k t + 1 ) n ∑ i = 0 j − 1 ω k − t j ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k} \sum_{j=0}^{k-1} \sum_{t=0}^{k-1} (p \omega_k^t+1)^n\sum_{i=0}^{j-1} \omega_k^{-tj}) k1(np(p+1)n1k1j=0k1t=0k1(pωkt+1)ni=0j1ωktj)
交换求和顺序:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ t = 0 k − 1 ( p ω k t + 1 ) n ∑ i = 0 k − 2 ∑ j = i + 1 k − 1 ω k − t j ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k} \sum_{t=0}^{k-1}(p \omega_k^t+1)^n \sum_{i=0}^{k-2} \sum_{j=i+1}^{k-1} \omega_k^{-tj}) k1(np(p+1)n1k1t=0k1(pωkt+1)ni=0k2j=i+1k1ωktj)
利用等比数列求和:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ t = 0 k − 1 ( p ω k t + 1 ) n ∑ i = 0 k − 2 ω k − t k − ω k − t ( i + 1 ) ω k − t − 1 ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k} \sum_{t=0}^{k-1} (p \omega_k^t+1)^n\sum_{i=0}^{k-2} \frac{\omega_k^{-tk}- \omega_{k}^{-t(i+1)}}{\omega_{k}^{-t}-1}) k1(np(p+1)n1k1t=0k1(pωkt+1)ni=0k2ωkt1ωktkωkt(i+1))
整理式子,得到:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ t = 0 k − 1 ( p ω k t + 1 ) n ω k − t − 1 ∑ i = 0 k − 1 ( 1 − ω k − t ( i + 1 ) ) ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k}\sum_{t=0}^{k-1}\frac{(p \omega_k^t+1)^n}{\omega_{k}^{-t}-1}\sum_{i=0}^{k-1} (1- \omega_{k}^{-t(i+1)})) k1(np(p+1)n1k1t=0k1ωkt1(pωkt+1)ni=0k1(1ωkt(i+1)))
根据单位根的性质:
1 k ( n p ( p + 1 ) n − 1 − 1 k ∑ t = 0 k − 1 ( p ω k t + 1 ) n ω k − t − 1 k ) \frac{1}{k}(np(p+1)^{n-1}-\frac{1}{k}\sum_{t=0}^{k-1}\frac{(p \omega_k^t+1)^n}{\omega_{k}^{-t}-1}k) k1(np(p+1)n1k1t=0k1ωkt1(pωkt+1)nk)
最终得到:
1 k ( n p ( p + 1 ) n − 1 − ∑ i = 0 k − 1 ( p ω k i + 1 ) n ω k − i − 1 ) \frac{1}{k}(np(p+1)^{n-1}-\sum_{i=0}^{k-1}\frac{(p \omega_k^i+1)^n}{\omega_{k}^{-i}-1}) k1(np(p+1)n1i=0k1ωki1(pωki+1)n)
这里的式子当 i i i 0 0 0时是错误的,中途不能使用等比数列求和公式。实际答案应该为:
1 k ( n p ( p + 1 ) n − 1 − k − 1 2 ( p + 1 ) n − ∑ i = 1 k − 1 ( p ω k i + 1 ) n ω k − i − 1 ) \frac{1}{k}(np(p+1)^{n-1}-\frac{k-1}{2}(p+1)^n-\sum_{i=1}^{k-1}\frac{(p \omega_k^i+1)^n}{\omega_{k}^{-i}-1}) k1(np(p+1)n12k1(p+1)ni=1k1ωki1(pωki+1)n)
时间复杂度 O ( k log ⁡ 2 n ) O(k \log_2n) O(klog2n),空间复杂度 O ( 1 ) O(1) O(1)

#include<iostream>
using namespace std;
#define R register int
#define L long long
#define I inline
#define P 998244353
I int PowMod(int x,int y){
	int res=1;
	while(y!=0){
		if((y&1)==1){
			res=(L)res*x%P;
		}
		y>>=1;
		x=(L)x*x%P;
	}
	return res;
}
int main(){
	int n,p,k,w,pw=1,ans=0;
	cin>>n>>p>>k;
	w=PowMod(3,(P-1)/k);
	for(R i=1;i!=k;i++){
		pw=(L)pw*w%P;
		ans=((L)PowMod(((L)p*pw+1)%P,n)*PowMod(PowMod(pw,P-2)+P-1,P-2)+ans)%P;
	}
	ans=(499122177ll*(k-1)%P*PowMod(p+1,n)+ans)%P;
	ans=((L)n*p%P*PowMod(p+1,n-1)-ans+P)%P;
	cout<<(L)ans*PowMod(k,P-2)%P;
	return 0;
}
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值