莫比乌斯反演 and 杜教筛总结

这几天做了几道和杜教筛有关的题目,赶紧记下来怕以后忘了

首先就是最常用的式子

对于一个函数f(x)

设$g(x) =\sum_{x|d}f(d)$

则根据莫比乌斯反演有$$f(x) = \sum_{x|d}μ(\frac{d}{x})g(d)$$

举一个最常见的例子

求$$\sum_{i=1}^{N}\sum_{j=1}^{M} [gcd(i, j) == 1]$$

令$$g(x) =\sum_{i=1}^{N}\sum_{j=1}^{M} [x | gcd(i, j)]$$

根据上面的公式有$$f(x) = \sum_{x | d}μ(\frac{d}{x})g(d)$$

因为$$g(x) =\sum_{i=1}^{[\frac{N}{x}]}\sum_{j=1}^{[\frac{M}{x}]} [gcd(i, j) == 1]$$可以O(1)求出

答案即为f(1)

?

但有些时候n很大,这时候O(n)的时间复杂度是不可接受的,我们就需要用杜教筛来处理一些问题

比如$$\sum_{i=1}^{N}μ(i)$$

μ有一个性质:$$\sum_{d|n}\mu(d)=[n=1]$$

于是就有$$\sum_{i=1}^{N}\sum_{d|i}μ(d) = 1$$

变换一下枚举倍数$$\sum_{d=1}^{N}\sum_{j = 1}^{[\frac{N}{d}]}μ(j) = 1$$

于是 $$\sum_{i=1}^{N}μ(i) = 1 - \sum_{d=2}^{N}\sum_{j = 1}^{[\frac{N}{d}]}μ(j)$$

这个式子就可以递归求解了

我们预处理出前1e6的μ的前缀和, 每个$[\frac{N}{d}]$都是一个区间,可以一起求出

求前缀和递归函数:

 1 int sieve(LL x)
 2 {
 3     if(x <= MAXN) {
 4         return sum[x];
 5     }
 6     if(m[x]) {
 7         return m[x];
 8     }
 9     int S = 1;
10     for(LL i = 2, j; i <= x; i = j + 1) {
11         j = x / (x / i);
12         S = (S - (LL)(j - i + 1) * sieve(x / i) % MOD + MOD) % MOD;
13     }
14     return m[x] = S;
15 }

如果要求$$\sum_{i=1}^{N}i*μ(i) $$也可以用同样的方法

根据性质有$$\sum_{i=1}^{N}i\sum_{d|i}μ(d) = 1$$

则$$\sum_{i=1}^{N}\sum_{d|i}μ(d)*d*\frac{i}{d} = 1$$

同样枚举倍数$$\sum_{d=1}^{N}d\sum_{j=1}^{[\frac{N}{d}]}μ(j)*j = 1$$

则$$\sum_{i=1}^{N}i*μ(i)=1 - \sum_{d=2}^{N}d\sum_{i=1}^{[\frac{N}{d}]}μ(i)*i $$

做法就与之前相同了

递归函数:

 1 inline LL sieve(LL x)
 2 {
 3     if(x <= 5e6) {
 4         return sum[x];
 5     }
 6     int hh = get_h(x);
 7     if(ha[hh] == x) {
 8         return h[hh];
 9     }
10     ha[hh] = x;
11     h[hh] = 1;
12     LL i = 2;
13     while(i <= x)
14     {
15         LL m = x / i, j = x / m;
16         h[hh] = ((LL)h[hh] - (i + j) % MOD * (( j - i + 1) % MOD) % MOD * rev2 % MOD * sieve(m) % MOD + MOD) % MOD;
17         i = j + 1;
18     }
19     return h[hh];
20 }

原文地址:https://www.cnblogs.com/wuenze/p/9180232.html

时间: 2024-11-06 10:15:35

莫比乌斯反演 and 杜教筛总结的相关文章

【Luogu3768】简单的数学题(莫比乌斯反演,杜教筛)

[Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\(gcd\)提出来 \[\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^nij[gcd(i,j)==d]\] 习惯性的提出来 \[\sum_{d=1}^nd^3\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}ij[gcd(i,j)==1]\] 后面这玩意很明显的来一发

【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)

Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数.他现在长大了,题目也变难了. 求如下表达式的值: 一行一个整数ans,表示答案模1000000007的值. Sample Input 2 Sample Output 8 HINT 对于100%的数据n <= 10^9. 题解: 解锁新技能:杜教筛. 再复习一下: 若$F(n)=\s

莫比乌斯反演,杜教筛

BZOJ4176 #include <cstdio> #include <map> #define LL long long using namespace std; map <LL,LL> mpa; map <LL,LL> mpb; const LL mo=1e9+7; int b[10000001],phi[10000001],ss[10000001]; int miu[10000001],summiu[10000001],cnt,n; void eul

莫比乌斯函数与杜教筛

前人的文章已经很详尽了,这里只作一点补充. 莫比乌斯反演与莫比乌斯函数入门资料:https://wenku.baidu.com/view/fbec9c63ba1aa8114431d9ac.html 讲的非常清楚,这里稍微补充一下: 1.虽然考试肯定不会考,但是对于定理的证明还是应该大概了解一下的.关于欧拉函数φ与莫比乌斯函数μ,由于它们都是积性函数,所以很多性质都可以用类似数学归纳法的方法证明.过程是:(1)对于一个性质证明在x为素数是成立 (2)对于素数p和一个正整数a,设此性质对a与p均成立

【51nod-1239&amp;1244】欧拉函数之和&amp;莫比乌斯函数之和 杜教筛

题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 杜教筛裸题,不过现在我也只会筛这俩前缀和... $$s(n)=\sum _{i=1}^{n}f(i)$$ 那么就有: $$\sum_{i=1}^{n}f(i)\lfloor \frac{n}{i} \

【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

题目描述 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数.他现在长大了,题目也变难了. 求如下表达式的值: 其中f(ij)表示ij的约数个数. 他发现答案有点大,只需要输出模1000000007的值. 输入 第一行一个整数n. 输出 一行一个整数ans,表示答案模1000000007的值. 样例输入 2 样例输出 8 题解 莫比乌斯反演+杜教筛 首先有个神奇

【51Nod 1237】最大公约数之和 V3 莫比乌斯反演+杜教筛

题意 求$\sum_{i=1}^{n}\sum_{j=1}^{n}(i,j)$ 枚举约数 $$ \begin{align} ans &=\sum_{d=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[(i,j)=d] \ &=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[(i,j)=1] \ \end{align} $$ 利用

数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛

一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数\(\mu(n)\)为: 当n有平方因子时,\(\mu(n)=0\). 当n没有平方因子时,\(\mu(n)=(-1)^{\omega(n)}\),\(\omega(n)\)表示n不同质因子的个数. 性质1: \(\sum_{d|n}\mu(d)=[n=1]\) 证明:我们把n分解质因数,则原式\(=(-1+1)^{\omega(n)}=0\). 因为对于不同的质因子,只有选和不选两种方案,这是一个组合数相加的形式,偶数加奇数减,根据二项式

莫比乌斯反演欧拉函数杜教筛大总结

莫比乌斯函数 定义 设\(n=\prod_{i=1}^{k} p_i^{c_i}\),则\(\mu(n)=(-1)^k\),特别地\(\mu(1)=1\). 性质 最常用性质 \(\sum_{d|n}\mu(d)=[n=1]\) 反演性质 \(F(n)=\sum_{d|n}f(d) \Longleftrightarrow f(n)=\sum_{d|n}F(d)\mu(\frac{n}{d})\) \(F(n)=\sum_{n|d}f(d) \Longleftrightarrow f(n)=\su