题目链接:[SDOI2014]数表
题意:
T 组数据,每次给出 n,m,a ,在 n∗m 矩阵的每个位置上有一个数值,第 i 行第 j 列数值为能同时整除 i 与 j 的所有自然数之和,求 n∗m 矩阵中所有不超过 a 的数值和。(T≤2∗104;1≤n,m≤105)
首先不考虑小于等于 a 的限制。
能同时整除 i 与 j 就是能整除 gcd(i,j),所有每个位置上的数即为 gcd 的因子和 σ(gcd(i,j))。
设f(x)表示 x 在 n,m 数表中出现次数。
f(x)=n∑i=1m∑j=1[gcd(i,j)=x]
老朋友了。。。
F(x)=∑x|df(d)=⌊nx⌋⌊mx⌋
f(x)=∑x|dμ(dx)F(d)=∑x|dμ(dx)⌊nx⌋⌊mx⌋
答案为每一个 x 约数和乘以出现次数。
Ans=n∑i=1σ(i)f(i)
=n∑i=1σ(i)∑i|dμ(di)⌊nd⌋⌊md⌋
将枚举 i 的倍数改为枚举 d 的因数。
Ans=n∑d=1⌊nd⌋⌊md⌋∑i|dσ(i)μ(di)
前面可以用整除分块,后面做前缀和。
设 g(x)=∑i|xσ(i)μ(xi)
给 g 做个前缀和,分块的时候乘上前面的 ⌊nd⌋⌊md⌋。
然后考虑有 a 的限制,则对于 g(x) 来讲当 x 的因子 i 满足σ(i)≥a 时其对 g 没有贡献。
将询问离线按 a 升序排列,每当 a 增加时就将 σ(i)=a 的贡献加上,可以枚举倍数来更新 g 的值,由于 g 值在变化且需要快速求出前缀和,值需要用树状数组动态维护。
瓶颈复杂度为O(T√nlog(n))。竟然可过?真神奇~
细节还蛮多的,但是一A了,有被爽到~。。。
彩蛋:
由于此题答案要对231取模:

159巨佬TQL!orz
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具