唯一分解定理

2021-07-16 17:13:53 字數 1609 閱讀 4765

**:

唯一分解定律:又稱為正整數的唯一分解定理,即:每個大於1的自然數均可寫為質數的積,而且這些素因子按大小排列之後,寫法僅有一種方式。

當題目有大數相除,求餘數時,精度要求高時....就要運用唯一分解定律

以下唯一分解定律證明:

**:為了真正地證明,分解質因數的方法是唯一的,我們將再次用到反證法。假設存在某些數,它們有至少兩種分解方法。那麼根據上文提到的「非空正整數集裡存在最小的元素」,一定有乙個最小的數m,它能用至少兩種方法表示成質數的乘積:

m = p1 * p2 * … * pr = q1 * q2 * … * qs

下面我們將看到,這種假設會推出乙個多麼荒謬的結果來。不妨設p1 <= p2 <= … <= pr, q1 <= q2 <= … <= qs。顯然,p1是不等於q1的,不然兩邊同時約掉它,我們就得到乙個更小的有兩種分解方法的數。不妨設p1 < q1,那麼我們用p1替換掉等式最右邊中的q1,得到乙個比m更小的數t = p1 * q2 * q3 * … * qs。令m』 = m – t,我們得到m』的兩種表達:

m』 = (p1 * p2 * … * pr) – (p1 * q2 * … * qs) = p1 * (p2 * .. * pr – q2 * … * qs) …… (1)

m』 = (q1 * q2 * … * qs) – (p1 * q2 * … * qs) = (q1 – p1) * q2 * … * qs ……………… (2)

由於t比m小,因此m』是正整數。從(1)式中我們立即看到,p1是m』的乙個質因子。注意到m』比m小,因此它的質因數分解方式應該是唯一的,可知p1也應該出現在表示式(2)中。既然p1比所有的q都要小,因此它不可能恰好是(2)式中的某個q,於是只可能被包含在因子(q1-p1)裡。但這就意味著,(q1-p1)/p1除得盡,也就是說q1/p1-1是乙個整數,這樣q1/p1也必須得是整數。我們立即看出,p1必須也是q1的乙個因子,這與q1是質數矛盾了。這說明,我們最初的假設是錯誤的。

用e儲存每一位素數的係數 如2^1*5^2則表示成e[1,0,2,0,0,0……] 因為素數是[2,3,5,7,11,13……], 2在第一位,5在第三位.

**如下:

#include#include#include#include#include#includeusing namespace std;

const int maxn=10000+5;

int e[maxn]; //用e儲存每一位素數的係數

vectorprimes;

void getprime()

; for(int i=2;i<=sqrt(10000+0.5);i++)

if(!n[i])

for(int j=i*i;j<=10000;j+=i) n[j]=1;

for(int i=2;i<=10000;i++)

if(!n[i]) primes.push_back(i);

}void add_int(int n,int d)

{ for(int i=0;i>n;

add_int(n,1); //乘以n;

p=0;

for(int i=0;i>n;

add_int(n,-1); //除以n;

p=0;

for(int i=0;i

唯一分解定理

任意乙個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,乙個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。c include include include using namespace std int main int num 32 int local...

唯一分解定理

problem description 假設x是乙個正整數,它的值不超過65535 即1 x 65535 請編寫乙個程式,將x分解為若干個素數的乘積。input 輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包含乙個正整數x。output 每個測試例...

唯一分解定理

唯一分解定理 任何乙個大於1的自然數n,如果n不是質數,那麼n可以分解成有限個素數的乘積 例 n p1 a1 p2 a2 p3 a3 其中p1在做 uva10375 時學到了這個演算法,雖然自己理解的還不透徹,先把自己的看法寫下來,日後再完善 要用唯一分解定理第一步當然是素數打表了 之前素數打表一直...