数学部分简单总结
總的感受:
難...... 數(shù)學這種東西真的很考驗一個人,我是典型的被題虐的。所以這里只包括了一些簡單數(shù)學知識。
簡單數(shù)論:
一、質數(shù)
1、單個質數(shù)的判定:① 試除法 ② Miller-Rabin
Miller-Rabin的基本思想:隨機+費馬小定理+二次探測定理。
[有興趣的戳這里(在文章中間有提到)]
Miller-Rabin :
IL int Miller_Rabin(int x) {if (x<2) return 0;if (x==2||x==3||x==5||x==7) return 1;RG int i,j,k=x-1,cnt=0,now;while (!(k&1)) k>>=1,++cnt;//先把所有的2給提出來,然后在一個一個乘上去,這樣比直接做快for (i=1;i<=4;++i) {if (Pow(prm[i],x-1,x)!=1) return 0; //費馬小定理now=Pow(prm[i],k,x);if (now==1||now==x-1) continue;now=now*now%x;for (j=1;j<=cnt;++j,now=now*now%x)if (now==x-1) break;if (j>cnt) return 0;}return 1; }/jike2、質數(shù)的篩法 :① 歐拉篩 ② 線性篩
線性篩基本思想:確定每個數(shù)產生的唯一方式
只給當前數(shù)乘上一個質因子,且使得這個質因子是生成的合數(shù)的最小質因子,這樣保證了合數(shù)質因子從大到小累積
線性篩 :
RG int n,m,cnt=0,i,j;n=gi(),m=gi();for (i=2;i<=n;++i) {if (!minpr[i]) // 數(shù)i的最小質因子pr[i]=1,minpr[i]=i,prime[++cnt]=i;for (j=1;j<=cnt&&prime[j]<=minpr[i]&&prime[j]*i<=n;++j)minpr[i*prime[j]]=prime[j];}3、質因數(shù)分解 :① 試除法 ② Pollard-Rho-大數(shù)質因數(shù)分解
Pollard-Rho的講解戳上面那個鏈接。
關于Pollard-Rho的小優(yōu)化:
① 每次算出一個差x后,不單單只看是否x|N,而是看是否gcd(x,N)>1。
② 在①的基礎上,不需要每次都算gcd,而可以每127(其他數(shù)應該也行)個x累乘起來,和N算一次gcd。
對Miller-Rabin的優(yōu)化:對于質數(shù)選取選擇:2,3,7,61,24251據(jù)說可以保證在2的14次方,只有46856248255981判不掉。
這樣可以篩出N的每一個因子,然后用Miller-Rabin判斷是否為質數(shù)即可。
IL int Pollard_rho(int x,int c) {RG int i,j,Las,now=0,res,gcd;for (i=2;;i<<=1) {for (j=1,Las=now,res=1;j<=i;++j) {now=(qm(now,now,x)+c)%x,res=qm(res,abc(now-Las),x);if (!(i%137)) {gcd=getgcd(x,res);if (gcd>1) return gcd;} if (now==Las) return x;}gcd=getgcd(x,res);if (gcd>1) return gcd;} }IL void Find(int x,int c) {if (x<2||x<=ans) return;if (Miller_Rabin(x)) {ans=max(ans,x);return;} RG int p=x;while (p==x) p=Pollard_rho(x,c--);while (x%p==0) x/=p;Find(p,c),Find(x,c); }題目:
Luogu Pollard-Rho 模板題
二、約數(shù)
1、算術基本定理及其推論:
\[ N=\prod^{cnt}_{i=1}Pi^{ci}算術基本定理的推論(N的正約數(shù)和): \]
算術基本定理的推論(N的正約數(shù)和):
\[ \prod^{cnt}_{i=1}({\sum^{ci}_{j=0}(Pi)^{j}}) \]
2、N的正約數(shù)集合的求法:試除法
3、1~N每個數(shù)的正約數(shù)集合:倍數(shù)法
4、最大公約數(shù):歐幾里得算法
5、互質與歐拉函數(shù):
\[ \phi(n)=n*\prod_{質數(shù)p|n}{\frac{p-1}{p}} \]
故歐拉函數(shù)的計算可在質因數(shù)分解的過程中求得。
歐拉函數(shù)的性質:
① 對于任意n>1 ,1~n中與n互質的數(shù)的和為
\[ n*\phi(n)/2 \]
② 若a,b互質,則有:
\[ \phi(ab)=\phi(a)*\phi(b) \]
實際上,一個函數(shù)f,當a,b互質時,存在
\[ f(ab)=f(a)*f(b) \]
那么f為積性函數(shù)。本文不做深究。
題目:
① 反素數(shù) Sol
② 余數(shù)之和 Sol
③ Hankson的趣味題 Sol
三、同余
1、費馬小定理:若P是質數(shù),那么對于任意整數(shù)a,有:
\[ a^P\equiv a\mod P \]
2、歐拉定理:若正整數(shù)a,n互質,則:
\[ a^{\phi(n)}\equiv1\mod n \]
3、歐拉定理的推論:若正整數(shù)a,n互質,則對于任意整數(shù)b,有:
\[ a^b\equiv a^{b\mod{\phi(n)}}\mod n \]
4、裴蜀定理:對于任意整數(shù)a,b,存在一對整數(shù)x,y,滿足:
\[ a*x+b*y=\gcd{(a,b)} \]
擴展歐幾里得算法即基于上述定理。
推廣:對于更加一般的方程
\[ a*x+b*y=c \]
? 它有解,當且僅當:
\[ \gcd{(a,b)}\mid c \]
5、乘法逆元的求法(記為inv):
① 費馬小定理(若模數(shù)P為質數(shù))。
② 擴展歐幾里得算法。
③ 線性遞推逆元:
\[ inv[i]=(P-P/i)*inv[P\ mod\ i] \]
6、線性同余方程:CRT & ExCRT
? 有興趣的戳這里
7、高次同余方程:BSGS & ExBSGS
有興趣的戳這里
題目:
① The Luckiest Number Sol
② Sumdiv Sol
③ ExCRT模板
④ BSGS模板
⑤ ExBSGS模板
線性代數(shù) & 組合數(shù)學:
四、矩陣乘法
主要用于加速遞推。
需要特別留心的是關于類似floyd的可行矩陣的遞推,可能會有點抽象。
直接上題吧:
① 石頭游戲 Sol
② 數(shù)學作業(yè) Sol
③ 花園 Sol
五、高斯消元與線性空間
1、Gauss_Jordan消元法(無回帶操作)
IL void Gauss_Jordan() {RG int i,j,k,l;for(i=1;i<=n;++i) {for(j=cnt+1,l=0;j<=n;++j)if(fabs(a[j][i])>eps) {l=j;break;}if(!l) continue;for(j=i,++cnt;j<=n+1;++j) swap(a[cnt][j],a[l][j]);for(j=i+1;j<=n+1;++j) a[cnt][j]/=a[cnt][i];a[cnt][i]=1.0;for(j=1;j<=n;++j) {if(j==cnt) continue;RG DB res=a[j][i]/a[cnt][i];for(k=i;k<=n+1;++k) a[j][k]-=res*a[cnt][k];} }for(i=cnt+1;i<=n;++i)if(fabs(a[i][n+1])>eps) {puts("-1");exit(0);}if(cnt<n) {puts("0");exit(0);} } // 無解輸出-1 無窮解輸出02、線性基
? 有興趣的戳這里
題目:
① 球形空間產生器
② 開關問題
③ 線性基模板
④ 裝備購買 Sol
⑤ XOR Sol
六、組合計數(shù)
1、加法原理 & 乘法原理
? 不多說。。
2、排列 & 組合:
? 從n個不同元素中選m個元素排成一列,產生的不同排列數(shù)量為:
\[ P^m_n=\frac{n!}{(n-m)!} \]
? 從n個不同元素中選m個元素組成一個集合,產生的不同集合數(shù)量為:
\[ C^m_n=\frac{n!}{(n-m)!*m!} \]
3、二項式定理:
\[ (a+b)^y=\sum_{i=0}^ya^i*b^{n-i}*C^i_n \]
4、多重集的排列 & 組合:
? 設多重集S={c1·a1,c2·a2……cN·aN},S的全排列個數(shù)為:
\[ P=\frac{(\sum^N_{i=1}{n_i})!}{\prod^N_{i=1}(n_i)!} \]
? 設多重集S={c1·a1,c2·a2……cN·aN},則從中選出r個元素組成一個多重集(此處僅考慮r<=ni的情況)的數(shù)量為:
\[ C^{N-1}_{N+r-1} \]
? 對于r更加一般的情況,需要用到容斥,此處不作深究。
5、Lucas定理:
? 若P為質數(shù),則對于任意整數(shù)1≤m≤n,有:
\[ C^m_n\equiv C^{m\ mod\ P}_{n\ mod\ P}\ (mod\ P) \]
? 實現(xiàn)的話遞歸即可。
? 推廣:Exlucas,可以處理P為任意數(shù)的情況。
? 有興趣的戳這里
題目:
① Counting Swaps
② 古代豬文
轉載于:https://www.cnblogs.com/Bhllx/p/10652038.html
總結
- 上一篇: JavaScript学习备忘
- 下一篇: LDAP协议