算法提高 8-1因式分解
时间限制:10.0s 内存限制:256.0MB
提交此题
问题描述
设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出23。输入20,输出22*5。
样例
与上面的样例输入对应的输出。
例:
120
2 × 2 × 2 × 3 × 5 2 \times 2 \times 2 \times 3 \times 5 2×2×2×3×5
13
13
数据规模和约定
输入数据中每一个数在int表示范围内。
分析:主要思路就是分解一个数的因数,将其因数中素数提取出来相乘即可。我用的递归方法,直到该数为素数为止,代码如下:
#include <iostream>
#include <cmath>
using namespace std;
//和数返回最小因数, 素数返回0
int fun1(int num)
{
for(int i = 2; i * i <= num; i++)
{
if(num % i == 0) return i;
}
return 0;
}
void fun(int num)
{
int temp;
if(temp = fun1(num)) //这里的条件是temp != 0
{
cout << temp << "*";
fun(num/temp); //递归
}
else //如果temp为0,表示当前为素数,结束递归
{
cout << num << endl;
}
}
int main()
{
int num;
cin >> num;
fun(num);
return 0;
}