随笔分类 - 算法笔记
摘要:有标号无向连通图计数 设 \(f_n\) 表示大小为 \(n\) 的 有标号无向连通图 方案数,\(g_n\) 表示大小为 \(n\) 的 有标号无向图 方案数,显然有 \(g_n = 2^{\binom{n}{2}}\),通过钦定 \(1\) 号节点所在联通块的大小为 \(i\),它们之间具有关系
阅读全文
摘要:首先,Farey 数列 \(F_n\) 表示分母不超过 \(n\) 的所有既约真分数按大小顺序排列的集合,形式化来说 \[F_n = \left\{\frac{p}{q} \bigg\vert 0 < p < q \le n, \, \gcd(p, q) = 1\right\} \]这个数列的渐进大
阅读全文
摘要:多项式三角函数 考虑欧拉定理 \[e^{ix} = \cos{x} + i\sin{x} \]则 \[e^{-ix} = \cos{x} - i\sin{x} \]因此 \[\cos{x} = \frac{e^{ix} + e^{-ix}}{2} \]\[\sin{x} = \frac{e^{ix}
阅读全文
摘要:FFT 经典板子,采用三步并两步优化。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll, ll> PII; typedef pair<
阅读全文
摘要:子集遍历 for (int i = 0; i < 1 << n; i ++ ) 这个代码可以从 \(0\) 开始不重复的遍历每一个二进制数,因此时间复杂度 \(O(2^n)\)。 子集枚举 有的时候,我们希望枚举集合 \(i\) 所对应的所有自己,显然我们不可能循环套循环求与的方法做,时间复杂度是
阅读全文
摘要:上部分链接:数论分块(一) 建议没看过数论分块(一)的优先去看第一部分,第二部分题目难度较高。 P1829 [国家集训队] Crash的数字表格 / JZPTAB 给定 \(n, m\),求: \[\sum_{i = 1}^n\sum_{j = 1}^m\operatorname{lcm}(i, j
阅读全文
摘要:前言 注:该文章不定期更新。 Tips: 建议阅读文章后自行推导,否则难以掌握。 介绍 类欧几里得算法是用 \(O(\log n)\) 的时间复杂度求解形似于 \(f(a,b,c,n)=\sum\limits_{i=0}^n\lfloor\frac{ai+b}{c}\rfloor\) 的函数的值的一
阅读全文
摘要:数论分块 数论分块是为了解决 \(f(n) = \sum\limits_{i = 1}^{n}\left\lfloor\frac{n}{i}\right\rfloor g(i)\) 形式求值的一种算法,他可以在 \(O(\sqrt{n})\) 的时间内求出上述和式。 我们可以发现 \(\left\l
阅读全文
摘要:前置知识 狄利克雷卷积,数论分块 杜教筛 求积性函数 \(f(n)\) 的前缀和,即 \(\sum\limits_{i = 1}^{n} f(i)\)。 考虑狄利克雷卷积能否帮助我们优化。 \[\begin{aligned} \sum_{i = 1}^{n}(f * g)(i) &= \sum_{i
阅读全文