ACM常用定理

定理1.費馬小定理

費馬小定理是數論中的一個重要定理,其內容爲: 假如p是質數,且gcd(a,p)=1,那麼 a^(p-1) ≡1(mod p) 假如p是質數,且a,p互質,那麼 a的(p-1)次方除以p的餘數恆等於1。

定理2.模乘法得逆

:對於兩個整數a,b,a/b是整數,且a和b除以mod得餘數分別爲aa,bb,則a/b除以mod得餘數爲(aa*bb^(-1))%mod,其中b^(-1)是b的逆.

(當(a*b)%mod=1是,我們稱a和b互爲乘法的逆,即a=b^(-1),b=a^(-1))

相關代碼:

  1. void gcd(LL a,LL b,LL &d,LL &x,LL &y)//拓展歐幾里得定理,求ax+by=gcd(a,b)的一組解  
  2. {  
  3.     if(!b){d=a;x=1;y=0;}  
  4.     else{gcd(b,a%b,d,y,x);y-=x*(a/b);}  
  5. }  
  6. LL inv(LL a,LL n)//求得a在模n條件下的逆  
  7. {  
  8.    LL d,x,y;  
  9.    gcd(a,n,d,x,y);  
  10.    return d==1?(x+n)%n:-1;  
  11. }  

推論1:mod爲質數,由費馬小定理得b^(mod-1)%mod=1-->(b*b^(mod-2))%mod=-1,所以b的逆=b^(mod-2).

對於整數a,b(b<mod),且a/b是整數,則a/b除以mod得餘數是(a%mod*b^(-1))%mod-->(a%mod*b^(mod-2))%mod.可用於求分數形式整數的模


定理3.SG定理

組合遊戲:一個狀態是必敗狀態當且僅當它的所有後繼都是必敗狀態;一個狀態是必勝條件當且僅當它至少有一個後繼是必敗狀態

    組合遊戲的和。假設有k個組合遊戲G1,G2,...Gk,可以定義一個新遊戲,在每個回合中,
當前遊戲可以任選一個子遊戲Gi進行一次合法操作,而讓其他遊戲的局面保持不變,不鞥操作的遊戲者輸。
這個新遊戲稱爲G1,G2,...,G3的和


    SG函數和SG定理。對於任意狀態x,定義SG(x)=mex(S),其中S是x的後繼狀態的SG函數值集合,mex(S)表示不在S內的最小非負
整數。SG(x)當且僅當x爲必敗狀態.遊戲和的SG函數SG函數等於各子游戲SG函數的Nim和。


    Bouton定理:狀態(x1,x2,x3)爲必敗狀態當且僅當x1^x2^x3=0,稱爲Nim和。可看做SG定理在Nim遊戲中的運用

例子:UVALive/LA 5059+UVA 10561+UVA 12293


定理4.pick定理

給定一個頂點均爲整點(即座標爲整數的點)的簡單多邊形,其面積A和內部格點數目I與邊上格點數目B的關係式:A=I+B/2-1.


定理5.Lucas定理

    A、B是非負整數,p是質數。AB寫成p進制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。
    則組合數C(A,B)與C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  mod p同餘
    即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 

例子:poj 3146

定理6.歐拉定理

a^(phi(n))≡1(mod n) (a,n互質), phi(n)是歐拉函數,表示不超過n的且與n互質的數的個數。

例子:hdu3307


定理7.五邊形數定理



可用於生成函數(母函數):

(1-x-x^2+x^5+x^7-x^12...)(1+p(1)x+p(2)x^2+p(3)x^3)=1;(整數劃分的生成函數爲1/∏(1-x^i))

得到p(n)=p(n-1)+p(n-2)-p(n-5)-p(n-7)+...



定理8.柯尼希定理(最小頂點覆蓋,二分圖匹配,匈牙利算法)

資料源自:http://zh.wikipedia.org/wiki/%E8%A6%86%E7%9B%96_(%E5%9B%BE%E8%AE%BA)

http://baike.baidu.com/link?url=5gWVO-A8T_AUGw21_P85QiijE7T934ecsDq-50f8SMh02Vpd1tIuTSgjD4cS922u

     圖G頂點覆蓋是一個頂點集合V,使得G中的每一條邊都接觸V中的至少一個頂點。我們稱集合V覆蓋了G的邊。最小頂點覆蓋是用最少的頂點來覆蓋所有的邊。頂點覆蓋數\tau是最小頂點覆蓋的大小。
     二分圖又稱作二部圖,是圖論中的一種特殊模型。 設G=(V,E)是一個無向圖,如果頂點V可分割爲兩個互不相交的子集(A,B),並且圖中的每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i ∈A,j ∈ B),則稱圖G爲一個二分圖。
     無向圖G爲二分圖的充分必要條件是,G至少有兩個頂點,且其所有迴路的長度均爲偶數。
     匈牙利算法:它是一種用增廣路徑求二分圖最大匹配的算法

      http://baike.baidu.com/link?url=1U3pNCTlWDbUG1A-YexAqNo_D_1rpFEKBO7IBcjq7d3_MY7MwhCAxeF5MnXW4O-5

  1. int find(int cur)  //判斷增廣路是否存在  
  2. {    
  3.     int i, k;    
  4.     for(i = 0; i < map[cur].size(); i++)    
  5.     {    
  6.         k = map[cur][i];    
  7.         if(!flag[k])    
  8.         {    
  9.             flag[k] = true;    
  10.             if(pre[k] == -1 || find(pre[k]))    
  11.             {    
  12.                 pre[k] = cur;    
  13.                 return 1;    
  14.             }    
  15.         }    
  16.     }    
  17.     return 0;    
  18. }   

  1. for(i = 0; i < n; i++)    
  2.         {    
  3.             memset(flag, falsesizeof(flag));    
  4.             sum += find(i);    
  5.         }    

sum就是最大匹配值。

柯尼希定理是這樣一個定理:二分圖最小點覆蓋的點數=最大匹配數。

poj 3041;poj1422,2239,1422,1325,1719,2594,2195,2446,1904,3342,3216,3020

一個PXP的有向圖中,路徑覆蓋就是在圖中找一些路徑,使之覆蓋了圖中的所有頂點,
且任何一個頂點有且只有一條路徑與之關聯;(如果把這些路徑中的每條路徑從它的起始點走到它的終點,
那麼恰好可以經過圖中的每個頂點一次且僅一次);如果不考慮圖中存在迴路,那麼每條路徑就是一個弱連通子集

最小路徑覆蓋的邊數=頂點數n-最大匹配數

最大獨立集:在二分圖G中,點集合M,M中的各個點都不相連,則稱M爲G的獨立集。M中點個數最多的稱爲最大獨立集

最大獨立集=最小路徑覆蓋=n-最大匹配數

例:(1,3),(3,4),(2,3),對於無向圖,可以得到兩種二分圖:

1.(1-3,4-3,2-3),求得最大匹配爲m=1,即爲最小頂點覆蓋數,最大獨立集=n-m

2.(1-3,3-1,4-3,3-4,2-3,3-2),求得最大匹配m=2,即爲最小頂點覆蓋數*2,最大獨立集=n-m/2

有向圖:

(1-3,2-3,3-4),最大匹配爲m=2,最小路徑覆蓋=n-m;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章