分解質因子


1.問題

【問題描述】
輸入一個正整數 n,用遞歸方法從小到大輸出它的所有質因子(因子是質數)。
【輸入格式】
一行一個正整數 n,2≤n≤10000。
【輸出格式】
一行若干個正整數,兩數之間用一個空格隔開,從小到大輸出。
【輸入樣例】
18
【輸出樣例】
2 3 3

 

2.問題分析

  1.質數是一個大於1的自然數,如果n小於等於1的數,不符合條件,要做異常處理

  2.如果n大於1,從整數p(p從2開始)開始試除,

      如果n能夠被p整除,就得到一個質因子p,並把p大於出來。 問題就轉化為整數n/p,從整數p開始求質因子

      如果n不能被p整除,就是p不是n的質因子,問題轉化為:整數n,從p+1開始求質因子

    

 

3.程序及其備注

 

#include<iostream>
using namespace std;
bool first = true;//第一個質因子直接輸出,后續的質因子加一個空格輸出 
void zyz(int n,int p){
    if(n > 1){
        /*
            如果可以整除 n/p后繼續遞歸求質因子,否則n對p+1求質因子 
        */ 
        if(n % p == 0){
            /*
              如果第一次直接輸出質因子,否則加空格輸出質因子 
              */ 
            if(first){
                cout << p; 
                first = false;
            }
            else cout <<  " " << p;
            zyz(n/p,p);
        }
        else zyz(n,p+1);
    }
}
int main(){
     int n;
     cin >> n;
     zyz(n,2);
     cout << endl;
     return 0;
}
//輸入12
//輸出 2 2 3 

4.運行結果

 


免責聲明!

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



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