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.运行结果