之前学习了欧拉函数以及几个性质,知道了“欧拉函数 $\varphi(n)$ 是小于或等于 $n$ 的正整数中与 $n$ 互质的数的数目。”对于求解单个的 $\varphi(x)$ 很简单,直接枚举就可以了;但是如果要你在 $\Theta (N)$ 时间复杂度内求 $\varphi(i)$ 的值($i=1,2,\dots,n$),怎么求呢?自然是用欧拉筛了~
欧拉筛的应用:在线性时间(O(N))内求出 1~N 的欧拉函数
埃氏筛法(朴素筛法及其优化)与欧拉筛(线性筛法)略解
在之前我们学过的最朴素的筛法就是埃氏筛法(埃拉托斯特尼筛法),它的复杂度是 $\Theta (N \log_2(N))$。其实这个朴素的筛法可以进行常数上的优化。还有一种更炫酷的筛法:欧拉筛,即线性筛法,时间复杂度为 $\Theta (N)$。
以 O(N) 线性时间复杂度递推逆元的方法
利用容斥原理求解 [a,b] 区间中与 n 互质的数字个数
先看这道丧心病狂的题目:HDU 4135 Co-prime。题目大意就是,有 $T$ 组询问,每组询问给你三个数:$a, b, c$,问你闭区间 $[a,b]$ 中有多少个数字与 $n$ 互质。数据范围是:$1 \leqslant A \leqslant B \leqslant 10^{15}$,$1 \leqslant N \leqslant 10^5$。
乍一看毫无头绪,仿佛怎么做都会超时……其实用容斥的想法就很容易了~
Uva 1599 / POJ 3967 Ideal Path:不一样的 BFS
CodeForces 274D Lovely Matrix:“冗余点” 建边 + 拓扑
题目链接:CodeForces 274D Lovely Matrix
今天看CF官方题解的时候学来一句话,暴力解法称为 “The naïve solution” 😂
差分约束系统的应用
如果告诉你在一个三角形中,$B-A \leqslant c, C-B \leqslant a, C-A \leqslant b$,怎么求 $C-A$ 的最大值呢?通过yy观察可以发现,$C-A$ 的最大值是 $min(a+c,b)$。这个答案如何得出?将这个三角形内的约束条件推广到更多约束条件呢?
Tarjan 算法求解无向图的割点与割边
在一幅无向图中,如果删除了一个点,导致图分成了两个或多个联通块(强连通分量),那么这个点就是割点。怎么求这样的点呢?最原始暴力的方法就是每次枚举一个点,删除,跑一遍最短路。今天我们可以用更高级的 Tarjan 算法 $ \displaystyle \Theta (N)$ 求解。
ZOJ 3649 Social Net:最大生成树+树上倍增 DP
CodeForces 294E Shaass the Great:极其变态的树形 DP 与思维题
题目链接:CodeForces 294E Shaass the Great
这题真的太麻烦了……