首页 > 其他分享 >浅谈筛法

浅谈筛法

时间:2024-02-20 21:13:34浏览次数:32  
标签:lfloor frac 浅谈 筛法 sum rfloor leq 前缀

浅谈筛法

Euler 筛

Eratosthenes 筛

可以证明(不是“不难证明”),Eratosthenes 筛的复杂度为 \(\Theta(n\log \log n)\)。

Eratosthenes 筛的复杂度证明

Dirichlet 前缀和

P5495 【模板】Dirichlet 前缀和 为例。

给定 \(a_1,a_2,\cdots,a_n\),求 \(b_1,b_2,\cdots,b_n\),满足

\[b_i=\sum_{d\mid i} a_d \]

\(n\leq 2\times 10^7\)。

直接考虑 Dirichlet 前缀和。板子如下:

for (int i=1; i<=tot; ++i)
    for (int j=1; j*prime[i]<=n; ++j)
        a[j*prime[i]]+=a[j];

实际上是关于素数的一个高维前缀和。利用解析数论的结论不难证明时间复杂度为 \(\Theta(n\log \log n)\)。

同理我们有 Dirichlet 后缀和。

for (int i=1; i<=tot; ++i)
    for (int j=n/prime[i]; j; --j)
        a[j]+=a[j*prime[i]];

例题 1

给定数组 \(a_1,a_2,\cdots,a_n\)。求出 \(b_i=\sum_{k=1}^n [i\mid a_k]\)。\(n\leq 2\times 10^7\)。

Divan and Kostomuksha (hard version)

给定数列 \(a\)。可以任意重排数列,最大化

\[\sum_{i=1}^n \gcd(a_1,a_2,\cdots,a_i) \]

的值。\(n\leq 2\times 10^5\),\(1\leq a_i\leq 2\times 10^7\)。

我们有一些性质。

  • 值相同的数一定放在一起。
    证明显然。
  • 最优方案中,数列一定不增。
    证明显然。

设 \(cnt_i\) 为 \(a_i\) 中 \(i\) 的倍数个数,设 \(f[i]\) 为重排后的数组最后一个数含有因数 \(i\) 的最大权值。我们有

\[f[i]=\max(f[i\cdot p_j]+i\cdot (cnt_i-cnt_{i\cdot p_j})) \]

我们将 \(i\) 的倍数紧接在 \(i\cdot p_j\) 的倍数后面。接在后面的数有 \(i\cdot (cnt_i-cnt_{i\cdot p_j})\) 个,每个数贡献了 \(i\)。

注意到这是经典的 Dirichlet 后缀和的形式,时间复杂度 \(\Theta(V\log \log V)\)。

Wheel of factorization

咕咕咕。

杜教筛

杜教筛常用于求一类数论函数 \(g\) 的前缀和。要求:

  • 可以构造 \(h\),使得 \(f=g\ast h\);
  • \(f\) 的前缀和及 \(h\) 的单点易求。

需要注意的是,\(g\) 不必须是数论函数。

设 \(s(n)=\sum_{i=1}^n g(i)\),我们将 \(f\) 的前缀和拆开。

\[\begin{aligned} \sum_{i=1}^n f(i)&=\sum_{i=1}^n \sum_{d\mid i}g(\frac{i}{d})h(d) \\ &=\sum_{d=1}^n h(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} g(i) \\ &=\sum_{d=1}^n h(d)s(\lfloor\frac{n}{d}\rfloor)\\ &=h(1)s(n)+\sum_{d=2}^n h(d)s(\lfloor\frac{n}{d}\rfloor)\\ \end{aligned} \]

于是我们得到杜教筛的公式。

\[s(n)=\frac{\sum_{i=1}^n f(i)-\sum_{i=2}^n h(i)s(\lfloor\frac{n}{i}\rfloor) }{h(1)} \]

\(s(\lfloor\frac{n}{i}\rfloor)\) 是相同的子问题,可以递归求解。

朴素地做可以证明是 \(\Theta(n^{\frac{3}{4}})\) 的。如果预处理出 \([1,n^{\frac{2}{3}}]\) 内的 \(g\) 的前缀和则可以做到 \(\Theta(n^{\frac{2}{3}})\)。

Min_25 筛

前置知识:P5493 质数前缀统计

记 \(\mathbb{P}\) 为素数集,\(p_i\) 为第 \(i\) 小的素数,\(S(n)=\displaystyle\sum_{p\leq n, p\in \mathbb{P}} p^k\)。求

\[\sum_{i=1}^{\lfloor\sqrt{n}\rfloor} i^2S(\lfloor\frac{n}{i}\rfloor) \]

\(n\leq 4\times 10^{10}\),对素数 \(p\) 取模。

观察到前面是经典的数论分块形式。于是问题的关键化为了求 \(S(n)\)。

设 \(g(n,i)\) 为用前 \(i\) 个素数筛过了之后的 \(S(n)\)。初始时有 \(g(n,0)=\sum_{i=2}^n i^k\),不难利用 Lagrange 插值 \(\Theta(k)\) 求出(如果读者不会,可以阅读我写的《多项式基础》博客)。

考虑递推,我们先给出结论。

\[g(n,i)= \begin{cases} g(n,i-1)-p_i^k(g(\lfloor\frac{n}{p_i}\rfloor,i-1)-g(p_i-1,i-1)), & p_i^2\leq n\\ g(n,i-1) & p_i^2\gt n \end{cases} \]

标签:lfloor,frac,浅谈,筛法,sum,rfloor,leq,前缀
From: https://www.cnblogs.com/Starrykiller/p/18024051/sieves

相关文章

  • 浅谈集合幂级数
    叠甲:读者很菜。集合幂级数是一个很厉害的东西。我们对于是有限集的全集\(\mathbb{U}={1,2,\dotsn}\),我们利用占位符\(x^S\)来表示一个序列\(f\),其中对于\(S\subseteq\mathbb{U}\)的值为\(f_S\)。一般记为\(F=\sum\limits_{S\subseteq\mathbb{U}}f_Sx^S\)。对于占位......
  • 浅谈iPaaS对企业转型的重要性
    面对数字化转型的大浪潮,众多企业都期望着能快速实现全面的数字化转型,让企业在日益激烈的竞争中拥有更稳的市场地位,提升自身的实力及能力,奠定更坚实的基底。但在数字化转型过程中,部分企业数字化基础水平较薄弱,集成方面更多的是采用传统的集成方式,集成结构单一、功能间不能复用、往......
  • 迎龙年浅谈 Binary Indexed Trees
    什么是BinaryIndexedTrees?就是树状数组啦。树状数组,是一种高级数据结构,用于高效地解决某一类问题。那么这一类问题是什么呢?那么让我们一起来看一下:问题引入给定一个序列\(a\),给定\(Q\)个\(l,r\),求\(\sum_{i=l}^ra_i\)。这一类问题,我们明显可以暴力枚举,时间复杂度为......
  • 浅谈盐类水解与 pH 综合选择题
    浅谈盐类水解与\(pH\)综合选择题(蒟蒻瞎写的,应该也没人能看到。)前言水溶液中的离子反应与平衡问题是高中化学的重点之一,也是高考难点集中之处。在做盐类水解与\(pH\)相关选择题的时候,笔者被一些综合题恶心到了,因此决定写一篇博客分析一下类似问题。笔者只有弱省高二水平,写......
  • 筛法思想的题目
    这道题目比较经典,或者说这种思想比较经典。这种筛法的思想。我们正着想对于每一个\(n、n-1、n-2、...、2、1\)都分解一遍质因数显然是来不及的时间复杂度达到\(O(n\sqrt{n})\)我们考虑对于每一个1e6以内的质因数的个数跑了一下程序是\(78498\)个素数定理告诉我们不超过x......
  • 质数基础筛法
    目录埃氏筛线性筛埃氏筛埃氏筛是一种筛素数的方法,埃氏筛的思想很重要,主要是时间复杂度朴素的埃氏筛的时间复杂度是\(O(nlogn)\)这个复杂度是调和级数vector<int>p;intvis[N];voidsolve(){ rep(i,2,n){ if(!vis[i]) p.pb(i); for(intj=i+i;j<=n;j+=i) vis[j]=1; ......
  • 浅谈甲类生产厂房应急照明和疏散指示系统的设计问题解析
    摘要:文章结合电气设计项目实践经验,分析了甲类生产厂房消防应急照明和疏散指示系统设计中照明灯和标志灯的设置、疏散走道和疏散通道的规划、集中控制型系统类型的选择、电压等级的选择中存在的问题,总结了相关经验,可以为同类工程提供参考。关键词:甲类生产厂房;消防应急照明和疏散指示......
  • 浅谈LocalCache | 京东云技术团队
    1、什么是LocalCache?本地缓存是一种将数据存储在应用程序内存中的机制,用于提高数据访问的性能和响应速度。它通过在内存中维护一个键值对的存储结构,允许应用程序快速检索和访问数据,而无需每次都从慢速的数据源(如数据库或网络)获取数据。2、LocalCache优缺点1)优点•快速访问:Loca......
  • 浅谈LocalCache | 京东云技术团队
    1、什么是LocalCache?本地缓存是一种将数据存储在应用程序内存中的机制,用于提高数据访问的性能和响应速度。它通过在内存中维护一个键值对的存储结构,允许应用程序快速检索和访问数据,而无需每次都从慢速的数据源(如数据库或网络)获取数据。2、LocalCache优缺点1)优点•快速访问:LocalCach......
  • Java浅谈BufferedReader
    既然Scanner简单好用,为什么要用BufferedReader呢?主要原因是面对大量的读入显得较慢且不安全,这里体现在三个方面,一方面是解析的问题,好用意味着封装的更复杂,一拖n的接口解析起来会慢;另一方面是缓冲区的问题,Scanner缓冲区小1024B,直面物理介质的机会更大,众所周知,IO时间在大数据面前......