算法講解(1):質數判斷及質因數分解
目錄:
-
什么是質數
-
什么是質因數分解
-
算法講解
1.什么是質數:
質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。
0和1不是質數
除了0,1,質數以外其他的數叫合數
例如:4不是質數,因為4的因數有1,2,4 。 2並不是1或者4,所以4不是質數,是合數
3是質數,3的因數有1,3 。滿足條件,所以是質數
2.什么是質因數分解:
每個合數都可以寫成幾個質數相乘的形式,其中每個質數都是這個合數的因數,把一個合數用質因數相乘的形式表示出來,叫做分解質因數。如30=2×3×5 。分解質因數只針對合數。
質因數,顧名思義就是因數是質數
例如:18=2*3*3,其中,2,3都是質數,這就是將18分解質因數
(小學數學,不是很想多BB)
質因數分解的方法(重點?)
最普遍的方法:短除法
當然,依舊是小學5年級數學,不多想BB
3.算法講解
1.質數判斷布爾函數Prime():
bool prime(int n){ //布爾函數,false代表不是質數,true代表是負數 if(n<=1){ //0,1,負數都不是質數 return false; } for(int i=2;i<n;i++){ if(n%i==0){ //如果小於n的某一個數i是n的因數,且 i>1,則n不是質數 return false; } } //n是質數 return true; }
2.改進后的Prime():
這里我們拿16舉個例子,17=1*17,17=2*8.5,17=3*5.67,4*4.25那么還需要枚舉后面的嗎?后面的不就是5.67*3,8.5*2....嗎?
那么我們只需要枚舉到√n即可
bool prime(int n){ //布爾函數,false代表不是質數,true代表是負數 if(n<=1){ //0,1,負數都不是質數 return false; } for(int i=2;i*i<n;i++){ if(n%i==0){ //如果小於n的某一個數i是n的因數,且 i>1,則n不是質數 return false; } / } //n是質數 return true; }