1. 程式人生 > >清北學堂Day5

清北學堂Day5

自然 兩個 不為 除法 ... 結果 png ret prim

Part1--模擬題

今天上午的題……怎麽說呢,因為昨天晚上沒睡好,所以隨便搞了搞就睡覺了……emmm……而且今天的題有點偏數學,有找規律的,有概率的等等,感覺如果在noip中考的話,也應該是比較難我不會做的哪一類……所以……還是補覺比較實在。


Part2--今日專題:數論

今天應該是5天來聽得最痛苦的一天了。一方面是狀態也不好,另一方面,數論這個東西,本來就跟天書一樣。所以我挑了一些比較實(jian)用(dan)的部分記了下來。

1.模運算

快速冪:a^b%c

 1 //快速冪(用乘法算冪)
 2 int pow(int a,int b,int p)
 3 {
 4     if(b==0) return
1%p; 5 int c=pow(a,b/2,p); 6 c=c*1LL*c%p; //轉long long 7 if(b&1) c=c*a%p; 8 return c; 9 } 10 int pow(int a,int b,int p) //另一種寫法 11 { 12 int ret=1%p; 13 while(b) 14 { 15 if(b&1) ret=ret*a%p; 16 b>>=1; 17 a=a*a%p; 18 } 19 return
ret; 20 }

慢速乘

 1 //慢速乘(用加法算乘)
 2 int mul(int a,int b,int p)
 3 {
 4     int ret=0;
 5     while(b)
 6     {
 7         if(b&1) ret=(ret+a)%p;
 8         b>>=1;
 9         a=(a+a)%p;
10     }
11     return ret;
12 }

2.素數 O(sqrt(n))來判斷素數 for i=2~sqrt(n)

算數基本定理,唯一分解定理:任何一個大於1的自然數N,如果N不為素數,那麽N可以唯一分解成有限個素數的乘積。

篩素數:(1)O(nlogn):埃式篩法

1 //篩素數O(nlogn):n/1+n/2+...+n/n=nlogn
2 bool vis[100000];
3 for(int i=2;i<=n;i++)
4 {
5     if(!vis[i])
6     {
7         for(int j=2;j*i<=n;j++) vis[j*i]=1;
8     }
9 }

(2)O(n)線性篩:

 1 //線性篩素數O(n)*****
 2 int mindiv[],prime[],tot;  //mindiv最小素因子,prime記錄素數,tot記錄素數數量 
 3 for(int i=2;i<=n;i++)
 4 {
 5     if(!mindiv[i]) mindiv[i]=i,prime[tot++]=i;  //得到素數 
 6     for(int j=0;prime[j]*i<=n;j++)
 7     {
 8         mindiv[prime[j]*i]=prime[j];
 9         if(prime[j]!=mindiv[i]) break;  //a1>1
10     }
11     //a1==1
12 }

3.最大公約數

如果兩個數的最大公約數是1,則稱為‘互素’

輾轉相除法:

1 //輾轉相除 O(logn)
2 int gcd(int a,int b)  //a,b的大小關系無所謂 
3 {
4     return b==0?a:gcd(b,a%b);
5 } 

4.費馬小定理:對於一個素數,他的額p-1次方是1

即,若p為素數,ap-1%p=1

證明:

%p能得到的所有結果:(0),1,2,3,…,p-1

每個數都*a à a,2a,3a,…,(p-1)a mod p

假設xa=ya(即有重復) mod p

xa-ya=0 mod p

a(x-y)=0 mod p X

因此證明沒有重復。 (然而證明並沒有什麽琴梨用)

5.Pick定理:一個計算頂點在格點上的多邊形面積公式

S=a+b/2-1

6.矩陣乘法

技術分享

代碼實現:

 1 Int a[][];
 2 
 3 Int b[][];
 4 
 5 Int c[][];
 6 
 7 For(int i=1;i<=n;i++)
 8 
 9 For(int j=1;j<=n;j++)
10 
11     For(int k=1;k<=n;k++)
12 
13         C[i][j]+=a[i][k]*b[k][j];

用處:有些轉移方程或遞推式可以寫成矩陣模式(利用轉移矩陣)

嗯今天就這樣吧,實在是太難了/手動再見

清北學堂Day5