Description
大于1的正整数n可以分解为:n=x1*x2*…*xm。 例如,当n=12 时,共有8 种不同的分解式:
12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。
对于给定的正整数n,计算n共有多少种不同的分解式。
Input
输入数据只有一行,有1个正整数n (1≤n≤2000000000)。
Output
将计算出的不同的分解式数输出。
Sample Input
12
Sample Output
8
*****因数分解直接递归就可以实现,用全局变量total统计分解的总数
*****但是将每种情况输出则需要注意保留此次找到的因数,
*****对于一个因素分解完后,还要做好下一个因数分解的初始化
*****程序中用队列记录一次的分解情况,但是未解决分解时输出1的情况
------icesongqiang
*/
#include
#include
#include
#include
using namespace std;
int total;
int solve(int num,queue<<span style="font-weight: bold;">int> &factors)
{
//递归基础
if (num<=3 && num>=1)
{
++total;
//输出,也可以输出到文件
while (factors.size() != 0)
{
cout << factors.front() << " * ";
factors.pop();
}
cout <<num <<"\n";
return 0;
}
//因子分解,从2到num-1
for (int i = 2; i <=num; ++i)
{
if (num%i == 0){
queue<<span style="font-weight: bold;">int> inter_factors(factors);
inter_factors.push(i); //将当前i传入其递归式
solve(num / i,inter_factors);
}
}
}
int main()
{
int num;
ifstream ifile("input.txt");
ifile >> num;
ifile.close();
if (num < 0) { cout << "wrong number!\n"; exit(-1); }
queue<<span style="font-weight: bold;">int> factors;
solve(num,factors);
ofstream ofile("output.txt");
ofile <<total;
ofile.close();
system("pause");
return 0;
}