摘要:
LCA,即LeastCommonAncestor,最近公共祖先.在上图中,2和3的LCA是1,3和4的LCA也是1.求LCA的算法怎么样的呢?先来看张图.欧拉序列F:1 2 5 2 6 2 1 3 1 4 1深度序列B:0 1 2 1 2 1 0 1 0 1 0POS:1 2 8 10 3 5欧拉序列即对树进行DFS过程中得到的DFS序列,深度是欧拉序列中对应的各个节点在树中的深度,POS是各个节点在DFS序列中第一次出现的位置.如3第一次出现是在欧拉序列的第8个,所以POS(3)=8.根据DFS的性质,对于两结点u、v,从pos(u)遍历到pos(v)的过程中经过LCA(u, v)有且仅有一 阅读全文
摘要:
欧拉函数在OI中是个非常重要的东西,不知道的话会吃大亏的.欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函数.对φ(N)的值,我们可以通俗地理解为小于N且与N互质的数的个数.欧拉函数的一些性质:1.欧拉函数是积性函数,但不是完全积性函数,即φ(mn)=φ(n)*φ(m)只在(n,m)=1时成立.2.对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn. φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn).3.除了N=2,φ(N)都是偶数.4.设N为正整数,∑φ(d)=N (d|N).根据性质2,我们可以在O(sqrt(n))的时间内求出一个数的欧拉 阅读全文
摘要:
1.素数判定普通的算法即O(sqrt(N))的试除法,高级些的Miller_Rabin素数测试.但NOIP似乎用不着Miller_Rabin,试除法又非常简单,就不在这里写了.2.求素数筛法是比较常见的方法.埃拉托色尼斯筛法可以对付一般的题目了.但我想写写线性筛法.先给code:const MAX=1000000;var Prime:array[0..MAX] of longint; v:array[0..MAX] of boolean; procedure GetPrime; var i,j,tmp,size:longint; begin ... 阅读全文