數論--唯一分解定理及代碼實現


 

唯一分解定理,及證明?

看《什么是數學》有講一個算術基本定理,又稱為正整數的唯一分解定理,即:每個大於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是質數矛盾了。這說明,我們最初的假設是錯誤的。

 

假設x是一個正整數,它的值不超過65535(即1< x <= 65535),請編寫一個程序,將x分解為若干個素數的乘積。

 

 1 #include <bits/stdc++.h>     
 2 using namespace std;
 3 int a[10000],c,n,t; 
 4 int main()    
 5 {    
 6        
 7     scanf("%d",&t);   //t組測試數據 
 8     while(t--)    
 9     {    
10         scanf("%d",&n);    
11         c=0;  
12         for(int i=2;i<=n;i++)
13         {    
14             while(n%i==0)
15             {    
16                 a[c++]=i;
17                 n/=i;
18             }    
19         }    
20         for(int i=0;i<c;i++)    
21         {    
22             printf(i==0?"%d":"*%d",a[i]);    
23         }    
24         printf("\n");    
25     }    
26     return 0;    
27 }   

 

 

參考:知乎:怎樣理解唯一分解定理,如何證明,這個定理有什么用?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM