min25筛学习

【学习笔记】Min25筛 【定理简介】 Min25Min25Min25筛是一种能够求解积性函数f(x)f(x)f(x)的前缀和∑Ni=1f(i)∑i=1Nf(i)\sum_{i=1}^{N}f(i)的筛法,其前提条件为∑Ni=1[i is a prime]∗f(i)∑i=1N[i is a prime]∗f(i)\sum_{i=1}^{N}[i\ i... 阅读详情

简介

min25筛能在在亚线性时间复杂度求出一类积性函数的前缀和,前提是这个积性函数在质数和质数的幂等位置的函数值比较好求。它借助埃氏筛的思想,将原问题转化为在质因子处的相似的子问题,从而得到一个递推式,达到快速求解的目的。


算法原理

一些符号

为了方便描述,定义以下符号:
设我们的问题是求 F ( n ) ∑ i = 1 n f ( i ) F(n)\sum\limits_{i=1}^nf(i) F(n)i=1∑n​f(i),假设 f ( i ) f(i) f(i)是一个完全积性函数。

  • m i n p ( i ) minp(i) minp(i),表示 i i i的最小质因子
  • p r k pr_k prk​,表示 n n n以内第 k k k个质数
  • ∣ p r ( n ) ∣ |pr(n)| ∣pr(n)∣,表示 n n n以内质数的个数

g函数

g ( n , i ) g(n,i) g(n,i)表示在埃氏筛中,在 n n n以内前 i i i个质数筛完后,剩下的数的 f f f值之和。剩下的数包含所有质数,以及最小质因子大于 p r i pr_i pri​的合数。

g ( n , i ) = ∑ ( j ∈ p r i m e ) ∧ ( m i n p ( j ) > p r i ) f ( j ) g(n,i)=\sum\limits_{(j\in prime)\wedge(minp(j)>pr_i)}f(j) g(n,i)=(j∈prime)∧(minp(j)>pri​)∑​f(j)

由此可知 g ( n , ∣ p r ( n ) ∣ ) g(n,|pr(n)|) g(n,∣pr(n)∣)表示做完埃氏筛后未被删掉的数(即 n n n以内所有质数)的 f f f值之和, g ( p r k , k ) g(pr_k,k) g(prk​,k)表示前 k k k个质数的 f f f值之和。

我们可以用如下递推式求 g ( n , i ) g(n,i) g(n,i)。

g ( n , i ) = { g ( n , i − 1 ) p r i 2 > n g ( n , i − 1 ) − f ( p r i ) × ( g ( ⌊ n p r i ⌋ , i − 1 ) − g ( p r i − 1 , i − 1 ) ) p r i 2 ≤ n g(n,i)= \begin{aligned} \left\{\begin{matrix} g(n,i-1)\qquad &pr_i^2>n \\ \\ g(n,i-1)-f(pr_i)\times(g(\lfloor\dfrac{n}{pr_i}\rfloor,i-1)-g(pr_{i-1},i-1)) \qquad &pr_i^2\leq n \end{matrix}\right. \end{aligned} g(n,i)=⎩ ⎨ ⎧​g(n,i−1)g(n,i−1)−f(pri​)×(g(⌊pri​n​⌋,i−1)−g(pri−1​,i−1))​pri2​>npri2​≤n​​

对于第一部分,因为 p r i 2 > n pr_i^2>n pri2​>n,所以在埃氏筛中 p r i pr_i pri​无法筛掉任何一个数,所以等于上一个状态。在埃氏筛中,一个合数只会被它的最小质因数筛掉,而质数不会被筛。

对于第二部分, g ( n , i ) g(n,i) g(n,i)所包含的 f f f值,等于 g ( n , i − 1 ) g(n,i-1) g(n,i−1)所包含的 f f f值减去 p r i pr_i pri​筛掉的数的 f f f值,即减去最小质因子为 p r i pr_i pri​的合数的 f f f值。

我们发现这个式子也可以写成含 g g g的表达式,即 f ( p r i ) × ( g ( ⌊ n p r i ⌋ , i − 1 ) − g ( p r i − 1 , i − 1 ) ) f(pr_i)\times(g(\lfloor\dfrac{n}{pr_i}\rfloor,i-1)-g(pr_{i-1},i-1)) f(pri​)×(g(⌊pri​n​⌋,i−1)−g(pri−1​,i−1))。其中 g ( ⌊ n p r i ⌋ , i − 1 ) g(\lfloor\dfrac{n}{pr_i}\rfloor,i-1) g(⌊pri​n​⌋,i−1)是 ⌊ n p r i ⌋ \lfloor\dfrac{n}{pr_i}\rfloor ⌊pri​n​⌋以内用前 i − 1 i-1 i−1个质数筛过后的 f f f值之和,它包含两个部分:

  • 最小质因子大于 p r i − 1 pr_{i-1} pri−1​的数的 f f f值
  • 前 i − 1 i-1 i−1个质数的 f f f值,即 g ( p r i − 1 , i − 1 ) g(pr_{i-1},i-1) g(pri−1​,i−1)

那么减掉第二部分后,得到的是 ⌊ n p r i ⌋ \lfloor\dfrac{n}{pr_i}\rfloor ⌊pri​n​⌋以内最小质因子大于 p r i − 1 pr_{i-1} pri−1​的数的 f f f值。如果再乘上 p r i pr_i pri​,得到的是 n n n以内最小质因子等于 p r i pr_i pri​的合数的 f f f值之和,这部分就是 p r i pr_i pri​筛去的数的 f f f值之和。

但是只有当 f f f为完全积性函数时, f ( p r i ) f(pr_i) f(pri​)才能提取出来。而这里 f f f是积性函数,却不一定是完全积性函数,我们怎么能够这样推出式子呢?而且,这个递推式的初始条件是 g ( n , 0 ) g(n,0) g(n,0),而 g ( n , 0 ) g(n,0) g(n,0)正是题目要求的,怎么可以用来做初始值呢?

其实在这里的 g ( n , 0 ) g(n,0) g(n,0)所求的并不是真正的 f f f值之和,它求的是另一个完全积性函数的和,假设这个函数为 f ′ f' f′。在质数位置和质数幂的位置, f ′ f' f′值与 f f f值相等;而在其他位置, f ′ f' f′值与 f f f值不一定相等。设置 f ′ f' f′的目的,是因为这里需要完全积性函数。用 f ′ f' f′代替 f f f,即可使递推式成立。

下文要求的 g g g值中只包含 f f f在质数和质数幂处的值,其他地方的值都被筛掉了,所以求出的答案是正确的。

递推式已经推出来了,接下来看看如何实现。

g g g函数有两个参数直接做的话,时间复杂度和空间复杂度都很大。我们发现第二维是可以滚动的,所以空间上可以省掉第二维。
令 s i = g ( p r i , i ) s_i=g(pr_i,i) si​=g(pri​,i),则 s i s_i si​可以在求质数时求出。又因为 ⌊ ⌊ n a ⌋ b ⌋ = ⌊ n a b ⌋ \lfloor\dfrac{\lfloor\frac na\rfloor}{b}\rfloor=\lfloor\dfrac{n}{ab}\rfloor ⌊b⌊an​⌋​⌋=⌊abn​⌋,所以在递推中所有 g g g值的参数都在数论分块的 2 n 2\sqrt n 2n ​个值之中。所以我们一开始将这 2 n 2\sqrt n 2n ​个数先存起来,然后在上面进行滚动求值。

code

void init(){
	x=sqrt(n)+1;
	dd();//埃氏筛
	for(long long l=1,r;l<=n;l=r+1){
		r=n/(n/l);
		v[++vt]=n/l;//记下数论分块中可能用到的值
		if(n/l<=x) f[0][n/l]=vt;
		else f[1][l]=vt;
		long long t=n/l;
		g[vt]=...;//求g(v[vt],0)处的值
	}
	long long w;
	for(int i=1;i<=p1;i++){
		w=1ll*pr[i]*pr[i];
		long long t;
		for(int j=1;j<=vt&&w<=v[j];j++){
			t=v[j]/pr[i];
			if(t<=x) t=f[0][t];
			else t=f[1][n/t];
			g[j]=(...);//求g(j,i)的值
		}
	}//滚动求g(n,i)
}

S函数

设 S ( n , i ) S(n,i) S(n,i)表示 n n n以内的最小质因子大于 p r i pr_i pri​的数的 f f f值之和,则有

S ( n , i ) = g ( n , ∣ p r ( n ) ∣ ) − g ( p r i , ∣ p r ( n ) ∣ ) + ∑ j > i ∑ p r j k ≤ n f ( p r j k ) × ( S ( ⌊ n p r j k ⌋ , j ) + [ k > 1 ] ) S(n,i)=g(n,|pr(n)|)-g(pr_i,|pr(n)|)+\sum\limits_{j>i}\sum\limits_{pr_j^k\leq n}f(pr_j^k)\times (S(\lfloor\dfrac{n}{pr_j^k}\rfloor,j)+[k>1]) S(n,i)=g(n,∣pr(n)∣)−g(pri​,∣pr(n)∣)+j>i∑​prjk​≤n∑​f(prjk​)×(S(⌊prjk​n​⌋,j)+[k>1])

其中 g ( n , ∣ p r ( n ) ∣ ) − g ( p r i , ∣ p r ( n ) ∣ ) g(n,|pr(n)|)-g(pr_i,|pr(n)|) g(n,∣pr(n)∣)−g(pri​,∣pr(n)∣)表示 n n n以内大于 p r i pr_i pri​的质数的 f f f值之和。后面相当于求 n n n以内不是质数的最小质因子大于 p r i pr_i pri​的数的 f f f值之和。当 k = 1 k=1 k=1时, f ( p r j ) f(pr_j) f(prj​)在前面已经被计算过了,所以不用加1;当 k > 1 k>1 k>1时, p r j k pr_j^k prjk​不是质数,所以要加上。

S S S的初始值为 S ( n , ∣ p r ( n ) ∣ ) = 0 S(n,|pr(n)|)=0 S(n,∣pr(n)∣)=0。

我们要求的是 S ( n , 0 ) + f ( 1 ) S(n,0)+f(1) S(n,0)+f(1)。

观察上述的递推式,前两项已经求出。最后一项有两个求和号,分别枚举质因数和它的幂数。

当 p r j 2 > n pr_j^2>n prj2​>n时,在 k = 1 k=1 k=1时 S ( ⌊ n p r j k ⌋ , j ) S(\lfloor\dfrac{n}{pr_j^k}\rfloor,j) S(⌊prjk​n​⌋,j)显然为 0 0 0( ⌊ n p r j k ⌋ < p r j \lfloor\dfrac{n}{pr_j^k}\rfloor<pr_j ⌊prjk​n​⌋<prj​,不可能有数在 ⌊ n p r j k ⌋ < p r j \lfloor\dfrac{n}{pr_j^k}\rfloor<pr_j ⌊prjk​n​⌋<prj​以内且最小质因子大于 p r j pr_j prj​)。所以我们只要求 n \sqrt n n ​以内的质因子。而 S ( ⌊ n p r j k ⌋ , j ) S(\lfloor\dfrac{n}{pr_j^k}\rfloor,j) S(⌊prjk​n​⌋,j)中第一个参数也只能取数论分块的 2 n 2\sqrt n 2n ​个值。

code

long long S(long long p,int q){
	if(pr[q]>=p) return 0;
	long long td=(p<=x?f[0][p]:f[1][n/p]);
	long long re=((g[td]-s[q])%mod+mod)%mod;//前两项
	for(int j=q+1;j<=p1;j++){
		if(1ll*pr[j]*pr[j]>p) break;
		for(long long o=1,pq=pr[j];pq<=p;++o,pq=pq*pr[j]){
			re=(re+1ll*(...)%mod*(S(p/pq,j)%mod+(o>1))%mod)%mod;//最后一项
		}
	}
	return re;
}

思考

观察 S ( n , i ) S(n,i) S(n,i)的递推式,将其改成如下式子

S ( n , i ) = ∑ j > i ∑ p r j k ≤ n f ( p r j k ) × ( S ( ⌊ n p r j k ⌋ , j ) + 1 ) S(n,i)=\sum\limits_{j>i}\sum\limits_{pr_j^k\leq n}f(pr_j^k)\times (S(\lfloor\dfrac{n}{pr_j^k}\rfloor,j)+1) S(n,i)=j>i∑​prjk​≤n∑​f(prjk​)×(S(⌊prjk​n​⌋,j)+1)

递推式意义不变,而且不用求 g g g函数了。那为什么我们不能用这个式子来求 S S S呢?

注意当 + [ k > 1 ] +[k>1] +[k>1]变为 + 1 +1 +1时,若 k = 1 k=1 k=1, p r j 2 > n pr_j^2>n prj2​>n,则 p r j pr_j prj​也有贡献,这就要求我们求出 n n n以内的所有质数。一般的 n n n都是 1 0 9 10^9 109以上的级别的,这显然是不可行的。


总结

min25筛的时间复杂度为 O ( n 3 4 ln ⁡ n ) O(\dfrac{n^{\frac 34}}{\ln n}) O(lnnn43​​),相对于杜教筛来说,min25筛要快一些,而且不用找 g , h g,h g,h以及求它们的前缀和。

有时候题目中的 f f f是一个多项式,我们需要把它拆开,对每一项都用 g g g的递推式求一次,最后再求和。


例题

洛谷P5325 【模板】Min_25筛

f ( p k ) = p k ( p k − 1 ) = p 2 k − p k f(p^k)=p^k(p^k-1)=p^{2k}-p^k f(pk)=pk(pk−1)=p2k−pk,令 f 1 ( x ) = x 2 f_1(x)=x^2 f1​(x)=x2, f 2 ( x ) = x f_2(x)=x f2​(x)=x,则 f ( p k ) = f 1 ( p k ) + f 2 ( p k ) f(p^k)=f_1(p^k)+f_2(p^k) f(pk)=f1​(pk)+f2​(pk)。因为 f 1 f_1 f1​和 f 2 f_2 f2​都是完全积性函数,所以我们可以分别将 f 1 , f 2 f_1,f_2 f1​,f2​带入 g g g的递推式中,做min25筛。

code

#include<bits/stdc++.h>
using namespace std;
const int N=200000;
const long long mod=1000000007;
int p1,vt,z[N+5],pr[N+5];
long long n,x,ny,v[N+5],f[2][N+5],s1[N+5],s2[N+5],g1[N+5],g2[N+5];
long long mi(long long t,long long v){
	if(!v) return 1;
	long long re=mi(t,v/2);
	re=re*re%mod;
	if(v&1) re=re*t%mod;
	return re; 
}
void dd(){
	for(int i=2;i<=N;i++){
		if(!z[i]){
			pr[++p1]=i;
			s1[p1]=(s1[p1-1]+1ll*i*i%mod)%mod;
			s2[p1]=(s2[p1-1]+i)%mod;
		}
		for(int j=1;j<=p1&&i*pr[j]<=N;j++){
			z[i*pr[j]]=1;
			if(i%pr[j]==0) break;
		}
	}
}
void init(){
	x=sqrt(n)+1;
	ny=mi(6ll,mod-2);
	dd();
	for(long long l=1,r;l<=n;l=r+1){
		r=n/(n/l);
		v[++vt]=n/l;
		if(n/l<=x) f[0][n/l]=vt;
		else f[1][l]=vt;
		long long t=(n/l)%mod;
		g1[vt]=(t*(t+1)%mod*(2*t+1)%mod*ny%mod-1+mod)%mod;
		g2[vt]=(t*(t+1)/2%mod-1+mod)%mod;
	}
	long long w;
	for(int i=1;i<=p1;i++){
		w=1ll*pr[i]*pr[i];
		long long t;
		for(int j=1;j<=vt&&w<=v[j];j++){
			t=v[j]/pr[i];
			if(t<=x) t=f[0][t];
			else t=f[1][n/t];
			g1[j]=(g1[j]-1ll*pr[i]*pr[i]%mod*(g1[t]-s1[i-1])%mod+mod)%mod;
			g2[j]=(g2[j]-1ll*pr[i]*(g2[t]-s2[i-1])%mod+mod)%mod;
		}
	}
}
long long S(long long p,int q){
	if(pr[q]>=p) return 0;
	long long td=(p<=x?f[0][p]:f[1][n/p]);
	long long re=((g1[td]-s1[q]-g2[td]+s2[q])%mod+mod)%mod;
	for(int j=q+1;j<=p1;j++){
		if(1ll*pr[j]*pr[j]>p) break;
		for(long long o=1,pq=pr[j],t;pq<=p;++o,pq=pq*pr[j]){
			t=pq%mod;
			re=(re+t*(t-1)%mod*(S(p/pq,j)%mod+(o>1))%mod)%mod;
		}
	}
	return re;
}
int main()
{
	scanf("%lld",&n);
	init();
	printf("%lld",(S(n,0)+1)%mod);
	return 0;
}
Min_25筛学习小记 前言 Min_25筛的时间复杂度和洲阁筛(我不会)一样,都是O(n34logn)O(n34logn)O(\frac{n^{\frac{3}{4}}}{logn})。但Min_25筛的时空常数,代码复杂度据说比洲阁筛要优秀,甚至可以替代掉洲阁筛,于是我这个学不懂洲阁筛的菜鸡就赶紧跑来学习了一发。 我看的是zzq的博客 目标 设F(x)F(x)F(x)是一个积性函数,现在要求∑i=1nF(... 阅读详情

相关推荐

生产环境下oracle19c rac恢复节点2

现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。

sqlora的专栏 867

Min25筛详解

Min25筛详解 min25筛有什么用? 目的: 求出∑i−1Nf(i)\sum_{i-1}^Nf(i)∑i−1N​f(i)的前缀和,其中前置条件为 f(i)f(i)f(i) 当i为素数时,能够用iki^kik表达,例如f(i)=i1+i2+i3f(i)=i^1+i^2+i^3f(i)=i1+i2+i3等形式,常见的有ϕμ\phi \quad \muϕμ函数。 f(i)f(i)f(i)是积性函数 怎么求? 分两步走 处理素数 处理合数 处理素数 素数部分 ∑i=1N[i∈prime]f(i)

weixin_44203780的博客 2158

避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道

本文详细解析了Windows下OpenCV摄像头索引混乱问题的3种解决方案,包括GUID查询法、DirectShow接口集成和注册表固化技术。针对工业视觉和智能监控场景,提供实战代码和性能优化建议,帮助开发者稳定识别多路摄像头设备,有效解决VideoCapture接口的索引漂移问题。

weixin_30836759的博客 406

Min_25筛详解

Min_25筛

Tonvia的博客 4862

STM32实现薄膜压力传感器数据采集(标准库和HAL库实现)

薄膜压力传感器采集压力数据

XiaoCaiDaYong的博客 3万+

Min25 - 浅谈

Min25

qq_41739081的博客 650

RFSOC实战解析(一):深入RF Data Converter的时钟与数据接口设计

本文深入解析RFSOC中RF Data Converter的时钟与数据接口设计,涵盖GHz采样、数据流处理、时钟树同步及AXI-Stream接口实战。通过详细案例和调试技巧,帮助工程师高效配置IP核,优化ADC/DAC性能,解决跨时钟域和信号完整性等关键问题。

weixin_30955617的博客 473

min25筛学习笔记&模板详解

min25筛算法推导&模板详解 问题引入 引入函数σ0(n)\sigma _0(n)σ0​(n)为n的正因数的数量,求S(n,k)=∑i=1nσ0(ik)S(n,k)=\sum_{i=1}^n\sigma_0(i^k)S(n,k)=∑i=1n​σ0​(ik),n,k≤1010n,k\le 10^{10}n,k≤1010 简化分析与引入 对于σ0(n)\sigma_0(n)σ0​(n)函数,...

FLY_WHITE的博客 4045

【网络与爬虫 62】小程序爬虫终极攻略:微信支付宝小程序数据采集完全指南

本文深入解析微信和支付宝小程序的爬虫技术,从基础架构分析到高级逆向工程,涵盖WXML/AXML模板解析、API接口拦截、网络流量分析等核心技术。通过实战案例和代码示例,帮助开发者掌握小程序数据采集的完整技术栈。

熵数实验室 3417

辐射制冷无规散射结构非球形散射体的结构优化与设计准则

本文针对辐射制冷材料中非球形散射体的光散射特性开展研究,提出了一种基于体积散射截面和不对称因子的综合评价方法。通过建立简化模型分析球体、圆柱体、长方体等六种几何形状在太阳波段的散射性能,发现金字塔形和圆锥形具有更强的后向散射能力。研究创新性地提出"反射因子SR=S(1-g)"这一评价参数,该参数与宏观反射率高度相关,为非球形散射体的优化设计提供了定量依据。仿真结果表明,合理选择散射体形状可显著提升辐射制冷材料的太阳反射率,为实现高效被动制冷提供了新的结构设计思路。

huanghm88的专栏 79

min25筛学习小计

老年选手ezoilearner退役后,偶尔通过一些学习小计来调节自己的心情吧,于是就有了这篇min25筛的学习笔记,博主在役的时候连min25筛都不会 大概从朱老大的论文里面找出两个关键的式子吧(朱老大有个地方写错了 gn,m=∑m<p⩽n,pe<=n,e>=1([e>1]+g⌊npe⌋,p)+hn−hm,g_{n,m}=\sum_{m<p\leqslant \sqrt n,p^e<=n,e>=1}([e>1]+g_{\lfloor \frac{n}{p^e}

ezoileaner的博客 269

OpenClaw Windows 安装指南

好的,我来一步一步带你在 Windows 上安装 OpenClaw。

m0_60605453的博客 550

min_25筛学习笔记+牛客多校02E

本来没有学习这种较难的算法的想法的,因为比赛也做不到这种难度的题, 但是最近打牛客多校02,有一题要求1n中素数的个数,我以为是像莫反一样容斥,但是后面感觉不行。赛后知道是用筛来求,赛时过了一车,因此我也不得不学习这个算法了。我打算拿洛谷里面的来举例。就是给你积性函数fx⎩⎨⎧​kgx∑i0k​ai​xifx1​fx2​​x1xpcp∈primec≥1x1​x2​1​然后让你求i1∑n​f。

zsyzClb的博客 903

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Min_25筛学习笔记

Min_25筛学习笔记 Tags:数学 好像只有拍这两张的时候我没有手抖。。。 转载于:https://www.cnblogs.com/xzyxzy/p/10206152.html

weixin_30398227的博客 75

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

min25筛学习总结

前言 杜教筛学了,顺便把min25筛也学了吧= =刚好多校也有一道题需要补。 下面推荐几篇博客,我之后写一点自己的理解就是了。 传送门1 传送门2 传送门3 这几篇写得都还是挺好的,接下来我就写下自己对min25筛的理解吧 。 正文 简介: min25筛同杜教筛类似,是用来解决一类积性函数的前缀和,即\(\sum_{i=1}^nF(i)\),并且这里的\(n\)可以达到\(10^{10}...

dft539533的博客 295

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Min_25 筛学习笔记

Min_25 筛的学习笔记

ZHUYINGYE_123456的博客 1131

【学习笔记】min_25筛

GDCPC2024出题人:出这道 min25 筛是给大家增加过题数的 [呲牙][大哭][呲牙][大哭]

Brute♂force 1770

min_25筛学习

min_25筛是用于处理可以快速算出某个质数的值的积性函数的前缀和问题的一种筛。 首先定义这样一个东西: g()

DJ的博客 345

Min_25筛学习Tip+链接

前言 机房里差不多都会Min_25筛了,我也赶紧补一波坑 什么是Min_25筛

zhouyuheng2003的博客 2184

min25筛学习理解

#include <bits/stdc++.h> #define mem(ar,num) memset(ar,num,sizeof(ar)) #define me(ar) memset(ar,0,sizeof(ar)) #define lowbit(x) (x&(-x)) #define Pb push_back #define FI first #define SE...

海边拾贝,沧海一粟 438

min25筛学习小结

前言 这玩意儿听说其大名好久了,但一直没学。 那么这次就来补补课。 好久没写博客了(其实是懒得写 埃氏筛法 这个有什么用呢,其实也只是一个思想。 埃氏筛法其实就是用来筛质数的一个朴素方法(弱鸡我至今还在用 过程大概就是: 从2开始,把以后的2的倍数都打上标记,然后再找下一个没被标记的。 找到3,把以后的3的倍数都打上标记,然后再找下一个没被标记的。 …… 就没了。 min25筛 用处 这个东东其实就是用来算某个积性函数f(i)f(i)f(i)的前缀和。 可以在O(n34log n)O(\frac{

RainbowCrown_CGH's blog 787

min_25筛学习小记

终于在考试中碰到了一题不能用杜教筛的函数,被迫来学这个。。。 概述 首先这个函数f(x)f(x)f(x)要求是积性函数,而且f(p)f(p)f(p)和f(pc)f(pc)f(p^c)都要很好计算,设一个“假的”f′(x)f′(x)f'(x)表示把xxx直接当成质数时的f(x)f(x)f(x),f′(x)f′(x)f'(x)是(或者能拆成)完全积性函数(比如说简单多项式),且∑ni=1f′(...

DOFYPXY的博客 872

Min_25筛学习小计

简单介绍 由Min_25在他的博客中介绍的做法,又称Min_25筛。 用于求积性函数f(n)f(n)f(n)的前缀和,其中要求f(p)f(p)f(p)可以表示成多项式,并且f(pk)f(p^k)f(pk)可以快速算出。 能够在O(n0.75log)O(\frac{n^{0.75}}{log})O(logn0.75​)的时间内算出。 基本思路 使用DPDPDP先求出所有素数的f(p)f(p)f(p)的前缀和,然后再通过枚举最小的质因子计算出合数的前缀和。 求素数的前缀和 下面的所有除法都为整除。 我

Deep_Thinking的博客 368

Min25筛学习 + 【51nod1847】奇怪的数学题(Min_25筛+杜教筛)

Min25筛小结——alpc_qleonardo的博客 讲的非常清楚,不过其中大S(n,j)S(n,j)S(n,j)表示的应该是从111累加到nnn的F(i)F(i)F(i),iii要么是质数,要么最小质因子大于等于jjj。这样才满足那个递推式。 然后来看一道巧妙的例题。 题意 给出 N,KN,KN,K ,请计算下面这个式子: ∑i=1N∑j=1Nsgcd(i,j)k\sum_{i=1}^N\...

Ark 946
上一篇: 洛谷P6055 [RC-02] GCD
下一篇: ARC153B Grid Rotations
tanjunming2020
博客等级 码龄5年 1816粉丝 698原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值