一篇不大正經的關於數論的總結(未完
頂函數(\(\lceil {x} \rceil\))、底函數(\(\lfloor {x} \rfloor\)):
常稱之為高斯(取整)函數。
定義:
頂函數:\(\geq {x}\)的最小整數。
底函數:\(\leq {x}\)的最大整數。
舉個例子:
\(1.\lceil {1.5} \rceil=2\)
\(2.\lfloor {1.5} \rfloor=1\)
\(3.\lceil {-1.5} \rceil=-1\)
\(4.\lfloor {-1.5} \rfloor =-2\)
帶余除法:
定義:
\(對於任意整數a,b(a\geq b,b\neq 0),\)\(存在q,r,滿足a=qb+r(0\leq r \leq |b|),且q,r唯一\)
我們把a叫做被除數,b叫做除數,q叫做商,r叫做余數。
可以證明\(q=\lfloor \left (\frac {a}{b}\right )\rfloor,r=a-b\lfloor \left(\frac {a}{b} \right)\rfloor\)(證明如下)
\(\because這個是很顯然的\)
\(\therefore q=\lfloor \left (\frac {a}{b}\right )\rfloor,r=a-b\lfloor \left(\frac {a}{b} \right)\rfloor\)
整除:
定義:如果\(a\)能把\(b\)除盡,余數為0,那麽就說是\(b\) 被\(a\)整除,即\(a|b\)。
整除的性質:
- 自反性:對於任意\(n\),有\(n|n\)。
- 傳遞性:若\(a|b,b|c\),那麽\(a|c\)。
- 反對稱性:若\(a|b,b|a\),即\(a=b\)。(對稱性:若\(a\)滿足\(b\cdots\)關系,那麽\(b\)也滿足\(a\cdots\)關系)
若\(b|a,c|b\),則\(c|a\)。(證明如下)
\(\because b|a,c|b\)
\(\therefore(所以必然存在兩個整數x,y)使得a=xb\),\(b=yc\)
\(又\therefore a=xyc\)
\(\because a/c=xy\)
\(\therefore c|a\)若\(c|a,c|b\),則對任意數\(x,y\),必有\(c |(ax+by)。\)(證明如下)
\(\because c|a,c|b\)
\(\therefore (所以必然存在兩個整數p,q)使得a=pc\),\(b=qc\)
\(又\therefore c |(pcx+qcy)\)
\(c|c(px+qy)\)
\(\because 兩邊都有c\)
\(\therefore c(px+qy)是c的倍數\)
\(又\therefore c|(ax+by)\)若\(b|a,a\neq 0\),則有\(|b| \leq |a|\)。(證明如下)
\(\because b|a\)
\(\therefore (所以必然存在一個整數q)使得a=qb\)
\(又\therefore a是b的倍數,|b| \leq |a|\)。若\(b|a,a\neq 0\),則\(\left( \frac ab \right)|a\)。(證明如下)
\(\because b|a\)
\(\therefore (所以必然存在一個整數q)使得a=qb\)
\(又\therefore \left( \frac {a}{b} \right)=\left( \frac {qb}{b} \right)=q\)
\(\because a是q的倍數\)
\(\therefore q|a\)
\(又\therefore \left(\frac{a}{b}\right)|a\)若\(b|a,c|a,b\bot c\),則\(bc|a\)。(舉例如下)
\(1.當a=12,b=1,c=6時,1|12,6|12,1\bot12,6|12。\)
\(2.當a=72,b=8,c=9時,8|72,9|72,8\bot9,72|72。(自反性:72|72)\)- 若\(a|b,b|a\),則\(|a|=|b|\)。(反對稱性)
若\(a|b\),對任意整數\(c\),則\(a|bc\)。(證明如下)
\(\because a|b\)
\(\therefore b=xa,b是a的倍數\)
\(又\therefore乘上任意整數c,bc依舊是a的倍數\)
\(又\therefore a|bc\)若\(a|b\),對於任意整數\(m(m\neq0)\),則\(ma|mb\)。(證明如下)
\(\because 這是顯然的\)
\(\therefore ma|mb\)唯一分解定理(算術基本定理):
\(n=p_1^{r_1}*p_2^{r_2}*\cdots\)
其中\(p_i\)是質數,\(p_1=2,p_2=3 \cdots\)以此類推結論:
設\(p\)為質數,對於任意整數\(a\),則有\(p|a\)或者\((p,a)=1\)。(證明如下)
\(\because p為質數\)
$\therefore a要麽是p的倍數,要麽p\perp a。 $
\(又\therefore p|a或者(p,a)=1\)約數和倍數:
推論:
在算術基本定理中,若\(N\)被唯一分解為\(N=p_1^{c_1}p_2^{c_2}\cdots p_m^{c_m}\),其中\(c_i\)是正整數,\(p_i\)是質數且滿足\(p_1<p_2<\cdots p_m\),則\(N\)的正整數集合可寫作\(:\)
{\(p_1^{b_1}p_2^{b_2}\cdots p_m^{b_m}\)},其中\(0\leq b_i \leq c_i\)
N的正約數個數為\(:\)
\[(c_1+1)*(c_2+1)*\cdots*(c_m+1)=\prod_{i=1}^{m}(c_i+1)\]
\(N\)的所有正約數之和為\(:\)
\[(1+p_1+p_1^2+\cdots+p_1^{c_1})*\cdots*(1+p_m+p_m^2+\cdots+p_m^{c_m})=\prod_{i=1}^{m}(\sum_{j=0}^{c_i}(p_i)^{j})\]定義:
若\(a|b,a\)是\(b\)的約數,\(b\)是\(a\)的倍數,稱\(a\)為\(b\)的因子(對於任何數\(n\),至少有兩個因子\(1\)和\(n\)本身,稱它們為\(n\)的平凡因子,其他即為非平凡因子)。特別的,任何正整數都是\(0\)的約數。
約數的求法:
1.試除法:
因為約數總是成對出現,所以只需要從\(1\) ~\(\sqrt{n}\)。時間復雜度\(:O(\sqrt{n})\)
#include"bits/stdc++.h"
#include<time.h>
using namespace std;
#define N 10086
int a[N];
int n;
int cnt=0;
int main(void) {
ios::sync_with_stdio(false);
cin>>n;
//clock_t start = clock();
for(int i=1; i<=sqrt(n); ++i) {
if(n%i==0) {
a[++cnt]=i;
if(n/i!=i) a[++cnt]=n/i;
}
}
for(int i=1; i<=cnt; ++i) cout<<a[i]<<" ";
//clock_t ends = clock();
//cout<<"\n Running time: "<<(double)(ends - start)/ CLOCKS_PER_SEC;
return 0;
}
2.倍數法:
如果更改題意,給出\(l,r\),要求求\(l-r\)之間的每個數的正約數集合。那麽再用試除法,時間復雜度就為\(O(N\sqrt{N})\),變得有點惡心,特別是在\(N\)非常大的時候。譬如跑\(1-100000\)。消耗的時間如下:
運行代碼如下:
#include"bits/stdc++.h"
#include<time.h>
using namespace std;
#define N 10086
int a[N];
int n;
int cnt=0;
int l,r;
int main(void) {
ios::sync_with_stdio(false);
cin>>l>>r;
clock_t start = clock();
for(int j=l; j<=r; ++j) {
memset(a,0,sizeof(a));
cnt=0;
// cin>>n;
for(int i=1; i<=sqrt(j); ++i) {
if(j%i==0) {
a[++cnt]=i;
if(j/i!=i) a[++cnt]=j/i;
}
}
for(int i=1; i<=cnt; ++i) cout<<a[i]<<" ";
cout<<"\n";
}
clock_t ends = clock();
cout<<"\n Running time: "<<(double)(ends - start)/ CLOCKS_PER_SEC;
return 0;
}
一篇不大正經的關於數論的總結(未完