Skip to content

Commit 3907152

Browse files
committed
mobius反演笔记修改
1 parent 5597d9c commit 3907152

File tree

1 file changed

+58
-1
lines changed

1 file changed

+58
-1
lines changed

math/莫比乌斯反演笔记.md

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#基本公式定理
2-
2+
$$
3+
\begin{align}
4+
n &= \sum_{d\mid n}\phi(d)\\
5+
\phi(n)&=\sum_{d\mid n}\mu(d)\frac nd
6+
\end{align}
7+
$$
38

49
#分块求和
510
如果说计算式中出现了 $\sum_if(i)*g(\lfloor(n/i)\rfloor)$,则由于 $\lfloor\frac{n}{i}\rfloor$的取值只有 $O(\sqrt n)$ 种显然我们可以运用分段求和(可以打印出这样的值来看一下)记录$f$的前缀和,然后g就进行分段求和.
@@ -15,3 +20,55 @@ ll F(int n, int m, int d) {
1520
return ans;
1621
}
1722
```
23+
24+
#线性筛法笔记整理
25+
线性筛法处理积性函数
26+
```
27+
void monius(){
28+
cnt =0;
29+
mu[1] = 1;
30+
memset(prime,0,sizeof(prime));
31+
for(int i = 2 ; i<maxn ; ++i){
32+
if(!prime[i]){
33+
prime[cnt++] = i;
34+
mu[i] =-1;
35+
}
36+
for(int j=0 ; j<cnt && i*prime[j]<maxn ; ++j){
37+
prime[i*prime[j]] = 1;
38+
if(i%prime[j])mu[prime[j]*i] = -mu[i];
39+
else {
40+
mu[i*prime[j]] = 1;
41+
break;
42+
}
43+
}
44+
}
45+
sum_mu[0] = 0;
46+
for(int i=1 ; i<maxn ; ++i)
47+
sum_mu[i] = sum_mu[i-1]+mu[i];
48+
}
49+
```
50+
51+
```c++
52+
void phi_table(){
53+
cnt =0;
54+
phi[1] = 0;
55+
memset(prime,0,sizeof(prime));
56+
for(int i = 2 ; i<maxn ; ++i){
57+
if(!prime[i]){
58+
prime[cnt++] = i;
59+
phi[i] =i-1;
60+
}
61+
for(int j=0 ; j<cnt && i*prime[j]<maxn ; ++j){
62+
prime[i*prime[j]] = 1;
63+
if(i%prime[j])phi[prime[j]*i] = phi[i]*(phi[prime[j]]-1);
64+
else {
65+
phi[i*prime[j]]= phi[i]*phi[prime[j]];
66+
break;
67+
}
68+
}
69+
}
70+
}
71+
```
72+
参考文献:
73+
74+
[贾智鹏 线性筛](https://wenku.baidu.com/view/2d706761aa00b52acec7ca63.html?re=view)

0 commit comments

Comments
 (0)