noip2017考前基础复习——数论数学
·最大公約數 gcd
輾轉相除法 ?gcd(a,b)=gcd(b,a%b)
1 int gcd(int x,int y){ 2 if(y==0) return x; 3 return gcd(y,x%y); 4 }效率O(logn)
?
·最小公倍數 lcm
可由最大公約數推來 lcm(a,b)=a*b/gcd(a,b)
1 int lcm(int x,int y){ 2 int p=gcd(x,y); 3 return a*b/p; 4 }效率O(logn)
?
·擴展歐幾里得 extgcd
求ax+by=gcd(a,b)的整數對(x,y)
也可由gcd推過來
推導過程:
ax+by=gcd(a,b)=gcd(b,a%b)
假設求出 bx'+(a%b)y'=gcd(b,a%b)
那么整理可得 bx'+(a-(a/b)*b)y'=gcd(b,a%b)
ay'+b(x'-(a/b)*y')=gcd(b,a%b)=gcd(a,b)
故 x=y' ?y=x'-(a/b)*y'
1 int extgcd(int a,int b,int &x,int &y){ //返回值為gcd(a,b) 2 if(b==0) { 3 x=1;y=0; 4 return a; 5 } 6 int d=extgcd(b,a%b,y,x); 7 y-=(a/b)*x; 8 return d; 9 }可用于求同余方程、逆元
效率O(logn)
?
·素數篩
線性篩法,很好理解
由于每個合數都只會被篩掉一次,復雜度O(n)
1 void Get_Prime(int n){ 2 p[0]=p[1]=0; 3 cnt=0; 4 for(int i=2;i<=n;i++) p[i]=1; //先標記2~n都為素數 5 for(int i=2;i<=n;i++){ 6 if(p[i]) prime[++cnt]=i; //i為素數 7 for(int j=1;j<=cnt && (long long)i*prime[j]<=n;j++){ 8 p[i*prime[j]]=1; //每個合數都只被自己最小質因子篩掉 9 if(i%prime[j]==0) break; 10 } 11 } 12 }?
·歐拉函數 phi
求小于n與n互素的數的個數
phi[i]=i*(1-1/p1)*(1-1/p2)*(1-1/p3)…… ?其中p1,p2,p3為i的質因數
可以在線性篩素數的同時求,復雜度O(n)
1 void get_phi(){ 2 p[0]=p[1]=0;cnt=0; 3 for(int i=2;i<=n;i++) p[i]=1; 4 for(int i=2;i<=n;i++){ 5 if(p[i]==1) phi[i]=i-1,prime[++cnt]=i; 6 for(int j=1;j<=cnt && (ll)i*prime[j]<=n;j++){ 7 p[i*prime[j]]=0; 8 if(i%prime[j]==0) { 9 phi[i*prime[j]]=phi[i]*prime[j]; 10 break; 11 } 12 phi[i*prime[j]]=phi[i]*(prime[j]-1); 13 } 14 } 15 }?
·快速冪
可以把冪想成一個二進制數來理解
1 int Power_Mod(int x,int y){ //求x的y次方 2 int ret=1; 3 while(y){ 4 if(y&1) ret*=x; 5 x=x*x; 6 y>>=1; 7 } 8 return ret; 9 }效率O(logn)
?
·排列組合
1)加法原理:做一件事有n類做法,第n類有m[n]種做法,總做法數為m[1]+m[2]+...+m[n]
2)乘法原理:做一件事有n個步驟,第n個步驟有m[n]中做法,總做法數為m[1]*m[2]*...*m[n]
? ? 乘法原理可以說是加法原理的特殊情況
3)容斥原理 ? **這很重要**
? ? 例如:求gcd(1~m,1~n)=k的數對有多少
? ? ? ? 設滿足條件的數對有f(k)個
? ? ? ? 則f(k)=(m/k)*(n/k)-f(2*k)-f(3*k)-f(4*k)-……從后往前遞推計算即可
4)排列:A(m,n)=m!/(m-n)! ?(m>n)
5)組合:C(m,n)=m!/((m-n)!*n!) ?(m>n)
? ? 如何求組合數?
? ? 法一:C(m,n)=C(m,n-1)*(m-n+1)/n
? ? 法二:楊輝三角 ?C(m,n)=C(m-1,n)+C(m-1,n-1)
?
·概率與數學期望
1)概率:P(A)=m/n ?(可理解為事件A發生的頻率)
? ? 互相獨立的事件A與B 滿足 P(A*B)=P(A)*P(B)
2)數學期望:隨機變量X的數學期望EX是所有可能的值按照概率加權的和
? ? 期望的線性性質:E(X+Y)=E(X)+E(Y)
?
未完待續……
轉載于:https://www.cnblogs.com/lindalee/p/7788911.html
總結
以上是生活随笔為你收集整理的noip2017考前基础复习——数论数学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数入参和返回值
- 下一篇: 小程序初接触2