数论

数论

莫反,欧拉反演

常用结论:

  • μ1=ϵ,φ1=id
  • μ2(n)=d2|nμ(d)
  • d(ij)=x|iy|j[gcd(x,y)=1]
  • φ(xy)=φ(x)φ(y)gcd(x,y)φ(gcd(x,y))

杜教筛

积性函数 f=gh,它们的前缀和分别是 F,G,H,思路是将 F(n) 写出然后交换求和号枚举 h

F(n)=i=1nd|ih(d)g(id)=d=1nh(d)i=1ndg(i)=d=1nh(d)G(nd)

杜教筛说的是,欲求 G(n),将 d=1 这一项单独拎出来移项,这样就有 h(1)G(n)=F(n)d>1nh(d)G(nd),对右边整除分块,这要求 FH 都能快速算出。

这相当于求出 g 的所有基本和组处的取值,然后对于这些位置继续往下递归它们的基本和组。需要记忆化搜索剪枝。

现在来算复杂度,注意到基本和组的基本和组依然属于原先的基本和组,也就是 nab=nab,依据整除分块,复杂度实际上是 i=1n(i+ni),不难积分出复杂度为 O(n3/4)

如果能线性筛预处理出 Gn 比较小的时候的前缀和,取 B=O(n2/3),这样复杂度中 i 直接查表就能直接去掉,而要保证 nin2/3 那么 in1/3,这样复杂度就是 i=1n1/3ni=O(n2/3)

  1. f=gh,F(n)=d=1nh(d)G(nd)
  2. G(n),移项,基本和组往下递归。
  3. 直接递归需要记忆化复杂度 O(n3/4),小的部分线性筛预处理,复杂度是 O(n2/3)

Powerful number 筛

Powerful number 是指标准分解中质因数的指数均 >1 的数,其一定能表示成 a2b3 的形式,如果让 b 中无平凡因子那么这个表示就是唯一的。那么现在就可以来估计一下 n 以内 pn 的个数:b=1n3nb2,积分一下就得到 O(n1/2)

Powerful number 筛的核心式子与杜教筛完全一致 F(n)=d=1nh(d)G(nd).现在想求 F(n),构造 g 使得 gf 在素数处的取值完全相同,由于 f=gh 可看出 h 仅在 powerful number 处有值。如果 G 能快速算出,h(d) 根据 f=gh 也能快速算出,这样只需要暴力 dfs 枚举所有 powerful number 作为 d,然后计算 f,这样复杂度就是 O(n1/2) 的了。

  1. f=gh,F(n)=d=1nh(d)G(nd)
  2. F(n),构造 g 使得 f,gpk 处取值相同,这样 h 仅在 pn 处有取值。
  3. 直接 dfs 枚举所有 d 计算 F(n) 即可。复杂度是 pn 个数 O(n)

贝尔级数

对于积性函数 f 其质数 p 对应的贝尔级数 if(pi)xi,积性函数的狄利克雷卷积就对应贝尔级数的普通卷积,可以用来构造杜教筛需要的函数。

  • ϵp(x)=1
  • Ip(x)=11x
  • (idk)p(x)=i0pikxi=11pkx
  • μ=I1μp(x)=1x,前面是狄利克雷乘法逆,这也说明为什么 μ 本质上是在质因子维度上作高维差分(类比 ogf 1x 是在作差分)。
  • (μ2)p(x)=1+x,这里 μ2 是点乘。
  • φ=idμφp(x)=1x1px
  • d=σ0=IIdp(x)=1(1x)2
  • σk=Iidk(σk)p(x)=1(1x)(1pkx)

例题

DIVCNT2

i=1nd(i2)

f(i)=d(i2) 的贝尔级数是 <1,3,5,....>=1+x(1x)2,于是 f=μ2d

μ2(n) 前缀和是 i=1nμ(i)ni2 可以整除分块算。

d=11 的前缀和可以化成 d=1nnd 然后整除分块算。

我们知道基本和组的基本和组依然是基本和组,所以记忆化搜索,小的线性筛出来,复杂度就是 O(n2/3) 的了。

posted @   do_while_true  阅读(69)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1845 days 1 hours 33 minutes 24 seconds

点击右上角即可分享
微信分享提示