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

杜教筛学习笔记

时间:2024-01-20 13:44:22浏览次数:27  
标签:mu frac 前缀 sum 笔记 杜教 学习 long include

原理

前置知识:积性函数,狄利克雷卷积。

杜教筛可以在亚线性的时间内算出某些函数的前缀和。

假设我们要算出函数 \(f\) 的前缀和,我们要找到函数 \(g\),记 \(f*g =h\)。

杜教筛的前提是 \(g\) 的前缀和与 \(h\) 的前缀和都可以快速计算,我们可以快速计算 \(f\) 的前缀和。

首先,我们考虑 \(h\) 的前缀和:

\[\begin{aligned} \sum_{i=1}^nh(i) &= \sum_{i=1}^n\sum_{d|i}g(d)f(\frac{i}{d})\\ &= \sum_{d=1}^n\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}g(d)f(\frac{d}{i})\\ &= \sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(\frac{d}{i})\\ \end{aligned} \]

如果记 \(S_f(n)=\sum_{i=1}^nf(i)\)。

所以我们就有:

\[S_h(n)=\sum_{i=1}^ng(i)S_f(\lfloor\frac{n}{i}\rfloor) \]

我们关心的是 \(S_f(n)\),所以移一下项可以得到:

\[g(1)S_f(n) = S_h(n)-\sum_{i=2}^ng(i)S_f(\lfloor\frac{n}{i}\rfloor) \]

这是一个关于 \(S_f\) 的递归式,我们可以配合数论分块递归求解。

直接记忆化搜索复杂度为 \(O(n^{\frac{3}{4}})\),如果预处理出所有 \(\le n^{\frac{2}{3}}\) 的 \(S_f(n)\) 则可以达到 \(O(n^{\frac{2}{3}})\)。

证明要用微积分,不会,咕咕咕咕。

一些常见的:\(\mu * I = \varepsilon\),\(\varphi * I = id\)。

模板题代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int N = 2e6;

/*
mu * I = e
phi * I = id
*/

int pr[N + 5] = {0}, cur = 0;
bool p[N + 5] = {false};

long long mu[N + 5] = {0};
long long phi[N + 5] = {0};

void Euler() {//预处理前缀和
	memset(p, true, sizeof p);
	cur = 0;
	p[0] = p[1] = false;
	mu[1] = phi[1] = 1;
	for (int i = 2; i <= N; i++) {
		if (p[i]) {
			pr[++cur] = i;
			mu[i] = -1;
			phi[i] = i - 1;
		}
		for (int j = 1; j <= cur && pr[j] * i <= N; j++) {
			p[pr[j] * i] = false;
			if (i % pr[j] == 0) {
				mu[pr[j] * i] = 0;
				phi[pr[j] * i] = pr[j] * phi[i];
				break;
			}
			else {
				mu[pr[j] * i] = mu[pr[j]] * mu[i];
				phi[pr[j] * i] = phi[pr[j]] * phi[i];
			}
		} 
	}
	for (int i = 1; i <= N; i++) {
		mu[i] += mu[i - 1];
		phi[i] += phi[i - 1];
	}
} 

unordered_map<int, long long> pfx_mu, pfx_phi;


long long get_pfx_mu(int n) {
	if (n <= N)	
		return mu[n];
	if (pfx_mu.count(n))
		return pfx_mu[n];
	long long ans = 1ll;
	long long l = 2ll, r;
	while (l <= n) {
		r = n / (n / l);
		ans -= (r - l + 1) * get_pfx_mu(n / l);
		l = r + 1; 
	} 
	return pfx_mu[n] = ans;
}

long long get_pfx_phi(int n) {
	if (n <= N)	
		return phi[n];
	if (pfx_phi.count(n))
		return pfx_phi[n];
	long long ans = 1ll * n * (n * 1ll + 1) / 2;
	long long l = 2ll, r;
	while (l <= n) {
		r = n / (n / l);
		ans -= (r - l + 1) * get_pfx_phi(n / l);
		l = r + 1; 
	} 
	return pfx_phi[n] = ans;
}

void slv() {
	int n;
	cin >> n;
	cout << get_pfx_phi(n) << " " << get_pfx_mu(n) << endl; 
}

int main() {
	Euler();
	int T;
	cin >> T;
	while (T--)
		slv();
	return 0; 
} 

标签:mu,frac,前缀,sum,笔记,杜教,学习,long,include
From: https://www.cnblogs.com/rlc202204/p/17976384

相关文章

  • 深度学习网络中各名词是什么意思?
    1backbone翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?翻译的很好,主干部分,哈哈哈哈,文字游戏了哈。这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnetVGG等,而不是我们自己设计的......
  • PHP学习第七天:框架开发与自动化工具
    在PHP学习的第七天,我深入了解了框架开发和自动化工具的使用。早上,我学习了如何使用PHP框架来加速Web应用程序的开发。PHP框架提供了一套预先构建的组件和工具,可以简化开发过程并提高应用程序的可靠性。我学习了Laravel和Symfony这两个流行的PHP框架,并了解了它们的核心概念和特性。......
  • 从食品包装到产品:机器学习驱动的缺陷检测解决方案
    ​从食品包装到产品:机器学习驱动的缺陷检测解决方案随着科技的进步,机器学习和人工智能已经渗透到各个行业,其中包括食品和包装行业。食品和包装的缺陷检测是保证产品质量和消费者安全的关键环节。传统的检测方法通常依赖于人工检查,这不仅效率低下,而且容易受到人为因素影响。而机......
  • 30+,怎么保持学习,实现个人成长?
     在繁忙的工作中,如何保持学习?30+的我,最近有一ge体会 我们提到学习时,通常想到的方式是,找一本书,可能在配上讲解视频,找一个专门的、整块的时间去学习,才被我们认为是学习。可是,一天就24小时,而我们每天至少工作8小时(有些朋友还远不止8小时,比如我......
  • 【学习笔记】主成分分析
    现在有\(m\)个\(n\)维的数据,想把它们降到\(k\)维,得到一个\(m\timesk\)的矩阵,但是不能损失数据之间的关联性和差异性。那么不难发现这肯定是让矩阵右乘一个大小为\(n\timesk\)的矩阵,进行一个线性空间的映射。做法是构造一个\(n\)维数据的协方差矩阵(矩阵的行列表示......
  • 人工智能第三版 第一章笔记
    人工智能第三版第一章人工智能概述主要内容:基本概念,应用领域、近期的历史和未来的前景1.图灵测试艾伦·图灵(AlanTuring)寻求可操作的方式来回答智能的问题,他想把功能(functionality,即智能能做的事情)与实现(implementation,即如何实现智能)分离开来。模拟游戏:询问者在有帘子的......
  • 图论练习笔记
    P1606[USACO07FEB]LilypadPondG首先跳的过程肯定不会经过相同位置,所以之前经过的位置可以视为原状态,所以可以把添加的莲花数量视为当前路径长度,问题也就转化成了最短路计数。因为求的是添加莲花的方案数而不是经过路径的方案数,所以可以把已有的莲花连通块缩起来,以水格子为状......
  • 1/19 学习进度笔记
    1.Cache和Checkpoint区别Cache是轻量化保存RDD数据,可存储在内存和硬盘,是分散存储,设计上数据是不安全的(保留RDD血缘关系)CheckPoint是重量级保存RDD数据,是集中存储,只能存储在硬盘(HDFS)上,设计上是安全的(不保留RDD血缘关系)2.Cache和CheckPoint的性能对比?Cache性能更好,因为......
  • 吴恩达 机器学习 第二章
    监督学习从给出的正确答案中学习回归用直线或曲线拟合数据,从无限多可能的输出数字中预测数字分类对一个类别做出预测,从小部分可能的结果中预测类别无监督学习不给标签,找到一些结构或模式聚类算法获取没有标签的数据并尝试自动将它们分组到集群中将未标记的数据放入不同......
  • 2024/1/19 算法笔记
    题目1:最大公约数的延伸问题P1414又是毕业季II-洛谷|计算机科学教育新生态(luogu.com.cn)题目上提及了最大公约数,但是解答却没有直接使用最大公约数doge题目意思是给定n个数,再给定一个k,往这n个数中取k个,求这k个数的最大公约数是多少?然后题目的要求是k的取值为1到n全部取......