「关于一种处理关于$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):它可以在您最喜爱的编辑器上运行:它在一 ...
随机推荐
- JS(面试中的变量类型和计算问题)
JS(变量类型和计算) 题目1.JS 中使用 typeof 能得到那些类型? 题目2.何时使用 === 何时使用==? 题目3.JS 中有哪些内置函数? 题目4.JS 变量按照存储方式区分为那些类型, ...
- jQuery插件学习基础
1.给jQuery添加全局的函数: $.zgz={ fn1:function(){ alert('我是刚设置的第一个全局函数') },fn2:function(){ alert('我是刚设置的第二个 ...
- IT轮子系列(七)——winform 版本更新组件
前言 最近做了一个winform客户端的项目,里面有一个功能是版本更新.以前也有写过,可忘了具体的逻辑.网上也有介绍用发布模式进行更新的,自己尝试后没有成功,提示“vba证书无效”.于是,费了些时间搜 ...
- JS核心笔记
一.说明 JS权威指南文字用红色标出: JS高级程序设计用橙色标出; 自己加上的文字用粉红色标出: 其(一)-(九)为JS权指南,(十)为JS高级程序设计 二.记法结构 2.1字符集 Javascri ...
- Linux的chkconfig命令详解
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法: chkconfig [--a ...
- how to select checkbox on cli environment?
generally , u can focus on this checkbox and press blank key Ok,that's shit.
- Ubuntu14.04 安装配置Opencv3.0和Python2.7
http://blog.csdn.NET/u010381648/article/details/49452023 Install OpenCV 3.0 and Python 2.7+ on Ubunt ...
- 分布式爬虫框架XXL-CRAWLER
<分布式爬虫框架XXL-CRAWLER> 一.简介 1.1 概述 XXL-CRAWLER 是一个分布式爬虫框架.一行代码开发一个分布式爬虫,拥有"多线程.异步.IP动态代理.分布 ...
- springboot~为Money类型添加最大值和最小值的注解校验
在spring框架里,为我们集成了很多校验注解,直接在字段上添加对应的注解即可,这些注解基本都是简单保留类型的,即int,long,float,double,String等,而如果你自己封装了新的类, ...
- mysql 基本命令操作
1. 查看存储引擎 show engines; 2. 查看数据存储位置 show variables like 'datadir': 3. 存储引擎 create table mytest engin ...