Min-25 筛

参考 \(\text{OI-Wiki}\) 和 2018 集训队论文 朱震霆《一些特殊的数论函数求和问题》。

\(\text{Min-25}\) 的本质是埃式筛和数论分块,其实并没有什么高级的技巧。

记 \(x/y = \lfloor \frac{x}{y} \rfloor\),\(pr_k\) 表示第 \(k\) 小的质数,\(\text{lpf}(i)\) 表示 \(i\) 的最小质因数,\(\text{isprime(i)}\) 表示 \(i\) 是否是质数。如无特殊说明以下所有 \(p\) 表示质数。

假设我们要求一个积性函数 \(f\) 的前缀和 \(F(n) = \sum\limits_{i = 1}^{n} f(i)\)。要求 \(f(p)\) 能表示成较少个数的完全积性函数之和。\(f(p^k)\) 可以快速求值。

设 \(F_k(n) = \sum\limits_{i = 2}^{n} [\text{lpf}(i) \ge pr_k] f(i)\)。那么 \(F(n) = F_1(n) + f(1)\),因为 \(f\) 是积性函数,\(f(1) = 1\),即求 \(F_1(n) + 1\)。

考虑如何求一个 \(F_k(n)\),我们枚举最小质因子 \(pr_i\),次数为 \(c\),并特殊处理所有质数,可以得到

\[F_k(n) = \sum\limits_{i \ge k, {pr_i}^2 \le n} \sum\limits_{c \ge 1, {pr_i}^c \le n} f({pr_i}^c) \big{(} F_{i + 1}(n / {pr_i}^c, i + 1) + [c > 1] \big{)} + \sum\limits_{pr_k \le p \le n} f(p)
\]

设 \(F_{\text{prime}}(n) = \sum\limits_{p \le n} f(p)\),于是

\[F_k(n) = \sum\limits_{i \ge k, {pr_i}^c \le n} \sum\limits_{c \ge 1, {pr_i}^c \le n} f({pr_i}^c) \big{(} F_{i + 1}(n / {pr_i}^c, i + 1) + [c > 1] \big{)} + F_{\text{prime}}(n) - F_{\text{prime}}(pr_{k - 1})
\]

接下来我们需要求 \(F_\text{prime}(n)\)。对于 \(F_\text{prime}(pr_k)\) 的部分,由于 \(pr_k \le \sqrt n\),可以提前预处理。只需考虑 \(F_\text{prime}(n)\)。

在计算过程中我们只做了 \(n \gets n / x\) 的操作,由于 \(n / x_1 / x_2 / \ldots / x_m = n / (x_1 \times x_2 \times \ldots \times x_m)\)。于是只需对所有 \(m = n / i\),求 \(F_\text{prime}(m)\)。

做一遍整除分块,则 \(m\) 只有不超过 \(2\sqrt{n}\) 种取值,对这些 \(m\) 筛出 \(F_\text{prime}(m)\) 的点值即可。

一般情况下,\(f(p)\) 是一个关于 \(p\) 的低次多项式,可以表达为 \(f(p) = \sum\limits_{i} a_ix^i\)。

考虑分离每个 \(x^i\) 的贡献,设 \(g(p) = p^i\),类似的设一个 \(G_{\text{prime}}(n) = \sum\limits_{p = 2} g(p)\)。则最后可以用若干个 \(G_\text{prime}\) 合并出 \(F_{\text{prime}}\),此时再分别补上 \(a_i\) 的系数。

现在只需求 \(G_{\text{prime}}\)。注意到 \(g(p)\) 是完全积性函数。设 \(G_{k}(n) = \sum\limits_{i = 2}^{n} [\text{isprime}(i) \vee \text{lpf}(i) \ge pr_k] g(i)\),即埃式筛 \(k\) 轮后剩下的数 \(g(i)\) 之和。对于一个合数 \(x\),必有 \(\text{lpf}(x) \le \sqrt x\)。于是 \(G_\text{prime} = G_{\lfloor \sqrt{n} \rfloor}\)。

然后我们可以写出一个 \(G_k\) 的递推式:

\[\begin{align}

G_k(n) = \ & G_{k - 1}(n) - \sum\limits_{i = 2}^{n} [\lnot \text{isprime}(i) \wedge \text{lpf}(i) = pr_k] g(i) \\
& G_{k - 1}(n) - f(pr_k)\big{(}G_{k - 1}(n / pr_k) - G_\text{prime}(pr_{k - 1}) \big{)}

\end{align}
\]

其中由于 \(pr_k \le \sqrt n\),\(G_\text{prime}(pr_k)\) 同样可以预处理。最后从小到大枚举每个 \(k\) 做转移即可。

求出 \(F_\text{prime}\) 后可以直接递归算 \(F_k(n)\)。

时间复杂度分析我不会。参考论文的话,递推做 \(F_\text{prime}\) 部分时间复杂度 \(O(\frac{n^{\frac{3}{4}}}{\log n})\),递归算 \(F_k(n)\) 时间复杂度 \(O(n^{1 - \epsilon})\),总时间复杂度就是两者相加。

\(\text{Min-25}\) 的题目基本上都比较板,这里就不讲了。

Min-25 筛小记的更多相关文章

  1. $Min\_25$筛学习笔记

    \(Min\_25\)筛学习笔记 这种神仙东西不写点东西一下就忘了QAQ 资料和代码出处 资料2 资料3 打死我也不承认参考了yyb的 \(Min\_25\)筛可以干嘛?下文中未特殊说明\(P\)均指 ...

  2. 「笔记」$Min\_25$筛

    总之我也不知道这个奇怪的名字是怎么来的. \(Min\_25\)筛用来计算一类积性函数前缀和. 如果一个积性函数\(F(x)\)在质数单点是一个可以快速计算的关于此质数的多项式. 那么可以用\(Min ...

  3. Min_25筛学习笔记

    感觉好好用啊 Luogu上的杜教筛模版题一发 Min_25抢到了 rank1 $ Updated \ on 11.29 $被 STO txc ORZ踩爆啦 前言 $ Min$_$25$筛可以求积性函数 ...

  4. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  5. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  6. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  7. uoj#188. 【UR #13】Sanrd(Min_25筛)

    题面 传送门 题解 这是一道语文题 不难看出,题目所求即为\(l\)到\(r\)中每个数的次大质因子 我们考虑\(Min\_25\)筛的过程,设 \[S(n,j)=\sum_{i=1}^nsec_p( ...

  8. [学习笔记]min_25筛

    神佬yyb 神佬zsy 想不到花了两个小时的时间看 \(min\_25\) 筛就看懂了 实际去追了一下魔禁3 我们先举个例子.如求 \[\sum_{i=1}^{n}f(i)\] 其中 \(f(i)\) ...

  9. 【UOJ#188】Sanrd(min_25筛)

    [UOJ#188]Sanrd(min_25筛) 题面 UOJ 题解 今天菊开讲的题目.(千古神犇陈菊开,扑通扑通跪下来) 题目要求的就是所有数的次大质因子的和. 这个部分和\(min\_25\)筛中枚 ...

  10. uoj#448. 【集训队作业2018】人类的本质(Min_25筛+拉格朗日插值)

    题面 传送门 题解 肝了整整一天--膜拜yww和cx巨巨--(虽然它们的题解里我就没看懂几个字) 请备好草稿纸和笔,这种题目就是需要耐心推倒 题目所求是这么一个东西 \[ \begin{aligned ...

随机推荐

  1. Spring启动报8080端口被占用问题

    1.window下关闭8080端口 win+R:输入cmd,回车 在黑窗口中输入指令:netstat -ano | findstr 8080       指令的意思是找出占用8080端口的进程pid ...

  2. java中的几种锁

    一.公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁.有可能,会造成优先级反转或者饥饿 ...

  3. AtCoder Beginner Contest 315

    AtCoder Beginner Contest 315 A - tcdr (atcoder.jp) 一次遍历 #include<bits/stdc++.h> using i64 = lo ...

  4. 使用 preloadComponents 进行组件预加载

    title: 使用 preloadComponents 进行组件预加载 date: 2024/8/18 updated: 2024/8/18 author: cmdragon excerpt: 摘要: ...

  5. zabbix网络拓扑图介绍

    "zabbix network map"可以简单的理解为动态网络拓扑图,可以针对业务来配置zabbix map,通过map可以了解应用的整体状况:服务器是否异常.网络是否有故障.应 ...

  6. c# 复制文件夹内所有文件到另外一个文件夹

    /// <summary> /// 开始转移 /// </summary> /// <param name="sender"></para ...

  7. diff 输出解释

    diff 最原始的 diff 我们先编写两个文件: f1: 1 2 3 4 5 6 7 8 9 f2: 1 2 3 4 5 66 7 8 9 然后我们进行比较: diff f1 f2 6c6 < ...

  8. Java Web专题攻关

    servlet概念 servlet其实就是运行在服务器的一个小程序 如何去理解呢?我们访问服务器的资源包括静态资源和动态资源,其中静态资源是我们放置的模板,CSS.JS等文件,是不变的.而我们访问的动 ...

  9. Kubernetes-4:kubectl常用命令总结

    kubectl常用命令 1.kubectl get 显示资源 ## 查看pod列表,若pod后不指定名称空间(namespace),则默认为default名称空间 kubectl get pod ## ...

  10. 为什么在 C++ 中,类的静态成员变量需要在源文件中进行定义?

    为什么在 C++ 中,类的静态成员变量需要在源文件中进行定义? 类的静态成员变量需要在源文件中进行定义,以便在链接阶段能够正确地分配内存并为其分配地址. 当你在类的头文件中声明一个静态成员变量时,这只 ...