Skip to content

Commit 5597d9c

Browse files
author
taotao
committed
反演笔记
1 parent 4f100c5 commit 5597d9c

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

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

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#基本公式定理
2+
3+
4+
#分块求和
5+
如果说计算式中出现了 $\sum_if(i)*g(\lfloor(n/i)\rfloor)$,则由于 $\lfloor\frac{n}{i}\rfloor$的取值只有 $O(\sqrt n)$ 种显然我们可以运用分段求和(可以打印出这样的值来看一下)记录$f$的前缀和,然后g就进行分段求和.
6+
```c++
7+
ll F(int n, int m, int d) {
8+
if (n > m) swap(n, m);
9+
ll ans = 0;
10+
n /= d, m /= d;
11+
for (int i = 1, last = 1; i <= n; i = last + 1) {
12+
last = min(n / (n / i), m / (m / i));
13+
ans += (ll)(sum[last] - sum[i - 1]) * (n / i) * (m / i);
14+
}
15+
return ans;
16+
}
17+
```

0 commit comments

Comments
 (0)