首页 > 其他分享 >Powerful Number 筛

Powerful Number 筛

时间:2023-10-06 20:23:22浏览次数:28  
标签:le limits sum Powerful Number sqrt PN 复杂度

Powerful Number 筛(PN 筛)可以解决一些求积性函数前缀和的问题。要求能构造出一个积性函数 \(g\),满足:

  • \(g\) 容易求前缀和;
  • 对于质数 \(p\),\(f(p) = g(p)\)。

称一个数 \(x\) 是 Powerful Number(PN)当且仅当 \(x\) 的质因数分解中,所有质因数的指数都 \(\ge 2\)。\(1\) 是 PN。

有结论 \(\le n\) 的 PN 有 \(O(\sqrt{n})\) 个。并且若线性筛出 \(\le \sqrt{n}\) 的所有质数,枚举每个质数的指数,就可以在 \(O(\sqrt{n})\) 的时间复杂度内搜索出所有 PN。

假设我们已经构造出一个满足条件的 \(g\)。假设有一个积性函数 \(h\),满足 \(f = g * h\)。那么有 \(f(p) = g(1) h(p) + g(p) h(1) = g(p) + h(p)\),又因为 \(f(p) = g(p)\),所以 \(h(p) = 0\)。所以 \(h(x)\) 有值当且仅当 \(x\) 是 PN

推一下式子:

\[\begin{aligned} \sum\limits_{i = 1}^n f(i) & = \sum\limits_{ij \le n} g(i) h(j) \\ & = \sum\limits_{i = 1}^n h(i) \sum\limits_{j = 1}^{\left\lfloor\frac{n}{i}\right\rfloor} g(j) \end{aligned} \]

因此我们只用枚举所有 \(\le n\) 的 PN,然后快速计算 \(\sum\limits_{j = 1}^{\left\lfloor\frac{n}{i}\right\rfloor} g(j)\) 即可。

问题来到如何计算 \(h(i)\)。因为 \(h\) 是积性函数,所以只用考虑如何计算 \(h(p^k)\)。根据 \(f = g * h\) 有:

\[f(p^k) = \sum\limits_{i = 0}^k g(p^i) h(p^{k - i}) \]

因此:

\[h(p^k) = f(p^k) - \sum\limits_{i = 0}^{k - 1} g(p^{k - i}) h(p^i) \]

进而可以暴力在 \(O(\sqrt{n})\) 的时间复杂度内计算。

若 \(g\) 的前缀和能快速计算,那么 PN 筛的时间复杂度为 \(O(\sqrt{n})\)。

例题

1. P5325 【模板】Min_25 筛

考虑构造 \(g = (id \cdot \varphi)\),那么 \(g\) 的前缀和可以使用杜教筛计算(\(id^2 = (id \cdot \varphi) * id\))。

时间复杂度 \(O(n^{\frac{2}{3}})\),瓶颈在杜教筛。

标签:le,limits,sum,Powerful,Number,sqrt,PN,复杂度
From: https://www.cnblogs.com/zltzlt-blog/p/17744949.html

相关文章

  • 【图论】【寻找性质】CF1151E Number of Components 题解
    CF1151E发现每一个\(f(l,r)\)中的连通块总是一条链(一棵树)。那么此时连通块的数量就等于点的数量减去边的数量。先考虑点的总数,一个价值为\(a_i\)的点一定是在\(l\leqslanta_i\)且\(r\geqslanta_i\)的\(f(l,r)\)中才会有一个贡献,根据乘法原理,它会产生\(a_i\time......
  • mybatis出现错误 java lang NumberFormatException:For input string:A1
    使用mybatis,当使用map传参并且在iftest判断时使用map中所传的参数时,可能会产生如题的报错,具体报错信息见下图:分析这个错误,自己调试也找过度娘,“坚信”自己代码并没问题,但是问题始终无法解决。最后在一个帖子看到说iftest判断时,传入的参数跟匹配的值类型必须一致,于是调整了自己代......
  • 理论的动态发展完完备与进化:数论Number Theory数域的进化史 与 Infinite Precision无
    InfinitePrecision:(0)数是什么?以有限的数元,度量与表示无限的现象、事物与状态,作为整个数学科学理论的根基。以Binary二进制为例,有{0,1},Constant/Dynamic系统建模上,两种state(状态)?0->1与1->0代表“change变化”?而Decimal十进制,有{0,1,2,3,4,5,6,7,8,9}十种数元,运算符号......
  • QOJ # 2835. Number Theory
    题面传送门貌似是一个点名被卡的做法,怎么回事呢/cy首先我看到这个东西感觉一脸进制转换,但是这玩意不是非常严格的进制转换,他的某一位的基数是上一位基数乘\(10\)还要\(+1\),没关系,对于每个数从高到低转化,总能转化出一个合法的进制数。然后考虑调整这个类似进制的数,首先一个比......
  • ABC211D Number of Shortest paths
    分析一道显然的最短路,用dijkstra算法。计算最短路的同时,保存最短路个数,如果与当前最短路相同,最短路个数相加,否则到这个节点的最短路个数为上一个节点的最短路个数。AcceptedCode#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;constintmod=1e9......
  • CF441E Valera and Number
    题目链接这道题一个朴素的思路就是:维护\(f_{i,j}\)表示第\(i\)轮后\(x=j\)的方案数。时间复杂度\(O(k\times2^k)\)。显然过不了。我们尝试寻找一个能抛开\(x\)的值域的做法。不妨重新设\(f_{i,j}\)表示第\(i\)轮结束时的\(x\),增加\(j\)之后期望的末尾\(0\)个......
  • 计算即时订单比例-首单使用开窗函数row_number()
    1需求即时订单和计划订单订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位小数,以小数形式显示。配送信息表delivery_info期望结......
  • F. Vasilije Loves Number Theory
    F.VasilijeLovesNumberTheory前提知识:d(n)表示数字n的正约数个数,gcd(a,b)表示a,b两者的最大公约数要点:问是否存在a,使得d(a*n)=n,gcd(n,a)=1,意思是n与a互质,则可得,d(a*n)=d(a)*d(n)=n则问题转化成n%d(n)==0?尽管d(n)<=1e9,但n可能很大,所以可以利用质因子来求点击查看......
  • nginx访问报错“maximum number of descriptors supported by select() is 1024 while
    1、问题背景 项目:一个人力的系统,主要用于考勤打卡环境:windowsservernginx版本:1.22 问题说明:当早上访问人数增加的时候,就会出现nginx的异常nginx的后台报错日志:maximumnumberofdescriptorssupportedbyselect()is1024whileconnectingtoupstream  ......
  • 【踩坑】JS/TS 整数明明没有超过 Number.MAX_VALUE,为啥精度还是丢失了?
    代码functioncalcKey(props){returnprops.reduce((key,prop,index)=>{constcode=prop[0]*(15+1)+prop[1];console.log(code);console.log(key);returnkey+code*Math.pow(1000,index);},0);}func......