【递归】分解质因子
【问题描述】输入一个正整数n,用递归方法从小到大输出它的所有质因子(因子是质数)
【输入形式】一行,一个正整数n,2<=n<=10000
【输出形式】一行,若干个正整数,两数之间用一个空格隔开,从小到大输出
【样例输入】
18
【样例输出】
2 3 3
代码如下:
#include"iostream"
#include"iomanip"
#include"cmath"
using namespace std;
bool judge_prinme(int n)//判断质数
{
if (n <= 3)
{
return n > 1;//如果n<3,只可能是1.2.3,2.3为质数,1既不是质数也不是合数.
}
if (n % 6 != 1 && n % 6 != 5)
return false;
int t = static_cast<int>(sqrt(n)) + 1;
for (int i = 5; i < t; i += 6)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
void decomp_prinme(int& n)//分解整数
{
if (n != 1)
{
for (int i = 2; i <= n; i++)
{
if (n % i == 0)
{
n = n / i;
cout << i << " ";
decomp_prinme(n);
}
}
}
else
return ;
}
int main()
{
int n;
cin >> n;
if (judge_prinme(n))
cout << n << endl;
else
decomp_prinme(n);
return 0;
}