抽象数学合集
好无聊啊,来总结一下这几天学习的东西。
整除分块
整除分块常用于求解以下形式的式子:
其中
直接写结论:
那么我们可以利用这个性质解决问题:
例题1 UVA11526 H(n)
求
模板题。
while(now<=n){
res+=(n/(n/now)-now+1)*(n/now);
now=n/(n/now)+1;
}
例题 2 P2261 [CQOI2007] 余数求和
给定
尽人皆知,原式
又出现了那个整除式子,可以使用整除分块了。
while(now<=n){
int r=(k/now)?(k/(k/now)):n;
r=min(r,n),res+=(F(now,r))*(k/now);
now=r+1;
}
cout<<n*k-res<<endl;
其实,整除分块更多是用于莫比乌斯反演的一个优化求和。
狄利克雷卷积
我们定义两个积性函数
狄利克雷卷积满足以下性质:
-
交换律:
; -
结合律:
; -
分配律:
。
同时满足以下几条:
这些性质会经常用到。
和式变换
这块内容很重要,是做题推式子的基础。
和式变换定律
-
分配律:
; -
交换律:
,其中 是 的一个排列; -
结合律:
。
和式变换技巧
-
替换条件式:
-
替换指标变量:
-
交换求和顺序:
-
分离变量(各回各家,各找各妈):
熟悉上述变换以后,就可以做题了!
先上一个被清峥称为板子的题:
例题 1 P3455 [POI2007] ZAP-Queries
给定
替换指标变量:
因为我们有
枚举
其实就是替换条件式。
分离变量:
显然:
至此推式子已经完成,观察到后面的
n/=k,m/=k;
while(now<=min(n,m)){
int r=min(n/(n/now),m/(m/now));
res+=(sum[r]-sum[now-1])*(n/now)*(m/now),now=r+1;
}
cout<<res<<endl;
上述
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)