「学习笔记」min_25筛
前置姿势
其实不看也没关系
用途和限制
在\(\mathrm{O}(\frac{n^{0.75}}{\log n})\)的时间内求出一个积性函数的前缀和。
所求的函数\(\mathbf f(x)\)要满足以下条件:
- \(\mathbf f(p)\)是一个多项式,其中\(p\)是质数
- \(\mathbf f(p^c)\)要能够快速计算。
算法流程
首先我们需要求出对于每一个\(\left\lfloor \frac ni\right\rfloor\)求出\(\sum_{i=1}^x [i \in P] \mathbf f(i)\),其中\(P\)是质数集合。
首先筛出\(\sqrt n\)以内的质数,设\(P_j\)表示从小到大第\(j\)个质数。
设\(\mathbf g(n, j)\)表示所有最小质因子大于\(P_j\)的数加上质数的\(\mathbf f(i)\)的和。
那么\(\mathbf g(n, |P|)\)就是所求。
考虑\(\mathbf g(n, j)\)的转移,分两种情况。
\(P_j^2 > n\)
这个质数不会造成任何影响,于是\(\mathbf g(n, j) = \mathbf g(n, j - 1)\)。
\(P_J^2 \leq n\)
这里我们要考虑筛掉了多少个数字。
那么筛掉的数字中一定含有最小质因子\(P_j\),所以我们考虑减去\(\mathbf g(\frac n{P_j}, j - 1)\),但是这样我们多减了前\(j - 1\)个质数的\(\mathbf f\)之和,所以要加上\(\sum_{i=1}^{j - 1}\mathbf f(P_j) = \mathbf g(P_{j - 1}, j - 1)\)
总结一下就是:
\[
\mathbf g(n,j)=
\begin{cases}
\mathbf g(n,j-1)&P_j^2\gt n\\
\mathbf g(n,j-1)-\mathbf f(P_j)[\mathbf g(\frac{n}{P_j},j-1)-\mathbf g(P_{j - 1}, j - 1)]&P_j^2\leq n
\end{cases}
\]
这里可以滚动数组求一下。(感觉和魔力筛很像呢)
到这里我们发现我们已经对于\(x = \left\lfloor \frac ni\right\rfloor\)求出\(\sum_{i=1}^x [i \in P]\mathbf f(i)\)
设\(\mathbf S(n, j) = \sum_{i=1}^n [\mathrm{minp}(i) \geq P_j]\mathbf f(i)\)
那么最终的答案为\(\mathbf S(n, 1) + 1\)
然后我们将\(n\)以内的数字分为质数和合数
质数部分我们得出答案了,为\(\mathbf g(n, |P|) - \mathbf g(P_{j - 1}, j - 1)\)
考虑合数,其实很简单,考虑枚举最小质因子和其出现次数,然后爆算就可以了。
\[
\mathbf S(n,j)=\mathbf g(n, |P|) - \mathbf g(P_{j - 1}, j - 1)+\sum_{k=j}^{P_k^2\le n}\sum_{e=1}^{P_k^{e+1}\le n}\mathbf S(\frac{n}{P_k^e},k+1)\times \mathbf f(P_k^e)+\mathbf f(P_k^{e+1})
\]
然后就没啦。
最后讲一个东西,就是\(\mathbf S\)不用记忆化。
例题什么的以后再补吧。
「学习笔记」min_25筛的更多相关文章
- 「学习笔记」Min25筛
「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...
- 「算法笔记」Min_25 筛
戳 这里(加了密码).虽然写的可能还算清楚,但还是不公开了吧 QwQ. 真的想看的 私信可能会考虑给密码 qwq.就放个板子: //LOJ 6053 简单的函数 f(p^c)=p xor c #inc ...
- 「学习笔记」FFT 之优化——NTT
目录 「学习笔记」FFT 之优化--NTT 前言 引入 快速数论变换--NTT 一些引申问题及解决方法 三模数 NTT 拆系数 FFT (MTT) 「学习笔记」FFT 之优化--NTT 前言 \(NT ...
- 「学习笔记」FFT 快速傅里叶变换
目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...
- 「学习笔记」Treap
「学习笔记」Treap 前言 什么是 Treap ? 二叉搜索树 (Binary Search Tree/Binary Sort Tree/BST) 基础定义 查找元素 插入元素 删除元素 查找后继 ...
- 「学习笔记」字符串基础:Hash,KMP与Trie
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...
- 「学习笔记」wqs二分/dp凸优化
[学习笔记]wqs二分/DP凸优化 从一个经典问题谈起: 有一个长度为 \(n\) 的序列 \(a\),要求找出恰好 \(k\) 个不相交的连续子序列,使得这 \(k\) 个序列的和最大 \(1 \l ...
- 「学习笔记」ST表
问题引入 先让我们看一个简单的问题,有N个元素,Q次操作,每次操作需要求出一段区间内的最大/小值. 这就是著名的RMQ问题. RMQ问题的解法有很多,如线段树.单调队列(某些情况下).ST表等.这里主 ...
- 「学习笔记」递推 & 递归
引入 假设我们想计算 \(f(x) = x!\).除了简单的 for 循环,我们也可以使用递归. 递归是什么意思呢?我们可以把 \(f(x)\) 用 \(f(x - 1)\) 表示,即 \(f(x) ...
随机推荐
- Mysql语句中当前时间不能直接使用C#中的Date.Now传输
MySql中处理字符串时间,会默认把第一个数字当成年份处理. 在C#服务器中,使用Date.Now.ToString()生成的字符串时间,如果不指定字符串格式,C#会按照系统语言输出不同的字符串格式, ...
- ASP.net core 使用UEditor.Core 实现 ueditor 上传功能
ASP.net core 使用UEditor.Core 实现 ueditor 上传功能 首先通过nuget 引用UEditor.Core,作者github:https://github.com/bai ...
- GITHup的使用
一个源码管理工具,由于不擅长敲GIt命令,还不太喜欢用英文版本的软件,所以想办法用中文版的图形工具步骤如下: 下载了GIT64位,安装,下载了TortoiseGit和TortoiseGit中文语言包, ...
- css transition 实现滑入滑出
transition是css最简单的动画. 通常当一个div属性变化时,我们会立即看的变化,从旧样式到新样式是一瞬间的,嗖嗖嗖!!! 但是,如果我希望是慢慢的从一种状态,转变成另外一种状态,怎么办? ...
- vue.js引入
开始学习vue.js,引入vue.vue.js一定要在head里面引入,实际开发中我们可能在body中引入,但是可能存在抖屏现象. 为了避免出现抖屏现象,我们引入vue.js或者jquery.js 最 ...
- ASP.NET Core 一步步搭建个人网站(1)_环境搭建
ASP.NET Core2.0发布有一阵子了,这是.NET 开源跨平台的一个重大里程碑, 也意味着比1.0版本要更加成熟.目前.net core具有开源.跨平台.灵活部署.模块化架构等等特性,吸引着一 ...
- Python开发爬虫之理论篇
爬虫简介 爬虫:一段自动抓取互联网信息的程序. 什么意思呢? 互联网是由各种各样的网页组成.每一个网页对应一个URL,而URL的页面上又有很多指向其他页面的URL.这种URL之间相互的指向关系就形成了 ...
- axios中的this指向问题
最近在使用vue过程中,使用axios进行接口请求,确发现取不到值,返回为undefined. show (item) { let searchText = item.keyword console. ...
- Android Studio遇到Failed to sync Gradle project错误时的解决办法
一 报错显示 Gradle sync failed: Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust th ...
- 南京邮电大学java程序设计作业在线编程第八次作业
程序设计类课程作业平台 王利国 主页 教学资源 我的作业列表 程序设计课 账户 王利国的"Java语言程序设计第8次作业(2018)"详细 主页 我的作业列表 作业结果详细 总分: ...