「关于一种处理关于$p$成多项式的数论函数筛法」
引入:
给一个完全积性函数$f$,求其前缀和
$$S(n)=\sum_{i=1}^nf(i)$$
初步思考:
考虑由于所求函数为完全积性函数,我们很容易用一个线性筛在$O(n)$的时间负责度内解决问题。
但是往往这类问题要求更加优秀的时间负责度,那么线筛便不能满足我们的需要,我们需要更加优秀的做法。
我们考虑一种最基础的筛法:埃拉托斯特尼筛法。
在这种筛法的思路中,我们只需要枚举$\sqrt n$以内的质数,那么我们是否可以引入这种想法呢?
进一步思考:
我们考虑将$S(n)=\sum_{i=1}^n f(i)$换成与质数有关的表达形式。
我们设$\tau(x) = x的最大质因子$。
那么
$$S(n) = \sum _{i=2}^n\sum_{\tau(i)<p,i*p<=n}f(ip) + \sum_{i=2}^nf(i)[\tau^2(i)|i] + f(1) + \sum_{p=2}^n f(p)$$
$$\because \forall a,b\; f(ab)=f(a)f(b)$$
$$\therefore S(n)=\sum_{i=2}^nf(i)\sum_{\tau(i)<p,ip<=n,p==\tau (p)}f(p)+\sum_{i=2}^nf(i)[\tau^2(i)|i]+f(1)+\sum_{p=2}^nf(p)$$
我们来看这个式子。
我们发现前两部分枚举的$i$所含质数$p$必然$p<=\sqrt n$。
那么我们使用DFS来枚举这些$i$会发现枚举量为:$$n-\sum_{i=\sqrt n+1,i=\tau(i)}^n \lfloor \frac{n}{i} \rfloor$$
这个式子我并不会算……
但是通过张博航的博客,这个式子的结果是约等为$\frac{n^{\frac{3}{4}}}{ln n}$存在一定的常数。
思考算法设计:
那么问题就变成了如果去求$\sum_{\tau(i)<p,ip<=n}f(p)$以及$\sum_{p=2,p=\tau(p)}f(p)$。
我们发现后者其实是可以看作于前者是一类的。
那么设$S'(n)=\sum_{p=2,p=\tau(p)}f(p)$,即上式为$S'(\frac{n}{i})-S'(\tau(i))$来表示的。
由于除法分块我们可以知道$\lfloor \frac{n}{i} \rfloor$取值仅有$\sqrt n$级别个,同时$\tau(i) <=\sqrt n$。
那么我们设$$a_i = S'(i),b_i=S'(\frac{n}{i}),i\leqslant \sqrt n$$
那么考虑如何求出$S'$。
我们先将所有数都看做质数,那么此后我们从小到大枚举一个每个小于$\sqrt n$的质数$p$,那么
$$S'(i)=S'(i)-f(p)(S'(\frac{i}{p})-S'(p-1))$$
考虑用数学归纳法证明:
首先当$p==2$时,此式显然得到的是去掉所有含“2”因子的合数。
那么设此式在之前质数中都是正确的,此时枚举到了$p$。同时设$\zeta i = i的最小质因数$
那么我们考虑此时
$S'(x)=\sum_{i=2,i=\tau(p),i<p}f(p) + \sum_{i=p}^x [\zeta(i)>=p]f(i)$
那么
$f(p)(S'(\frac{i}{p})-S'(p-1) )= \sum_{j=p}^{\frac{i}{p}} [\zeta(i)>=p] f(i*p)$
即此时我们给$S'(i)$删去了所含质因数均大于等于$p$的合数。故上式当处理到$\sqrt n$时是正确的。
我们再考虑如何求出$a,b$数组。
显然我们要从小到大枚举每个质数,再从大到小枚举每一个有用的$i$。然后考虑:
1) 若$i>\sqrt n$那么其对应位置一定在$b$数组出现过。
2) 若$\frac{i}{p}>sqrt n$那么其对应位置也必然在$b$中出现,这是由于$i$是由$\frac {n} {j}$得到的。
那么$\frac{i}{p}$就等价于$\lfloor \frac{ \frac{n}{j} }{p} \rfloor= \frac {n} {jp}$显然$jp<=\sqrt n$ 那么其此时$\frac{i}{p}$一定在b中出现过。
3) 若$i<=\sqrt n$ 那么其必然出现在$a$中,$\frac{i}{p}$同理。
也就是说对于用每个$p$来更新$a,b$需要且仅需要$a,b$数组。
考虑求$a,b$的时间复杂度约为:
$ \sum_{i=2,i=\tau i} (2\sqrt n - i^2) $。
这个东西,应该约为$\frac {2n^\frac{3}{4}} {3ln(\sqrt n)}$。考虑枚举第一部分$i$具有常数。这两部分应该是很接近的。
算法使用范围:
假设我们可以将一个函数写成关于$p$的$k$阶多项式形式的话,我们就可以利用上面描述的筛法,在$k\frac{n^\frac{3}{4}}{lnn}$时间内得到答案。
======update======
这个似乎就是min_25筛。
上了SPOJ以后才发现……min_25可能就是Hiroaki Yamanouchi……
「关于一种处理关于$p$成多项式的数论函数筛法」的更多相关文章
- 重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 实现不了是研发的借口? 实现不了,有时候是功能复杂度较高难以实 ...
- 一种根据value解释成枚举的有效方法
有时候需要根据实际情况将某个值解释成一个枚举,而不是根据枚举的名称.如有时0是枚举Gender.MALE的值,1是枚举Gender.FEMALE的值:有时0.1又可以是另一个枚举的值,比如0表示Cer ...
- Struts2框架的数据封装一之属性封装(属性封装的第二种方式:封装成javaBean)
Struts2中提供了两类数据封装的方式? 第一种方式:属性驱动(有两种方式:一个对属性,另外一个是将参数封装到javaBean中) B. 在页面上,使用OGNL表达式进行数据封装.(将参数封装到ja ...
- C#种将String类型转换成int型
API: 有一点是需要注意的,那就是必须保证该String类型内全为数字,能确保转换正确: 1.int.Parse(str); 2.TryParse(str, out intA); 3. Conver ...
- 如何评价苹果中国官网 iOS 8 介绍页面的文案「开发者的大事、大快所有人心的大好事」?[转自知乎]
在什么是「苹果式中文」答案中,小七得出了这个结论: 「苹果式中文」是指句子结构破碎,经常缺乏主语,滥用排比,顶真,偏正短语,和不恰当四字词的广告文体. (有关什么是苹果式中文,小七原来贴错地方了TAT ...
- 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 程序员的上下文是什么? 很多时候一大部分编程开发的人员都只是关注于功能的实现,只 ...
- 西安活动 | 4月20日「拥抱开源,又见.NET :云时代 • 新契机」
云计算日渐兴起,成为提升企业效率和生产力的最终解决方案,而云时代也为软件开发模式带来了翻天覆地的变化.可以说 .NET Core就是这个时代催生的产物.自2016年 .NET Core 1.0 发布以 ...
- 重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 文无第一,武无第二 不同方向但同样努力的人,都有自身的价值和亮 ...
- 为什么要用 C# 来作为您的首选编程语言
因为您可以用,并且也是您的最佳选择!之所以可用,是因为 C# 能够很好地在 Mac.Linux.Android 和 iOS 上运行(对了,还有 Windows):它可以在您最喜爱的编辑器上运行:它在一 ...
随机推荐
- IT轮子系列(一)——DropDownList 的绑定,你秒懂了吗
前言 最近猛然惊觉(说是猛然,是因为自己工作那么多年,居然不自知.不反省),在开发中,自己碰到一些常用的功能代码块,还是习惯性的baidu,然后copy....这样的操作,不知自己重复了多少遍.现在回 ...
- 我对面向对象设计的理解——Java接口和Java抽象类
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- win8 JDK环境变量不生效
执行where java 看一下路径对不对,如果对的话就把system32下面的3个java相关的exe删了即可,如果路径不对就修改环境变量.
- jquery中利用队列依次执行动画
如果有5个隐藏的div,要让它们依次显示,通常的做法是要一个一个嵌套在回调函数里面,这样导致代码看起来非常不直观. $("#div1").slideDown(1000,functi ...
- Ubuntu14.04部署pyspider的过程
1.安装,安装官方文档,应该先执行 sudo apt-get install python python-dev python-distribute python-pip libcurl4-opens ...
- andorid下从相册选取/拍照选取一张相片并剪切
http://www.2cto.com/kf/201401/270144.html 在Android编程中,从相册选取或是拍照选取一张照片然后对其进行剪切的需求非常的多 之前的一篇文章只说到如何从相册 ...
- linux下安装apc
wget htdtp://pecl.php.net/get/APC tar zxvf APC-3.1.3p.tgz cd APC-3.1.3p /usr/local/php/bin/phpize ./ ...
- L1正则化比L2正则化更易获得稀疏解的原因
我们知道L1正则化和L2正则化都可以用于降低过拟合的风险,但是L1正则化还会带来一个额外的好处:它比L2正则化更容易获得稀疏解,也就是说它求得的w权重向量具有更少的非零分量. 为了理解这一点我们看一个 ...
- asp.net core ABP模板本地化设置
ABP的语言本地化设置非常方便,甚至地区图标ABP框架都已经有了. 先看看结果吧. 英文的界面 中文的界面 配置流程如下: 首先在Localization目录下新建一个对应的json文件,里面存放对应 ...
- C#的一些小知识
一.Server.MapPath E:\MyProject\GisSystem\Json\jsonlist.aspx,GisSystem项目下有个Json文件夹,文件夹下有个jsonlist.aspx ...