日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

noip2017考前基础复习——数论数学

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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考前基础复习——数论数学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。