數論-算術基本定理
算術基本定理又叫唯一因子分解定理,算術基本定理的表述如下:
任何一個大於1的自然數 N,如果N不為質數,那麽N可以唯一分解成有限個質數的乘積
,這裏P1<P2<P3......<Pn均為質數,其中指數ai是正整數。這樣的分解稱為 N 的標準分解式。
在進行證明這個定理之前,先說一個關於素數整除性的一個基本而重要的事實。
歐幾裏得引理:對所有的素數p和所有整數a,b,如果p|ab,則p|a,或p|b。即:如果一個素數整除兩個正整數的乘積,那麽這個素數可以至少整除這兩個正整數中的一個。如果 p|bc,那麽p|b或者p|c。
證明:采用反證法,假設p|ab,但p不整除a也不整除b。所以gcd(p,a)=1,gcd(p,b)=1,這是因為p的約數只有1和p,又因為假設a,b都不能被p整除,所以gcd(p,ab)=1;由假設p|ab可知gcd(ab,p)=p,於是產生矛盾。從而證明定理成立。
算術基本定理的證明:
必然性:用反證法:假設存在大於1的自然數不能寫成質數的乘積,把最小的那個稱為n。自然數可以根據其可除性(是否能表示成兩個不是自身的自然數的乘積)分成3類:質數、合數和1。首先,按照定義,n 大於1。其次,n 不是質數,因為質數p可以寫成質數乘積:p=p,這與假設不相符合。因此n只能是合數,但每個合數都可以分解成兩個嚴格小於自身而大於1的自然數的積。設,其中a 和b 都是介於1和n 之間的自然數,因此,按照n 的定義,a 和b 都可以寫成質數的乘積。從而 也可以寫成質數的乘積。由此產生矛盾。因此大於1的自然數必可寫成質數的乘積。
唯一性:
反證法:假設有些大於1的自然數可以以多於一種的方式寫成多個質數的乘積,那麽假設n 是最小的一個。首先n 不是質數。將n 用兩種方法寫出 。根據引理,質數 ,所以 中有一個能被整除,不妨設為。但也是質數,因此 。所以,比n小的正整數也可以寫成 。這與n 的最小性矛盾!因此唯一性得證。
編程實現:
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std;const int maxn = 1000; int a[maxn]; int num; int main(void) { int n; while(cin>>n) { num = 0; for(int i = 2; i <= n; i++) { while(n%i==0) { a[num++] = i; n = n/i; } } for(int i = 0; i < num; i++) { printf(i==0?"%d":"*%d",a[i]); } cout<<endl; } return 0; }
數論-算術基本定理