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.運行結果