首页 > 其他分享 >杜教筛学习笔记

杜教筛学习笔记

时间:2023-12-07 21:34:44浏览次数:26  
标签:frac 函数 sum varphi 杜教 学习 笔记 id

积性函数

定义:对于 \(gcd(a,b)=1\),满足 \(f(ab)=f(a)f(b)\) 的函数。

常用的积性函数:

  • \(I(n) =1\)
  • \(\epsilon(n) =[n==1]\)
  • \(id(n)=n\)

狄利克雷卷积

对于两个数论函数 \(f,g\),它们的狄利克雷卷积卷积是:

\[(f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d}) \]

单位元:\(f*\epsilon = f\)。

性质:

  • \(μ∗I=ϵ\),因为 \(\sum_{d|n}\mu(d)=[n==1]\)。
  • \(φ∗I=id(n)\),因为 \(\sum_{d|n}φ(d)=n\)。
  • \(id∗μ=φ(n)\)。

杜教筛

如何求 \(f(i)\) 的前缀和呢?

狄利克雷卷积告诉我们,只需要构造一个积性函数 \(g(i)\)。

如果你能快速的求出 \(\sum_{i=1}^{n}(f*g)(i)\),以及 \(\sum_{i=1}^{n}g(i)\),就可以快速地求出 \(\sum_{i=1}^{n}f(i)\) 了。

记 \(\sum_{i=1}^{n}f(i)=S(n)\)。那么:

\[\sum_{i=1}^{n}(f*g)(i) = \sum_{i=1}^{n}\sum_{d|i}f(i)g(\frac{i}{d})=\sum_{d=1}^{n}g(d)\sum_{i=1}^{\frac{n}{d}}f(i) =\sum_{d=1}^{n}g(d)S(\frac{n}{d})。 \]

可是我们要求 \(S(n)\) 耶,令 \(d=1\) 呗。

\[S(n)=\frac{\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\frac{n}{i})}{g(1)} \]

可以先线性筛出前 \(m\) 个答案,然后再用杜教筛。取 \(m =n^{\frac{2}{3}}\) 时最快。

欧拉函数

显然 \(f=\varphi,g=I,f*g=id\)。\(g\) 和 \(f*g\) 的前缀和都挺好求的。

int getphi(int n) {
	if(n <= N) return sum_phi[n];
	if(PHI[n]) return PHI[n];
	int res = n * (n + 1) / 2;
    for(int l = 2, r; l <= n; l = r + 1) {
    	r = n / (n / l);
    	res -= (r - l + 1) * getphi(n / l);
	}
	return PHI[n] = res;
}

莫比乌斯函数

显然 \(f=\mu,g=I,f*g=\epsilon\)

int getmul(int n) {
	if(n <= N) return sum_mul[n];
	if(MUL[n]) return MUL[n];
	int res = 1;
	for(int l = 2, r; l <= n; l = r + 1) {
		r = n / (n / l);
		res -= (r - l + 1) * getmul(n / l);
	}
	return MUL[n] = res;
}

例题:

P3768 简单的数学题

题意:

\[\left(\sum_{i=1}^n\sum_{j=1}^n ij \gcd(i,j)\right) \bmod p \]

分析:

使用 \(\varphi*I=id\) 解决。

\[\sum_{i=1}^{n}\sum_{j=1}^{n}ij \sum_{d|i,d|j} \varphi(d)=\sum_{d=1}^{n}\varphi(d)d^2\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}ij=\sum_{d=1}^{n}\varphi(d)d^2\frac{P^2(1+P)^2}{4} \]

其中 \(P=\frac{n}{d}\),很明显可以用整除分块来求。

考虑前面 \(\sum_{d=1}^{n}\varphi(d)d^2\) 怎么求,于是可以套用杜教筛的形式。

令 \(f(d)=\varphi(d)d^2\),\(g(d)=d^2\)。

那么

\[(f*g)(n)=\sum_{d|n}\varphi(d)d^2\frac{n^2}{d^2}=n^3 \]

\(g\) 的前缀和也很好求。

P3172 [CQOI2015] 选数

题意:

我们知道,从区间 \([L,H]\)(\(L\) 和 \(H\) 为整数)中选取 \(N\) 个整数,总共有 \((H-L+1)^N\) 种方案。小 z 很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的 \(N\) 个整数都求一次最大公约数,以便进一步研究。然而他很快发现工作量太大了,于是向你寻求帮助。你的任务很简单,小 z 会告诉你一个整数 \(K\),你需要回答他最大公约数刚好为 \(K\) 的选取方案有多少个。

由于方案数较大,你只需要输出其除以 \(10^9+7\) 的余数即可。

分析:

令 \(L = \lceil \frac{L}{k} \rceil, R=\lfloor \frac{R}{k} \rfloor\)。

那么答案为

\[\sum_{a_1=L}^{R}\sum_{a_2=L}^{R}...\sum_{a_n=L}^{R}[gcd(a_1,a_2...a_n)==1] \]

套个莫比乌斯函数

\[\sum_{a_1=L}^{R}\sum_{a_2=L}^{R}...\sum_{a_n=L}^{R}\sum_{d|a_1,d|a_2...d|a_n}\mu(d) \]

把 \(d\) 放到前面去

\[\sum_{d=1}^{R}\mu(d)(\lfloor\frac{R}{d}\rfloor-\lfloor\frac{L-1}{d}\rfloor)^n \]

求 \([L,R]\) 里面被 \(d\) 整除的个数相当于 \([1,R]-[1,L-1]\)。

整除分块下就好了。

标签:frac,函数,sum,varphi,杜教,学习,笔记,id
From: https://www.cnblogs.com/xcs123/p/17884020.html

相关文章

  • 前端学习-JavaScript学习-js基础-API02
    学习视频:黑马程序员视频链接事件监听三要素:事件源、事件类型、事件处理程序随机点名案例<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"&......
  • 《2023-2024-1 20232427《网络空间安全导论》第五周学习总结》
    《2023-2024-120232427《网络空间安全导论》第五周学习总结》教学学习内容总结第五章内容安全基础5.1信息内容安全概述社会信息化和网络化发展加快,现在全球数据增长十分迅速,数据内容成为了互联网的中心关注点。各种社交网络不断涌现。但是!互联网和信息媒体的发展带来了许多......
  • HTML列表标签学习
    一、有序列表例子:<ol> <li>苹果</li> <li>梨子</li></ol>其中有序列表可以有不同的排序方式:<h4>大写字母列表:</h4><oltype="A"><li>Apples</li><li>Bananas</li><li>Lemons</li><li>......
  • SpingBoot学习系列-错误集结
    1.Error:java:无效的源发行版:12 2.Identifyandstoptheprocessthat’slisteningonport8080orconfigurethisapplicationtolistenonanotherport.表明端口被占用,更改其他端口或者将被占用的端口对应的进程杀掉 查找端口被占用的进程或程序Windows系统:net......
  • 12.7课堂任务uml学习心得
    UML是一种用于描述、设计和建模软件系统的标准化语言。学习UML有助于更好地理解软件系统的结构、行为和组成,提高沟通与协作效率。以下是我关于UML学习的心得体会:1.掌握基本概念:学习UML前,首先要了解类、对象、接口、关系等基本概念。这些概念在UML中具有重要的意义,掌握它们有助......
  • Kosaraju 算法学习笔记(求强连通分量)
    写起来简单无比,不比Tarjan香?方法按照[1...n]的顺序在反图(边方向相反)上dfs一遍,出栈时将节点存入数组q[1...n]中按照q[n...1]的顺序在原图上dfs一遍,每次遍历就是一个新的强联通分量为什么是正确的?核心在于封死连通分量往外走的路。如果原图u-->v有一条边,且u和v不在同一个......
  • 每日学习之UML
    一、类图类图是用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。类之间的关系有依赖、泛化(继承)、实现、关联、聚合与组合各种关系的图形化表示如下图所示UML类图中的类有抽象类(abstract)接口类(interface)UML类图中的类分为三层,第一层是类名,第二层是类的静......
  • uml学习总结
    UML(UnifiedModelingLanguage)是一种用于软件系统建模的标准化语言,它提供了一组图形符号和规范,以便开发人员可以更好地理解、设计和构建复杂的软件系统。UML包括多种图表,每种图表都有不同的目的和应用场景。1.用例图(UseCaseDiagrams)特点:用例(UseCase)是描述系统功能的一......
  • 2023-2024 20231302《计算机基础与程序设计》第十一周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业这个作业的目标计算机网络、网络拓扑、云计算、网络安全、Web、HTML,CSS,Javascript、XML作业正文https://www.cnblogs.com/9q2z2z......
  • 2023-2024-1 20232312 《网络空间安全导论》第五周学习
    2023-2024-120232312《网络空间安全导论》第五周学习教材学习内容总结思维导图5.1信息安全内容概述一、互联网现状:开放性、异构性、移动性、动态性二、不良信息&&不规范行为产生原因:相关方面规范和管理措施未随互联网同步发展互联网提供思想碰撞场所5.2信......