数论练习题小结

1.P1447

题意:求

i=1nj=1m2×(i,j)1

思考:原式等价于2i=1nj=1m(i,j)nm

然后套上欧拉反演即可

时间复杂度O(n)

2.P4318

题意:T 组数据,每组数据给出一个正整数 K ,求第 K 个不含大于 1的完全平方数因子的正整数。

思考:观察答案的单调性 考虑二分答案

问题转化于如何求一个数的非平方因子数

考虑容斥 我们要减去 22,32,52的数 减去62,102,152的数,忽略42,82,92因子的数

容易发现容斥系数为μ(x)

然后判断一个数是否有平方因子的公式容易得到就是μ2(i)

容斥一下有多少个这种数即可 时间复杂度O(Tnlogn)

3.P2303

i=1n(i,n)

考虑欧拉反演

原式等价于i=1nd|n,d|iφ(d)

前提d的枚举 d|ni=1,d|inφ(d)

发现第二轮枚举于d无关 直接化简为d|n(n/d)φ(d)

暴力求即可 时间复杂度O(因数个数×n)O(2n)

O(n).

4.P3327

d(x)x 的约数个数,给定 n,m,求

i=1nj=1md(ij)

考虑映射法

x=1apxk=iy=1bpyk=j

那么若 ipx jpyijpx+y

那么考虑这样选数:

  • i能选的质因数 一定在i选 则pz(zx)
  • 否则不够了 在j选 并且除以pxpz(z>x)
    因此 最终取的两个因数必须互质

所以答案转化为:

i=1nj=1mx|iy|j(x,y)=1

然后前提(x,y)的枚举

x=1ny=1mx|iny|jn(x,y)=1

发现后面两项与x,y无关 继续化简

x=1ny=1m(n/x)(m/y)(x,y)=1

(i,j)替换一下(x,y) 看到(i,j)=1 考虑莫比乌斯反演

i=1nj=1m(n/i)(m/j)d|i,d|jφ(d)

前提d的枚举

d=1min(n,m)i=1nj=1m[d|i,d|j](n/i)(m/j)φ(d)

这个式子能继续化简

d=1min(n,m)i=1ndj=1md(n/id)(m/jd)φ(d)

换一下顺序

d=1min(n,m)φ(d)i=1nd(n/id)(j=1mdm/jd)

定义f(x)表示 i=1xxi

原式等于

d=1min(n,m)φ(d)f(n/d)f(m/d)

可以通过整除分块预处理好 f 数组 然后上面的式子也是整除分块即可

时间复杂度O(nn+Tn)

5.P1829

题意:求

i=1nj=1mlcm(i,j)

思考:转换一下 得

i=1nj=1mi×j(i,j)

转化一下(i,j)

i=1nj=1md|i,d|j([id,jd)=1]i×jd

d的枚举提前 得

d=1ni=1nj=1m(d|i,d|j)([id,jd)=1]i×jd

化简一下原式 得

d=1min(n,m)i=1n/dj=1m/d[(i,j)=1](ijd)

换一下系数 并带入莫比乌斯反演 得

x=1min(n,m)i=1n/xj=1m/xd|i,d|jμ(d)ijx

d的枚举提前 得

d=1min(n,m)x=1min(n,m)i=1n/xj=1m/x[d|i,d|j]μ(d)ijx

继续化简 得

d=1min(n,m)x=1min(n,m)i=1n/xdj=1m/xdμ(d)ijxdd

容易发现 这已经是最简式子 将每个式子变换一下位置

d=1min(n,m)μ(d)ddx=1min(n,m)xi=1n/xdij=1m/xdj

定义f(x)表示i=1xi 化简原式

d=1min(n,m)μ(d)ddx=1min(n,m)xf(n/xd)f(m/xd)

此时 式子需要优化 定义T=xd 原式等于

d=1min(n,m)μ(T/x)T/xT/xx=1min(n,m)T/df(n/T)f(m/T)

化简成枚举T 原式等于

T=1min(n,m)f(n/T)f(m/T)d|Tμ(T/d)(T/d)2d

注意到n107 直接整除分块这个式子会TLE两个点 考虑优化

发现后面的式子d|Tμ(T/d)(T/d)2d完全可以优化 可以O(nloglogn)预处理 但还是会T 怎么办?

实际上 定义 g(x) 函数为 d|xμ(x/d)(x/d)2d

问题转化为线性求解 g 函数

容易发现 若定义 q(x) 函数为 μ(x)x2

其实g 就是q函数和id函数的卷积 即 g=qid

因为id函数是积性函数 q 函数也是积性函数 因此 g 也是积性函数 因此可以线性筛求解

怎么求呢?

考虑拆分原函数

g(x)=d|xμ(x/d)(x/d)x/dd

=d|xμ(x/d)(x/d)x

提一下 x

=xd|xμ(x/d)(x/d)

化简一下 得

=xd|xμ(d)d

现在考虑怎么筛 肯定先不考虑 x 最后再乘上去

  • 如果 g(x) 中,x为质数 容易得到为μ(1)x+1μ(x)=x1
  • 如果 g(xpj)x mod pj0 直接根据积性函数性质求导即可
  • 如果 g(xpj)x mod pj=0 因为有重复质因子时 mu(x)=0 所以只需计算所有单一质因子即可 乘上pj就出现了重复因子 所以x已经包含了所有质因子 因此g(xpj)=g(x)

然后筛完乘上 x 即可

回到式子

T=1min(n,m)f(n/T)f(m/T)g(T)

整除分块一下即可 时间复杂度O(n+Tn)

6.P1891

i=1nlcm(i,n)

T3105 , n106

大力拆式子 懒得写过程 最终结果为

nd|ni=1d[(i,d)=1]i

所以我们第二个式子要求与当前的数互质的数的和

这个就不能直接套反演了 它还有一个系数i

我们思考一下质因数的特点

我们知道一个定律:(a,n)=1(a,na)=1(n>a)

所以质因数是一对对的 且每一对的和为n

所以质因数的和就是φ(n)n/2

总时间复杂度O(n+Tn)

posted @   g1ove  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示