Min_25筛 学习笔记
这儿只是一个简单说明/概括/总结。
原理见这:
https://www.cnblogs.com/cjyyb/p/9185093.html
https://www.cnblogs.com/zhoushuyu/p/9187319.html
首先计算\[g(n,j)=\sum_if(i),\quad i是质数\ 或\ i的最小质因子严格大于P_j\\g(n,j)=\begin{cases}g(n,j-1)&P_j^2\gt n\\ g(n,j-1)-f(P_j)\left[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)\right]&P_j^2\le n\end{cases}\]
类似埃氏筛法,\(P(n,j)\)就是筛\(j\)次后剩下的数的\(f\)和,再加上所有质数\(p\)的\(f(p)\)之和。
\(P_j^2>n\)时,这一次筛不会筛掉任何数,所以就是\(g(n,j-1)\)。
\(P_j^2\leq n\)时,考虑第\(j\)次筛掉了哪些数,也就是最小质因子是\(P_j\)的那些数。因为是积性函数,所以我们直接提出一个\(P_j\)(来保证它含\(P_j\))。
要被筛掉的数在除掉一个\(P_j\)后的最小质因子一定仍大于等于\(P_j\)(否则在之前就被筛掉了),这符合\(g(\frac{n}{P_j},j-1)\)的定义。所以减掉一个\(f(P_j)g(\frac{n}{P_j},j-1)\)。但是\(g(\frac{n}{P_j},j-1)\)还包含所有质数的\(f(p)\)之和,所以再加上\(\sum_{i=1}^{j-1}f(P_i)\)。
那初值呢?先把所有合数的\(f\)的计算方式看做和质数一样,以便对所有数的\(f\)值快速求个和,用它作为\(g(n,0)\)(注意这里不考虑\(1\))。这样虽然合数的\(f\)值是假的,但是\(g(n,|P|)\)还是能正确的表示所有质数\(p\)的\(f(p)\)之和。
现在考虑算上合数的\(f\)值求和。令\[S(n,j)=\sum_if(i),\quad i是质数\ 或\ i的最小质因子大于等于P_j\]
我们把\(S(n,j)\)分两部分计算,一是所有质数的贡献,二是所有合数的贡献。对于\(f(1)\)最后单独算下。
那么所有质数的贡献可以用\(g\)表示,也就是\(g(n,j)-\sum_{i=1}^{j-1}f(P_i)\)(因为最小质因子要大于等于\(P_j\),所以把那些减掉)。
对于合数,枚举这个合数的最小质因子及其次数,用\(f\)是积性函数的性质直接算:\[S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}\left[f(P_k^e)\times S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})\right]\]
\(f(P_k^{e+1})\)是\(S\)没有考虑的那部分(就是\(P_k^{e+1}\),质数的若干次幂这样的合数,而\(S(..,k+1)\)就把这些数忽略掉了)。
答案就是\(S(n,1)+f(1)\)。
流程:
把所有合数看做质数,求一遍和,得到初值\(g(n,0)\)。同时预处理一个\(f(P_i)\)的前缀和。
用\[g(n,j)=\begin{cases}g(n,j-1)&P_j^2\gt n\\ g(n,j-1)-f(P_j)\left[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)\right]&P_j^2\le n\end{cases}\]
计算\(g(x,|P|)\)(把第二维滚动掉)。用\[S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}\left[f(P_k^e)\times S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})\right]\]
计算\(S(n,1)+f(1)\)。
计算\(S,g\)的复杂度都是\(O(\frac{n^{\frac34}}{\log n})\)。
对于其它积性函数,同\(g\)一样计算。
实现上,筛\(sqrt(n)\)内的质数这一步往往可以省略,见这里。
例题:
LOJ6235 区间素数个数
BZOJ3944 Sum
LOJ6053 简单的函数
以后要做的题:
https://cmxrynp.github.io/2018/12/03/Min-25筛学习笔记/
https://blog.csdn.net/koishi_514/article/details/79485534
https://blog.csdn.net/HOWARLI/article/details/80339931
Min_25筛 学习笔记的更多相关文章
- Min_25 筛 学习笔记
原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html 前置技能 埃氏筛法 整除分块(这里有提到) 本文概要 1. 问题模型 2. Min_25 ...
- min_25筛学习笔记【待填坑】
看见ntf和pb两位大佬都来学了,然后就不自觉的来学了. 我们考虑这样一个问题. $$ans=\sum_{i=1}^nf(i)$$其中$1\leq n\leq 10^{10}$ 其中$f(i)$是一个 ...
- 洲阁筛 & min_25筛学习笔记
洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...
- Min_25筛学习笔记
感觉好好用啊 Luogu上的杜教筛模版题一发 Min_25抢到了 rank1 $ Updated \ on 11.29 $被 STO txc ORZ踩爆啦 前言 $ Min$_$25$筛可以求积性函数 ...
- $Min\_25$筛学习笔记
\(Min\_25\)筛学习笔记 这种神仙东西不写点东西一下就忘了QAQ 资料和代码出处 资料2 资料3 打死我也不承认参考了yyb的 \(Min\_25\)筛可以干嘛?下文中未特殊说明\(P\)均指 ...
- Powerful Number 筛学习笔记
Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...
- Min_25筛 学习小记
前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...
- min-25筛学习笔记
Min_25筛简介 \(\text{min_25}\)筛是一种处理一类积性函数前缀和的算法. 其中这类函数\(f(x)\)要满足\(\sum_{i=1}^{n}[i\in prime]\cdot f( ...
- min_25 筛学习小记
min_25筛 由 dalao min_25 发明的筛子,据说时间复杂度是极其优秀的 \(O(\frac {n^{\frac 3 4}} {\log n})\),常数还小. 1. 质数 \(k\) 次 ...
随机推荐
- 原码、补码、反码的概念和java数的存储方式
原码:用符号位和数值位表示一个带符号数,整数符号->0,负数符号->1,数值一般用二进制形式表示 [+10011]原=00010011 [-10011]原=10010011 反码:正 ...
- 使用Ultra Librarian将bxl文件转为OrCAD Capture CIS可识别的库文件(OLB)
操作系统:Windows 10 x64 工具1:Ultra Librarian 8.3.89 工具2:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 关于Ultra ...
- Java 获取当前系统的时间
获取当前系统的时间,每隔一秒,打印一次. import java.util.Date; public class TestDate { public static void main(String[] ...
- spring cloud 使用spring cloud bus自动刷新配置
Spring Cloud Bus提供了批量刷新配置的机制,它使用轻量级的消息代理(例如RabbitMQ.Kafka等)连接分布式系统的节点,这样就可以通过Spring Cloud Bus广播配置的变化 ...
- Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)
router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...
- Python模块之sys模块
sys模块是与Python解释器交互的一个接口 有如下方法 sys.argv 命令行参数的一个列表,第一个参数为程序本身的路径 sys.exit(n) 退出程序,正常退出exit(0) ,异常退 ...
- 爬虫基础以及 re,BeatifulSoup,requests模块使用
爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...
- GreenDao3.2的简单使用
Android -- GreenDao3.2的简单使用http://www.cnblogs.com/wjtaigwh/p/6394288.html https://github.com/greenro ...
- python--使用队列结构来模拟烫手山芋的游戏
基本功,磨起来. # coding = utf-8 class Queue: def __init__(self): self.items = [] def is_empty(self): retur ...
- 一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
Hive官网(HQL)语法手册(英文版):https://cwiki.apache.org/confluence/display/Hive/LanguageManual Hive的数据存储 1.Hiv ...