算法講解:質數判斷及質因數分解


算法講解(1):質數判斷及質因數分解

目錄:

  1. 什么是質數

  2. 什么是質因數分解

  3. 算法講解

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;
}

 

 

 


免責聲明!

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



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