I and OI
Past...
摘要: 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)有且仅有一 阅读全文
posted @ 2011-08-09 15:13 exponent 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数在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))的时间内求出一个数的欧拉 阅读全文
posted @ 2011-08-09 11:04 exponent 阅读(7632) 评论(0) 推荐(0) 编辑
摘要: 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 ... 阅读全文
posted @ 2011-08-09 10:38 exponent 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 给出一个线性同余方程组 x≡b1(mod m1) x≡b2(mod m2) x≡b3(mod m3) ...... x≡bn(mod mn)其中m1,m2,...,mn两两互素,求x.令M=m1*m2*m3*...*mn.Mi=M/mi.Mi'Mi≡1 (mod mi)用扩展欧几里得算法求出Mi关于mi的乘法逆元Mi'.x=∑Mi'Mibi mod Mcode:var p,q,r:array[0..10000] of longint; n,i,m,xx,yy,ans:longint; function exgcd(a,b:longint; var x,y:longint 阅读全文
posted @ 2011-08-09 10:17 exponent 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 扩展欧几里得算法是用来求解形如ax+by=c的方程的.令d=gcd(a,b),若d不整除c则方程无解.我们先考虑这个方程:ax+by=d∵gcd(a,b)=gcd(b,a mod b)∴d=ax+by=bx'+(a mod b)y'=bx'+(a-[a/b]b)y'=ay'+b(x'-[a/b]y')令x=y' y=x'-[a/b]y'当b=0时,d=a=ax+by得x=1,y=0.求出ax+by=d的一组解x',y'后,由(c/d)ax'+(c/d)by'=(c/d)d即可得到ax 阅读全文
posted @ 2011-08-09 10:11 exponent 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 定理1:如果a,b,m,n是整数,且c|a,c|b,则c|(ma+nb).证明:令a=ce,b=cf,则ma+nb=emc+fnc=c(em+fn).得证形如ax+by=c的方程,其中a,b,c为整数,被称为关于两个变量的线性丢番图方程.定理2:设a,b是整数且d=(a,b),如果d|c,那么存在无穷多个整数解,否则没有整数解.证明:由定理1,知d|(ax+by).因此若d不整除c,则方程无整数解.形如ax≡b (mod m)的同余式称为一元线性同余方程.定理3:设a,b和m是整数,m>0,(a,m)=d,若d|b则ax≡b (mod m)恰有d个模m不同余的解,否则无整数解.证明:ax 阅读全文
posted @ 2011-08-09 10:06 exponent 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 证明:a可以表示成a=kb+r,则r=a mod b 假设d是a,b的一个公约数,则有 d|a,d|b,而r=a-kb,因此d|r 因此d也是(b,a mod b)的公约数 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证摘自百度百科:http://baike.baidu.com/view/1241014.htmcode: function gcd(a,b:longint):longint; begin if b... 阅读全文
posted @ 2011-08-09 09:37 exponent 阅读(210) 评论(0) 推荐(0) 编辑