1. 程式人生 > >OI數學 簡單學習筆記

OI數學 簡單學習筆記

注:該學習筆記參考了lxh daolao的課件和網上其他大佬的部落格(然後加上了蒟蒻的yy),在此表示深深的感激!

基本上只是整理了一下框架,具體的學習給出了個人認為比較好的部落格的連結。


PART1 數論部分

最大公約數

對於正整數x,y,最大的能同時整除它們的數稱為最大公約數

常用的:\(lcm(x,y)=xy\gcd(x,y)\)

裴蜀定理

定理:對於方程\(ax+by=c\),其存在解的充要條件是\(gcd(a,b)|c\),可以拓展到n元的方程。

證明的話應該自己yy一下還是很容易(顯然可得),不過要是想要嚴謹證明還是去百度吧qwq

擴充套件歐幾里得定理

首先我們都知道\(gcd(a,b)=gcd(b,a \%b)\)

吧。
我們在輾轉相除的同時可以遞迴地求出\(ax+by=gcd(a,b)\)的解。當遞迴到b=0的時候,顯然有解\(x=1,y=0\)。如果b!=0,我們可以遞迴的求出\(bx'+(a\%b)y'=gcd(a,b)\)的解。
\[bx'+(a\%b)y'=bx'+(a-\lfloor \frac{a}{b}\rfloor\times b)y'=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y') \]
所以\(x=x',y=(x'- \lfloor \frac{a}{b} \rfloor y')\)
時間複雜度:O(log n)

逆元

定義:

若有\(xy=1\pmod p\)

,則稱y為x模p意義下的乘法逆元

計算方法:

轉換為方程:\(xy-kp=1\),用拓展歐幾里得演算法就可以了。當然費馬小定理也可以,只不過時間複雜度上稍微遜色一些。(還有一種線性的,不過我不會)
補充:費馬小定理:若p為質數,對於任意\(1<=a<p,a^{p-1}\equiv 1 \pmod p\),那麼在p為質數的時候\(a^{p-2}就是a的逆元\)

積性函式

對於任意互質整數a,b,存在\(f(ab)=f(a)f(b)\)性質的數論函式。
完全積性函式則是沒有互質的限制。

常見的積性函式舉例:

  • φ(n) -尤拉函式
  • μ(n) -莫比烏斯函式,關於非平方數的質因子數目
  • gcd(n,k) -最大公因子,當k固定的情況
  • d(n) -n的正因子數目
  • σ(n) -n的所有正因子之和

尤拉函式

定義:\(\phi(n)\)定義為1-n內與n互質的數的個數
\(\phi(x)=x\prod_1^n(1- \frac{1}{p_i}),其中x是正整數,\)p_i\(是x的質因數。 這個的計算程式十分好寫。 特別的,尤拉函式是積性函式,即\)\phi(mn)=\phi(m)\phi(n)$。
證明比較顯然。

尤拉篩(線性篩)

在埃氏篩法的基礎上,讓每個合數只被它的最小質因子篩選一次,以達到不重複的目的。
程式碼直接去看模板吧,沒什麼好說的。

尤拉定理&擴充套件尤拉定理

\(a,m\)互質,則有\[a^{\phi(m)}\equiv1\pmod m\]
\(a,m\)不互質,當\[b\ge\phi(m)的時候,a^b\equiv a^{b\%\phi(m)+\phi(m)}\pmod m\]
注意如果\(b<\phi(m)\)的時候,上式不一定成立。
證明請看這篇部落格 戳我
什麼時候休閒娛樂的話我會寫一份自己的證明的(咕咕咕qwqwq)

Miller-Rabin素性測試

因為當p為質數且\(1<=a<p\)時,\(a^{p-1}\equiv 1\pmod p\)(尤拉定理)
那麼當\(1\le a<p\)\(a^{p-1}\equiv 1\pmod p\)時,p是否一定是質數呢?
當然不是啦!但是我們發現大部分合數都不滿足這個性質。
所以我們的素數判定演算法出世啦!隨機幾個a,判斷\(a^{p-1}\mod p\)是否為1——不過這個正確性有點玄學,因為有些合數對任意的a的也都滿足這個性質emmmmm,所以需要對演算法進行改進。
這樣就引出了我們的二次探測定理——
對於任意質數p,如果\(x^2\equiv1\pmod p\),那麼我們有\(x\equiv\pm1\pmod p\)
證明:由\(x^2 \equiv1\pmod p\),可以知道\((x+1)(x-1)\equiv0\pmod p\)。那麼\((x+1)和(x-1)\)之中必定有至少一個是p的倍數。又由於p是質數,所以得證。
那麼我們就知道怎麼做了,在判定素數的時候如果指數p-1是偶數,我們可以繼續判斷\(a^{\frac{p-1}{2}}\)——如果\(a\equiv\pm 1\pmod p\)的條件不滿足,可以直接判斷此數為合數。如果\(a\equiv -1\pmod p\),就不繼續判斷,如果\(a\equiv 1\pmod p\),我們不能判斷這個數是不是素數,就要繼續判斷\(a^{\frac{p-1}{2}}\)了。
所以我們把p-1的2的次冪分解出來,求出所有的\(a^{}\frac{p-1}{2^i}\)逐一檢查。
演算法時間複雜度是log的。
加上這個玄學改進,如果我們隨機的a夠多,幾乎就卡不掉了。隨機k個判斷錯誤的概率僅有\(\frac{1}{4^k}\)

Pollard-Rho大整數質因數分解演算法

聽說沒有什麼大用qwq???蒟蒻選擇戰略性放棄

中國剩餘定理(CRT)

exCRT

BSGS

求解同餘方程:\(a^x \equiv b (mod p)\)
\(0<=a,b<p<=1e9\),p為質數5

BSGS

拓展BSGS

斐波那契數列迴圈節

原根

階的定義:

設a,p是整數,a和p互素,那麼:
使\(a^n\equiv1\pmod p\)成立的最小正整數n叫做a模p的階。

原根的定義:

原根,是一個數學符號。設m是正整數,a是整數,若a模m的階等於\(\phi\)(m),則稱a為模m的一個原根。

原根的性質:

  • 對於正整數x,只有\(x=2,4,p^a,2\times p^a\),p為奇素數,a>=1的時候才存在原根。
  • \(a^1,a^2,a^3,...,a^{\phi(m)}\)在模p的時候都不相同(可以推得它構成了一個長度為\(\phi(m)\)的迴圈節)
  • 對於m的原根g,滿足gi(mod p)(0<=i<=p-2)與1到p-1一一對應.
  • 若m有原根,那麼它的原根個數為\(\phi(\phi(m))\)。(具體證明蒟蒻不是特別會qwq,上課沒聽懂)

對於m的情況最為常用。在這種情況下,0~m-1中每一個數都可以對應一個\(a^x\),這就相當於模意義下取對數(離散對數)。我們可以化乘為加。或者快速地計算一個數的若干次冪。

判斷一個數a是不是m的原根

即判斷是否不存在\(1<=x<\phi(m)\)。由於\(a^{\phi(m)}\equiv \pmod m\),我們只需要判斷x為\(\phi(m)\)的因數的情況就可以了,時間複雜度\(O(sqrt(m)log m)\)
實際上,對於\(\phi(m)\)的每種質因數p_i判斷\(\frac{\phi(m)}{p_i}\)也是等價的。
求出原根後,用暴力或者BSGS就可以求出來一個數的對數。
ps.一個數的原根是很多的,我們可以從小到大判斷,或者隨機化選取數字判斷。

二次剩餘


PART2 組合數學部分


PART3 線性代數部分

向量

n維向量可以看成n個數組成的n元組(或者說n個元素的陣列)
幾何意義:表示n維空間中的方向和長度

矩陣

\(n\times m\)的矩陣相當於一個\(n\times m\)的二維陣列


練習題

BZOJ3667 題解戳我