【OI備忘錄】trick彙總帖

OI中的那些實用的小trick

在OI中,咱們時常會用到一些小技巧,不管是代碼方面仍是數學方面抑或是卡常,都有不少不錯的小技巧。spa

鄙人不才,每每沒辦法想出來,因而就有了這篇彙總帖~cdn

若有疏漏,還請dalao指教!遞歸


  1. 結論:\(gcd(F[n],F[m])=F[gcd(n,m)]\),其中F爲斐波那契數列

    \(\quad\)證實:

      咱們設\(n<m\)\(F[n]=a\)\(F[n+1]=b\)數學

      則\(F[n+2]=a+b,F[n+3]=a+2b,…F[m]=F[m-n-1]a+F[m-n]b\)class

      \(\because \quad F[n]=a,F[n+1]=b,F[m]=F[m-n-1]a+F[m-n]b\)技巧

      \(\therefore \quad F[m]=F[m-n-1]*F[n]+F[m-n]*F[n+1]\)gc

      又\(\because \quad gcd(F[n],F[m])=gcd(F[n],F[m-n-1]\)trick

      而\(F[n]|F[m-n-1]\)math

      \(\therefore \quad gcd(F[n],F[m])=gcd(F[n],F[m-n]\)gcd

      引理:\(gcd(F[n],F[n+1])=1\)

       證:由歐幾里德定理知

         \(gcd(F[n],F[n+1])=gcd(F[n],F[n+1]-F[n])=gcd(F[n],F[n-1])\)

                \(=gcd(F[n-2],F[n-1])\)

                \(…………\)

                \(=gcd(F[1],F[2])=1\)

        $ \therefore \quad gcd(F[n],F[n+1])=1$

      由引理知:

      \(F[n],F[n+1]\)互質

      而\(gcd(F[n],F[m])=gcd(F[n],F[m-n]*F[n+1])\)

      \(\therefore \quad gcd(F[n],F[m])=gcd(F[n],F[m-n])\)

      即\(gcd(F[n],F[m])=gcd(F[n],F[m\;mod\;n])\)

      繼續遞歸,將\(m1=m\;mod\;n\),則\(gcd(F[n],F[m])=gcd(F[n\;mod\;m1],F[m1])\)

      \(……\)

      不難發現,整個遞歸過程其實就是在求解\(gcd(n,m)\)

      最後遞歸到出現\(F[0]\)時,此時的\(F[n]\)就是所求gcd。

      \(\therefore \quad gcd(F[n],F[m])=F[gcd(n,m)]\)

  2. 分層圖

    \(\quad\)分層圖是一種常見的圖論技巧。經常使用於圖中存在某些限制的狀況。具體而言,就是建圖時將圖按照不一樣的限制條件分層幾層,其間有一些有向邊鏈接,這些有向邊通常表明着當前限制條件的狀態的改變。這個技巧能夠省掉不少特判或者別的的麻煩事,你只用在建好的圖上作通常操做就能夠了。

不間斷更新~

相關文章
相關標籤/搜索