定义

Powerful Number(以下简称 PN)筛类似于杜教筛,可以拿来求一些积性函数的前缀和。

要求

假设现在要求积性函数 \(f\) 的前缀和 \(F(n)=\sum_{i=1}^nf(i)\),需要存在一个函数 \(g\) 满足:

  • \(g\) 是积性函数。
  • \(g\) 易求前缀和。
  • 对于质数 \(p\),\(g(p)=f(p)\) 。

Powerful Number

定义:每个质因子次数都 \(≥2\) 的数。

性质

  • 所有的 PN 都可以表示成 \(a^2b^3\)。

  • \(n\) 以内的 PN 至多是 \(O(\sqrt n)\) 个,可以积分证明。

枚举:线性筛出 \(\sqrt n\) 以内的质数,dfs 搜索每个质数的指数,时间复杂度 \(O(\sqrt n)\)。

原理

首先,构造出合适的 \(g\),记 \(G(n)=\sum_{i=1}^ng(i)\)。

然后考虑另一个函数 \(h\),满足 \(f=g*h\),故 \(h\) 也为积性函数,且 \(h\) 仅在 PN 处不为 \(0\)。

首先考虑质数 \(p\),\(f(p)=g(1)h(p)+g(p)h(1)=h(p)+g(p)\),故 \(h(p)=0\).

又 \(h\) 是积性函数,故对于非 PN 的数 \(n\),都有 \(h(n)=0\)。

现在,根据 \(f=g*h\) 有:

\[\begin{aligned}
F(n)&=\sum_{i=1}^nf(i)\\
&=\sum_{i=1}^n\sum_{d\mid i}h(i)g(\frac{i}{d})\\
&=\sum_{d=1}^nh(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}g(i)\\
&=\sum_{d\text{ is PN}}h(d)G(\lfloor\frac{n}{d}\rfloor)
\end{aligned}
\]

那么现在要考虑的问题就只是 PN 处 \(h\) 的取值如何计算,也就是计算 \(h(p^c)\)。

根据 \(f=g*h\),可得 \(h(p^c)=f(p^c)-\sum_{i=1}^cg(p^i)h(p^{c-i})\)。

也可以考虑直接推 \(h\) 的式子。

复杂度分析

可以分为计算 \(h(p^c)\) 和搜索两部分进行分析。

  • 根据 \(O(\sqrt n)\) 内的素数个数为 \(O(\dfrac{\sqrt n}{\log n})\),因此时间复杂度为 \(O(\sqrt n\log n)\) 。

    此处计算的上界较为宽松,可以根据题目优化。

  • 对于搜索部分,由于 \(n\) 以内的 PN 至多有 \(O(\sqrt n)\) 个,所以至多搜索 \(O(\sqrt n)\) 次。对于每一个 PN,假设计算 \(G(\lfloor\frac{n}{d}\rfloor)\) 的时间复杂度为 \(O(1)\) ,则第二部分的复杂度为 \(O(\sqrt n)\)。

    特别地,若杜教筛计算 \(G(\lfloor\frac{n}{d}\rfloor)\),则时间复杂度为杜教筛的时间复杂度,即 \(O(n^{\frac{2}{3}})\)。

    对于空间复杂度,其瓶颈在于存储 \(h(p^c)\),若使用二维数组 \(a\) 记录,\(a_{i,j}\) 表示 \(h(p_{i}^j)\) 的值,则空间复杂度为 \(O(\sqrt n)\)。

void Enum(int x, LL d, int Hd){
if(x > pcnt || (__int128) d * pri[x] * pri[x] > K){
MOD(Ans += G(K / d) % mod * Hd % mod - mod);
return;
}
Enum(x + 1, d, Hd);
int cnt = 2; LL s = (LL) pri[x] * pri[x];
while((__int128) d * s <= K){
Enum(x + 1, d * s, (LL) Hd * H[x][cnt] % mod);
if((__int128) s * pri[x] > K) break;
s *= pri[x], ++cnt;
}
}

[笔记] Powerful Number 筛的更多相关文章

  1. Powerful Number 筛学习笔记

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

  2. powerful number筛

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

  3. Powerful Number 学习笔记

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

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

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

  5. Note - Powerful Number

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

  6. Powerful Number 筛法

    我也不想学筛法了,可你考试时候出一个新筛法就不厚道了吧,我还开始以为这是杜教筛... $tips:$学完杜教筛立马学$Powerful \ Number$筛法,此筛法强悍如斯 $Powerful \ ...

  7. 「学习笔记」Min25筛

    「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}​\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...

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

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

  9. Java笔记:Number

    序号 方法与描述 1 xxxValue()将number对象转换为xxx数据类型的值并返回. 2 compareTo()将number对象与参数比较. 3 equals()判断number对象是否与参 ...

随机推荐

  1. ruoyi首次使用常见问题的解决方案

    1.导入项目之后,下载依赖包之后,模块的依赖项飘红(我这里无法复现,当参考图吧) 解决方法: 2.ruoyi框架代码生成之后,需要自己进行替换到指定位置.相应的官方文档位置,否则,可能会出现404,访 ...

  2. uWSGI+django+nginx的工作原理流程与部署

    二.必要的前提 2.1 准备知识 django 一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. uWSGI 一个基于自有的uwsgi协议.wsgi协议和http服务协议的web ...

  3. Spring常用的注入方式有哪些?

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 参考链接:Spring常用的三种注入方式

  4. 如果我不输入<!DOCTYPE HTML>,HTML 5能工作吗?

    No,浏览器将无法识别HTML文件,并且HTML 5标签将无法正常工作.

  5. 学习GlusterFS(八)

    GlusterFS集群创建 一.简介 GlusterFS概述 Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够 ...

  6. Spring官宣网传大漏洞,并提供解决方案

    Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹.所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文.以及 ...

  7. Numpy实现多项式曲线拟合

    Numpy实现多项式曲线拟合 这里可以对比matlab中的拟合方式看看matlab拟合函数的三种方法,和第一种方式很像 问题定义:对于一堆数据点(x, y),能否只根据这些数据,找出一个函数,使得函数 ...

  8. 5_系统的可控性_Controllability

  9. 搞半天,全国34个省份包含湾湾\香港\澳门的高德poi兴趣点23类数据终于爬完事了

    1.技术架构: python+阿里云数据库mongodb5.0+高德地图rest api 2.成本: 阿里云数据库mongodb5.0一个月话费1k多 2.遇到的问题 1)两个阿里云账号下 mongo ...

  10. 用纯RUST手撸一个开源流媒体服务(RTMP/HTTPFLV/HLS)XIU

    作者工作目前在音视频流媒体行业,用了大概一年的业余时间学习Rust,并且实现了一个简单的音视频流媒体服务,虽然据说Rust已经连续多年被评为最受程序员喜欢的语言,但是在国内还是比较冷门,作者比较看好R ...