题意:求
n∑i=1m∑j=12×(i,j)−1
思考:原式等价于2n∑i=1m∑j=1(i,j)−n∗m
然后套上欧拉反演即可
时间复杂度O(√n)
题意:T 组数据,每组数据给出一个正整数 K ,求第 K 个不含大于 1的完全平方数因子的正整数。
思考:观察答案的单调性 考虑二分答案
问题转化于如何求一个数的非平方因子数
考虑容斥 我们要减去 22,32,52的数 减去62,102,152的数,忽略42,82,92因子的数
容易发现容斥系数为μ(x)
然后判断一个数是否有平方因子的公式容易得到就是μ2(i)
容斥一下有多少个这种数即可 时间复杂度O(T√nlogn)
求
n∑i=1(i,n)
考虑欧拉反演
原式等价于n∑i=1∑d|n,d|iφ(d)
前提d的枚举 ∑d|nn∑i=1,d|iφ(d)
发现第二轮枚举于d无关 直接化简为∑d|n(n/d)φ(d)
暴力求即可 时间复杂度O(因数个数×√n)≤O(2n)
即O(n).
设 d(x) 为 x 的约数个数,给定 n,m,求
n∑i=1m∑j=1d(ij)
考虑映射法
设a∑x=1pkx=i和b∑y=1pky=j
那么若 i 有px j 有 py 则 ij 有 px+y
那么考虑这样选数:
- i能选的质因数 一定在i选 则pz(z≤x)
- 否则不够了 在j选 并且除以px 则pz(z>x)
因此 最终取的两个因数必须互质
所以答案转化为:
n∑i=1m∑j=1∑x|i∑y|j(x,y)=1
然后前提(x,y)的枚举
n∑x=1m∑y=1n∑x|in∑y|j(x,y)=1
发现后面两项与x,y无关 继续化简
n∑x=1m∑y=1(n/x)(m/y)(x,y)=1
用(i,j)替换一下(x,y) 看到(i,j)=1 考虑莫比乌斯反演
n∑i=1m∑j=1(n/i)(m/j)∑d|i,d|jφ(d)
前提d的枚举
min(n,m)∑d=1n∑i=1m∑j=1[d|i,d|j](n/i)(m/j)φ(d)
这个式子能继续化简
min(n,m)∑d=1nd∑i=1md∑j=1(n/id)(m/jd)φ(d)
换一下顺序
min(n,m)∑d=1φ(d)nd∑i=1(n/id)(md∑j=1m/jd)
定义f(x)表示 x∑i=1xi
原式等于
min(n,m)∑d=1φ(d)f(n/d)f(m/d)
可以通过整除分块预处理好 f 数组 然后上面的式子也是整除分块即可
时间复杂度O(n√n+T√n)
题意:求
n∑i=1m∑j=1lcm(i,j)
思考:转换一下 得
n∑i=1m∑j=1i×j(i,j)
转化一下(i,j) 得
n∑i=1m∑j=1∑d|i,d|j([id,jd)=1]i×jd
将d的枚举提前 得
n∑d=1n∑i=1m∑j=1(d|i,d|j)([id,jd)=1]i×jd
化简一下原式 得
min(n,m)∑d=1n/d∑i=1m/d∑j=1[(i,j)=1](i∗j∗d)
换一下系数 并带入莫比乌斯反演 得
min(n,m)∑x=1n/x∑i=1m/x∑j=1∑d|i,d|jμ(d)∗i∗j∗x
将d的枚举提前 得
min(n,m)∑d=1min(n,m)∑x=1n/x∑i=1m/x∑j=1[d|i,d|j]μ(d)∗i∗j∗x
继续化简 得
min(n,m)∑d=1min(n,m)∑x=1n/xd∑i=1m/xd∑j=1μ(d)∗i∗j∗x∗d∗d
容易发现 这已经是最简式子 将每个式子变换一下位置
min(n,m)∑d=1μ(d)∗d∗dmin(n,m)∑x=1xn/xd∑i=1im/xd∑j=1j
定义f(x)表示x∑i=1i 化简原式
min(n,m)∑d=1μ(d)∗d∗dmin(n,m)∑x=1x∗f(n/xd)f(m/xd)
此时 式子需要优化 定义T=xd 原式等于
min(n,m)∑d=1μ(T/x)∗T/x∗T/xmin(n,m)∑x=1T/d∗f(n/T)f(m/T)
化简成枚举T 原式等于
min(n,m)∑T=1f(n/T)f(m/T)∑d|Tμ(T/d)∗(T/d)2∗d
注意到n≤107 直接整除分块这个式子会TLE两个点 考虑优化
发现后面的式子∑d|Tμ(T/d)∗(T/d)2∗d完全可以优化 可以O(nloglogn)预处理 但还是会T 怎么办?
实际上 定义 g(x) 函数为 ∑d|xμ(x/d)∗(x/d)2∗d
问题转化为线性求解 g 函数
容易发现 若定义 q(x) 函数为 μ(x)∗x2
其实g 就是q函数和id函数的卷积 即 g=q∗id
因为id函数是积性函数 q 函数也是积性函数 因此 g 也是积性函数 因此可以线性筛求解
怎么求呢?
考虑拆分原函数
g(x)=∑d|xμ(x/d)∗(x/d)∗x/d∗d
=∑d|xμ(x/d)∗(x/d)∗x
提一下 x 得
=x∑d|xμ(x/d)∗(x/d)
化简一下 得
=x∑d|xμ(d)∗d
现在考虑怎么筛 肯定先不考虑 x 最后再乘上去
- 如果 g(x) 中,x为质数 容易得到为μ(1)∗x+1∗μ(x)=x−1
- 如果 g(x∗pj) 中 x mod pj≠0 直接根据积性函数性质求导即可
- 如果 g(x∗pj) 中 x mod pj=0 因为有重复质因子时 mu(x)=0 所以只需计算所有单一质因子即可 乘上pj就出现了重复因子 所以x已经包含了所有质因子 因此g(x∗pj)=g(x)
然后筛完乘上 x 即可
回到式子
min(n,m)∑T=1f(n/T)f(m/T)g(T)
整除分块一下即可 时间复杂度O(n+T√n)
求
n∑i=1lcm(i,n)
T≤3∗105 , n≤106
大力拆式子 懒得写过程 最终结果为
n∑d|nd∑i=1[(i,d)=1]i
所以我们第二个式子要求与当前的数互质的数的和
这个就不能直接套反演了 它还有一个系数i
我们思考一下质因数的特点
我们知道一个定律:(a,n)=1→(a,n−a)=1(n>a)
所以质因数是一对对的 且每一对的和为n
所以质因数的和就是φ(n)∗n/2
总时间复杂度O(n+T√n)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】