[学习笔记]Min-25筛
一、
基本操作:
筛1~N中的素数个数。n=1e9
设F(M,j)表示,2~M的所有数中,满足以下条件之一的数的个数:
①x是质数
②x最小质因子大于(注意是大于没有等号)$P_j$(第j个质数)
转移方程:
$F(M,j)=F(M,j-1)-(F([M/{P_j}],j-1)-(j-1))$
理解的话,考虑埃氏筛的做法(这里从${P_j}^2$开始筛)
统计这一次被删掉的数的个数也即形如:$x=P_j*some P_{j+x} (x>=0 \&\&some P_{j+x}<=[M/P_j])$
其实就是M以内,最小质因子为$P_j$的数的个数(除了$P_j$自己)
可以发现,每一个这样的$someP_{j+x}$都在后面枚举到并且减去了
由于是从$P_j^2$开始筛,所以类似$P_j*P_{j-1}$的之前已经被减掉了,不包含在$F(M,j-1)$里。
所以再加上$(j-1)$
具体方法的话:
其实最后一个j,满足$P_j^2<=N\&\&P_{j+1}^2>N$
先要找到这个j,也就是筛出来小于$[\sqrt N]$的所有质数
以大于根号n下取整的质数作为最小质因子的数,要不然本身就是质数,要不然一定就大于N了。
设这个j为cnt
由于最终的答案是:$F(N,cnt)$
所以涉及一切所谓$M/P_j$的,其实都是一些$N/x(2<=x<=N)$只有根号种
把所有这根号n个数都先找出来,放在第一维的位置,设上界为lim,val[lim]=N
cnt作为第二维j的上限
然后外层枚举j,内层枚举i
这样用数组$f[M]$一维直接代表$f[M][j]$(类似0/1背包那种)
大概代码长这样:
for(j=1->cnt)
for(i=lim->0){
f[i]=f[i]-(f[i/p[j]]-(j-1))
}
一个剪枝是,如果
存在$P_j^2>M$那么其实$F[M][j]=F[M][j-1]$(你用$P_j$不会多干掉任何一个数)
由于是一维数组,所以不用管相当于直接继承。
所以可以加这个剪枝:
for(j=1->cnt)
for(i=lim->0){
if(i/p[j]<p[j]) break; //后面i更小,一定都不行了
f[i]=f[i]-(f[i/p[j]]-(j-1));
}
传说复杂度$O(N^{\frac{3}{4}})$
二、
一个进阶的计算需求是:
求$\sum_{i=1}^n i^k*[i\space is\space prime]$
其实刚才求的是k=0的特殊情况
公式:$F(M,j)=F(M,j-1)-P_j^k(F([M/{P_j}],j-1)-\sum_{i=1}^{j-1}P_i^k)$
其实这里意义变了一下,对应:
$F(M,j)$表示,1到M中的满足以下条件的所有数的k次方和:
①x是质数
②x最小质因子大于(注意是大于没有等号)$P_j$(第j个质数)
就是多了一个权值
后面的$\sum_{i=1}^{j-1}P_i^k$可以预处理
三、
Min_25筛能干的是当然不止这个
实际上爆踩杜教筛,可以筛符合以下条件的一切积性函数:
①f(p)=关于p的低次多项式
②f(p^c)可以快速算出
例如:求:
$\sum_{i=1}^N \phi (i)$
类比,设:$G(M,j)$表示2~M满足x的最小质因子>=$P_j$的数的$phi(x)$的和。
考虑枚举最小质因子$P_t$以及它的次数e那么有:
$G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi(p_t^e)*G([M/(p_t^e)],t+1)+\phi(p_t^{(e+1)})]$
$+(F(M)-(F(p_{j-1})))$
第一部分枚举每个除了质数自己的最小质因子>=$P_j$的数。能乘G的原因是积性函数
第二部分枚举每个质数的$\phi$之和。
(这里F(M)表示,小于等于M的质数的phi之和。可以用$\sum_{i=1}^n i^1*[i\space is\space prime]-\sum_{i=1}^n i^0*[i\space is\space prime]$
也就是$\phi(p)=p-1$
答案是$G(N,1)+F(1)$
具体实现。。。。见下面例题
对于一般的函数,把所有的$\phi$换成$F$即可。当然F要满足开头的两个性质
然后大功告成!!!
DIVCNT2&&3 - Counting Divisors
对比杜教筛
优势:理论计算快,实际计算效果很好,n<=1e9时候优势很大
几乎适用各种积性函数。不需要构造卷积形式
空间优秀!O(n^0.5)
劣势:多组数据没有记忆化,就没什么优势了。必须是积性函数。(杜教筛如果能构造卷积,不是积性函数也可以的)
稍微难写一些。
[学习笔记]Min-25筛的更多相关文章
- 「学习笔记」Min25筛
「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...
- Flutter学习笔记(25)--ListView实现上拉刷新下拉加载
如需转载,请注明出处:Flutter学习笔记(25)--ListView实现上拉刷新下拉加载 前面我们有写过ListView的使用:Flutter学习笔记(12)--列表组件,当列表的数据非常多时,需 ...
- 学习笔记(25)- NLP的几个概念
NLP的几个概念 从技术研究的角度,简单介绍自然语言处理的几个概念 1. 对抗学习 主要指对抗生成网络. 2个主要构成:判别器.生成器 判别模型尽可能提取特征正确率增加的模型,生成模型尽可能" ...
- 「学习笔记」min_25筛
前置姿势 魔力筛 其实不看也没关系 用途和限制 在\(\mathrm{O}(\frac{n^{0.75}}{\log n})\)的时间内求出一个积性函数的前缀和. 所求的函数\(\mathbf f(x ...
- ReactiveX 学习笔记(25)使用 RxJS + Vue.js 调用 REST API
JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. ...
- Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用 ...
- C#学习笔记(25)——用刻盘器批量从U盘删除添加文件
说明(2017-11-17 14:46:05): 1. 因为经常要从U盘里面删除版本,然后添加版本,每次都要几个人手动复制粘贴,费时费力,就花了一下午时间写了个程序,自动删除和添加版本. 2. Dri ...
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
lienhua342014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...
- Haskell语言学习笔记(25)MonadState, State, StateT
MonadState 类型类 class Monad m => MonadState s m | m -> s where get :: m s get = state (\s -> ...
- 2015.03.12,外语,读书笔记-《Word Power Made Easy》 10 “如何讨论交谈习惯”学习笔记 SESSION 25
1.about keeping one's mouth shut taciturn,名词形式taciturnity,沉默寡言. 美国第30任总统库里奇,以沉默寡言著称.他来自新英格兰,那里视tacit ...
随机推荐
- Jmeter4.0安装
1.检查安装环境 1.1 JDK要求 JDK版本:1.8 1.2 检查是否安装JDK win + R 快捷键打开运行,输入 cmd 打开面板,在面板中输入 java -version,出现如下信息,即 ...
- PHP精确到毫秒秒杀倒计时实例
精确到毫秒秒杀倒计时PHP源码实例,前台js活动展示倒计时,后台计算倒计时时间.每0.1秒定时刷新活动倒计时时间. PHP: // 注意:php的时间是以秒算.js的时间以毫秒算 // 设置时区 da ...
- 如何使用Win+R快捷键打开自定义程序
鉴于大家对于提高效率这块有争议,更改了下标题. 大家平时一定都使用过Win+R运行快捷键, 在运行里可以快捷的打开一些系统软件,比如说输入mstsc是打开远程连接,输入explorer是打开文件管理器 ...
- mysql 无法启动,错误1067,进程意外终止
在做项目启动mysql数据库时,经常出现 这个错误,今天总结一下 //查看了网上很多的方法,都不适用,但或许对你适用.ps:网上只提供了怎么解决这个问题,但是没有将怎么去发现问题,对症下药才是王道.而 ...
- lxd&openstack-lxd源码剖析
lxd:https://linuxcontainers.org/lxd/,目标是融入到openstack体系被管理,像虚拟机一样被管理使用.从如下图可知,并非走的是libvirt-lxc路线,而是no ...
- 2017年4月8日Office 365 使用CSV文件导入邮件组
国内版 第一步: Import-Module msonline Connect-MsolService 输入用户名密码 第二步: Get-MsolUser" 第三步: Set-Executi ...
- 微软职位内部推荐-Principal Development Lead - SharePoint
微软近期Open的职位: SharePoint is a multi-billion dollar enterprise business that has grown from an on-prem ...
- 梯度下降算法以及其Python实现
一.梯度下降算法理论知识 我们给出一组房子面积,卧室数目以及对应房价数据,如何从数据中找到房价y与面积x1和卧室数目x2的关系? 为了实现监督学习,我们选择采用自变量x1.x2的线性函数来评估因变 ...
- multipart/form-data post 方法提交表单,后台获取不到数据
这个和servlet容器有关系,比如tomcat等. 1.get方式 get方式提交的话,表单项都保存在http header中,格式是 http://localhost:8080/hello.do? ...
- 软工1816 · Alpha冲刺(5/10)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 后端代码复审 福大各个食堂的菜品口味量化.属性标记 组织前后端线下协作 接下来 ...