我也不想学筛法了,可你考试时候出一个新筛法就不厚道了吧,我还开始以为这是杜教筛。。。

$tips:$学完杜教筛立马学$Powerful \ Number$筛法,此筛法强悍如斯

$Powerful \ Number$筛法

算是杜教筛的究极版$?$

考虑筛积性函数$f$前缀和

求函数$F(n)$

$F(n)=\sum_{i=1}^{n}f(i)$

时间复杂度$O(\sqrt{n})$

主要是基于$PN$的筛法

定义$:$

$PN:n$质因数分解,$n=\prod_{i=1}^{m}p_i^{e_i}$

当满足前$m$个质数都在$n$里面出现多于一次

性质$1:$

所有的$PN$都能表示为$a^2\times b^3$

显然任意一个大于$2$的数字可以被分成$2\times k_1+3\times k_2$

性质$2:$

有关时间复杂度为$O(\sqrt{n})$的性质

$n$以内的$PN$至多有$\sqrt{n}$个

对于函数$\sqrt{n/x^2}^3$在$[1,\sqrt{n}]$积分

$ \displaystyle\int _{1}^{\sqrt{n}} \sqrt{n/x^2}^3=\sqrt{n}$

然后得证

筛法$:$

首先需要构造一个函数$g$

满足在数字为质数时$g(p)=f(p)$

并且$G(n)=\sum_{i=1}^{n}g(i)$易得

构造函数$h=f/g,$这里$/$表示狄利克雷卷积除法

$h(1)=1$

对于素数$p$

$f(p)=g(1)h(p)+g(p)h(1)$

$f(p)=h(p)+g(p)$

$g(p)=f(p)$

$h(p)=0$

由于$h$是积性函数,且所有素数位置的$h$等于$0$,那么除了$PN$的位置,其余的位置都是$0$

还记得杜教筛是$h=f*g$

$f=g*h$

$F(n)=\sum_{i=1}^{n} f(i)$

$F(n)=\sum_{i=1}^{n}(g*h)(i)$

$F(n)=\sum_{i=1}^{n}\sum_{d|i}h(d)g(i/d)$

$F(n)=\sum_{d=1}^{n}h(d)\sum_{i=1}^{n/d}g(i)$

$F(n)=\sum_{d=1}^{n}h(d)G(n/d)$

由于除了$PN$的其他所有位置全部为$0$

那么$:$

$F(n)=\sum_{d=1,d\ is \ PN}^{n}h(d)G(n/d)$

显然的那么,可以在$O(\sqrt{n})$的时间内得到$F(n)$

只需要得到需要的$h(d)\times G(n/d)$

考虑$h$是积性函数,那么我们又知道$h(p)=0$

$h=f/g$

今天考试这个题$h$可以打表发现$x>2,h(x)$不变

还有一般方法

$f=g * h$

$f(p^c)=\sum_{i=0}^{c}g(p^i)h(p^{c-i})$

枚举$p$和指数$c$然后计算

一般过程$:$

$1.$构造$g$

$2.$构造快速求$G$的方法

$3.$计算$h(p^c)$

$4.$搜索$PN$,过程中累加答案

$5.$得到结果

Powerful Number 筛法的更多相关文章

  1. Note - Powerful Number

    Powerful Number   对于 \(n\in\mathbb N_+\),若不存在素数 \(p\) 使得 \(p\mid n~\land~p^2\not\mid n\),则称 \(n\) 为 ...

  2. 利用powerful number求积性函数前缀和

    好久没更博客了,先水一篇再说.其实这个做法应该算是杜教筛的一个拓展. powerful number的定义是每个质因子次数都 $\geq 2$ 的数.首先,$\leq n$ 的powerful num ...

  3. powerful number求积性函数前缀和

    算法原理 本文参考了 zzq's blog . \(\text{powerful number}\) 的定义是每个质因子次数都 \(\ge 2\) 的数,有个结论是 \(\ge n\) 的 \(\te ...

  4. Powerful Number 筛学习笔记

    Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...

  5. Powerful Number 学习笔记

    定义 对于一个正整数 \(n\) ,若完全分解之后不存在指数 \(=1\) ,则称 \(n\) 为 \(\text{Powerful Number}\) . 可以发现的是,在 \([1,n]\) 中, ...

  6. [笔记] Powerful Number 筛

    定义 Powerful Number(以下简称 PN)筛类似于杜教筛,可以拿来求一些积性函数的前缀和. 要求: 假设现在要求积性函数 \(f\) 的前缀和 \(F(n)=\sum_{i=1}^nf(i ...

  7. 【HDOJ6623】Minimal Power of Prime(Powerful Number)

    题意:给定大整数n,求其质因数分解的最小质数幂 n<=1e18 思路:常规分解算法肯定不行 考虑答案大于1的情况只有3种:质数的完全平方,质数的完全立方,以及p^2*q^3,p,q>=1三 ...

  8. powerful number筛

    心血来潮跑来实现以下这个东西 我们应该知道杜教筛的理论是 \(f * g=h\),那么问题在于如何找 \(g\). 之前的blog应该提到过可以令 \(g(p)=-f(p)\),这样一来 \(h\) ...

  9. $dy$讲课总结

    字符串: 1.广义后缀自动机(大小为\(m\))上跑一个长度为\(n\)的串,所有匹配位置及在\(parent\)树上其祖先的数量的和为\(min(n^2,m)\),单次最劣是\(O(m)\). 但是 ...

随机推荐

  1. 如何让 Windows 把 TypeScript 文件当作文本文件

    TL;DR 修改注册表项 HKEY_CLASSES_ROOT\.ts 为 HKEY_CLASSES_ROOT\.txt 的值 起因 Windows10 总把 TypeScript 文件自动当成视频,放 ...

  2. [2018-03-04] 利用 Settings Sync 插件同步 VS Code 设置

    VS Code 已原生支持设置同步,本文仅备份记录 [2018-03-04] 早就听说这个插件了,今天用了一下,确实挺方便的.通过把配置文件创建为 Gist 上来实现了 VS Code 设置的同步,下 ...

  3. 使用docker创建和运行跨平台的容器化的mssql数据库

    我们一般启用sql server数据库要么选择安装SQL Server实例和管理工具(SSMS),要么用vs自带的数据库.如今net跨平台成为趋势,今天给大家介绍另一种我最近在玩的方式,即使用dock ...

  4. SQL Server之自动创建视图

    本方法只适合特定模式的视图创建. 比如,创建需要整张表列名的视图,或者当表和需要的列名统计在一张数据表当中,如图所示: 首先要先获取要创建视图所需要的表,这里我获取的是整个数据库中的表, IF OBJ ...

  5. vue根据后端菜单自动生成路由(动态路由)

    vue根据后端菜单自动生成路由(动态路由) router.js import Vue from 'vue' import Router from 'vue-router' import store f ...

  6. 微信access_token缓存与更新

    由于Access Token有效期只有7200秒,而每天调用获取的次数只有2000次,所以需要将Access Token进行缓存来保证不触发超过最大调用次数.另外在微信公众平台中,绝大多数高级接口都需 ...

  7. React技巧之字符串插值

    原文链接:https://bobbyhadz.com/blog/react-string-interpolation 作者:Borislav Hadzhiev 正文从这开始~ 总览 在React中,使 ...

  8. python——进行年龄和性别检测

    年龄和性别检测 使用Python编程语言带你完成使用机器学习进行年龄和性别检测的任务. 首先需要编写用于检测人脸的代码,因为如果没有人脸检测,我们将无法进一步完成年龄和性别预测的任务. 下一步是预测图 ...

  9. Python程序入口 __name__ == ‘__main__‘ 有重要功能(多线程)而非编程习惯

    文章来源于互联网(https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 在Python中,被称为「程序的入口」的 if name =='main': 总是出现在各种示 ...

  10. Consider defining a bean of type 'redis.clients.jedis.JedisPool' in your configuration.

    报错信息 原因是没有Jedispool没有注入 import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml ...