NOIp數學
阿新 • • 發佈:2018-11-07
NOIp 數學基礎
目錄
- 素數判斷
- gcd/exgcd
- 逆元
- crt(中國剩餘定理)
- 線性代數
-快速冪- 矩陣相關
- 高斯消元
- 組合數學
- 卡特蘭數
- 排列組合
- Lucas定理
- 二項式定理
- 康託展開
- 容斥原理
- 進位制相關
- 高精度運算
一、素數判斷
1、樸素的埃氏篩法
bool isp[MAXN]; int p[MAXN],tot; void Prime(){ for(int i=0;i<=n;i++) isp[i]=1; isp[0]=isp[1]=0; for(int i=2;i<=n;i++){ if(isp[i]) p[++tot]=i; for(int j=i*2;j<=n;j+=i) isp[j]=0; } }
可以發現一個合數被判斷的次數非常多,所以有如下優化:
2、尤拉篩(線性篩素數)
bool notp[MAXN]; int p[MAXN],tot; void Prime(){ memset(notp,0,sizeof notp); notp[0]=notp[1]=1; for(int i=2;i<=n;i++){ if(!notp[i]) p[++tot]=i; for(int j=1;j<=tot;j++){ if(p[j]*i>n)break; notp[p[j]*i]=1; if(i%p[j]==0)break; } } }
保證了每個合數只被它最小的質因數篩去,提高了時間效率。
二、gcd、exgcd
1、
表示 與 的最大公因數
表示 與 的最小公倍數
性質
①
證明:設
設
同理可證,
`倒推可知,
②
證明:設
性質②也可通過唯一分解定理證明。
int Gcd(int a, int b){
return b==0?a:gcd(b,a%b);
}
int Lcm(int a, int b){
return(int)((long long)a*b/gcd(a,b));
}
2.
引理:貝祖定理(裴蜀定理)
對於任意整數 和它們的最大公約數 ,關於 的方程 當且僅當 是 的倍數時有整數解
證明(來自這位dalao):
當 時, ,顯然存在一對整數解
若
設