颓式子小练习

以下全是口胡,不排除推错的可能性。

记号

  • \(\mathbb P\):质数集合
  • \(\text{minp}(i)\)\(i\)​ 的最小质因子
  • \(p_j\):第 \(j\)​ 个质数
  • \(x\bot y\)\(x,y\) 互质

UOJ-188 Sanrd

\(f(x)\) 即为 \(x\) 质因子分解后的次大因子(可重)。虽然不是积性函数但是和质因子密切相关,考虑魔改 min-25 筛。

显然对于 \(G(n)=\sum^n_{i\in \mathbb P} f(i)\),有 \(G(n)=0\)​​。

\(G_j(n)=\sum_{i=2}^n [\text{minp}(i)\le p_j\lor i\in \mathbb P] f(i)\)。那么考虑从 \(G_{j+1}\to G_j\)。枚举 \(p_j\) 的次数 \(k\),对新加入的数 \(p_j^kx\) 分类:\(>p_j\) 的质数,\(\text{minp}>p_j\) 的合数,以及 \(1\)

按照套路,\(G_{j+1}(\lfloor n/p_j^k \rfloor)\) 中包含了所有范围内的质数以及范围内 \(\text{minp}>p_j\)​​​ 的合数。合数可以精确统计,但是质数统计不到。易知这部分贡献就是质数个数。加上\(1\),可得:

\[G_j(n)=G_{j+1}(n)+\sum_{k\ge 1, p_j^{k+1}\le n} \left( G_{j+1}\left\lfloor \frac{n}{p_j^k} \right\rfloor\right) +p_j\left(S\left(\left\lfloor \frac{n}{p_j^k} \right\rfloor\right)-S(p_j)+1\right) \]

\(S\) 为质数个数,min-25 中顺带完成即可。复杂度 \(O\left(\frac{n^{3/4}}{\log n}\right)\)

LOJ-572 「LibreOJ Round #11」Misaka Network 与求和

https://www.cnblogs.com/-Wallace-/p/loj572.html

SPOJ-DIVCNT2 Counting Divisors (square)

首先有一个结论作为起步:

\[\sigma_0(ij) = \sum_{a|i}\sum_{b|j} [i\bot j] \]

略证:考虑唯一分解:\(i=\prod_x p_x^{c_x},j=\prod_x q_x^{d_x}\),那么取 \(p_x=q_y\)\(ij\) 的分解中必有 \(p_x^{c_x+d_y}\)。考虑 \(p_x\)\(\sigma_0(ij)\) 的贡献为 \(c_x+d_y+1\),而由于互质的限制,\(p_x\) 的次数取法只有 \(a\) 中的 \(c_x\) 个,\(b\) 中的 \(d_y\) 个,以及 \(0\)。总贡献为 \(c_x+d_y+1\)

那么有:

\[\begin{aligned} S_2(n) &= \sum_{i=1}^n \sum_{a|i}\sum_{b|i}[i\bot j] \\ &= \sum_{a=1}^n\sum_{b=1}^n[i\bot j] \left\lfloor\frac{n}{ab}\right\rfloor \\ &= \sum_{d=1}^n\mu(d) \sum_{a=1}^{n/d}\sum_{b=1}^{n/d} \left\lfloor\frac{n}{abd^2}\right\rfloor \end{aligned} \]

直接枚举 \(ab\) 的值,记为 \(T\)。但是 \(a,b\le n/d\),所以 \(T\le (n/d)^2\)?注意到右边那个整除式子使得 \(>n/d^2\)\(T\) 贡献都为 \(0\)。于是:

\[\begin{aligned} S_2(n) &= \sum_{d=1}^n\mu(d) \sum_{T=1}^{n/d^2} \left\lfloor\frac{n}{Td^2}\right\rfloor\sigma_0(T)\\ &= \sum_{d=1}^n\mu(d)G\left(\left\lfloor\frac{n}{d^2}\right\rfloor\right)\\ G(n) &= \sum_{T=1}^n \left\lfloor\frac{n}{T}\right\rfloor \sigma_0(T) \end{aligned} \]

预处理 \(\sigma_0\)​​ 的所有整出点的前缀和,杜教筛 \(O(n^{2/3})\)​​ 完成。这样 \(G(n)\)​​ 求解一次的复杂度为 \(O(\sqrt n)\)​。我们可以对 \(n/d^2\)​ 像整除分块一样操作,然而 \(d\le \sqrt n\)​,如果直接暴力枚举 \(d\)​,复杂度则是 \(O\left(\int_1^\sqrt n \sqrt{\frac{n}{i^2}}\right)=O(\sqrt n\log n)\)​。已经可以通过了。​

SPOJ-DIVCNTK Counting Divisors (general)

发现 \(n\le 10^{10}\)​​,​数据范围较之前不大。

显然 \(f(i)=\sigma_0(i^k)\) 是积性函数,而 \(\forall p\in \mathbb P\),我们有 \(f(p^c) = ck+1\)​,为 min-25 筛量身定制。\(O\left(\frac{n^{3/4}}{\log n}\right)\)​轻松通过。

事实上这个复杂度看着比较高,但却可以通过 DIVCNT2/3,说明 min-25 筛的效率是值得被信任的。

LOJ-6229 这是一道简单的数学题

\[\begin{aligned} F(n) &= \sum_i^n\sum_j^i \frac{\operatorname{lcm}(i,j)}{\gcd(i,j)} \\ &= \sum_i^n\sum_j^i \frac{ij}{(\gcd(i,j))^2} \\ &= \sum_g^n \frac{1}{g^2} \sum_i^n\sum_j^i [\gcd(i,j)=g]ij\\ &= \sum_g^n \sum_i^{n/g}\sum_j^i [i\bot j]ij\\ &= \sum_g^n \sum_d^{n/g} \mu(d) d^2 \sum_{i}^{n/dg}\sum_{j}^i 1\\ &= \sum_g^n \sum_d^{n/g} \mu(d) d^2 s_2\left(\left\lfloor\frac{n}{dg}\right\rfloor\right) & s_2(n) = \sum_{i}^n i^2 \\ \end{aligned} \]

这个方法可以用嵌套整除分块实现,复杂度 \(O(n^{3/4})\),对于 \(10^9\) 的数据已可以通过。不过我们观察到 \(\sum_g^n\sum_d^{n/g} \mu(d)d^2\)​​ 和狄利克雷卷积很有关系。根据 LOJ-572 的经验,不妨尝试在这里入手以寻求更优秀的方法。

\(h=1*(\mu \cdot \text{id} \cdot \text{id})\)​,直接枚举 \(D=dg\),那么进一步化简:

\[F(n) = \sum_{D}^n h(D) s_2(\lfloor n/D\rfloor) \]

也就是说只要实现了 \(h\) 前缀和 \(H\) 的计算就能实现优化。

接下来有两种方法:

  • 使用杜教筛:好题好题妙啊妙啊不wei做
  • \(n^{2/3}\) 分治:小的直接线性筛,大的暴力整除分块。可以得到这样复杂度是 \(O(n^{2/3}\log n)\) 的。还是需要筛出较大的 \(\mu\cdot \text{id} \cdot \text{id}\) 的前缀和,一般 min-25 筛会快一些(指 10 倍)。
posted @ 2021-10-09 16:36  -Wallace-  阅读(188)  评论(0编辑  收藏  举报