算法提高 8-1因式分解
时间限制:10.0s 内存限制:256.0MB
问题描述
设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出2*3。输入20,输出2*2*5。
样例
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数在int表示范围内。
//1.判断素数;
//2调用DFS();
//3.记录素数因子;
//4.输出;
#include<iostream>
#include<cmath>
using namespace std;
int N = 0;
int num[101];
int index=0;
bool judge(int x){
if(x==1) return true;
int i=0;
for(i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
if(i>sqrt(x)) return true;
}
void DFS(int m)
{
int sum=m;
if(N==1){
printf("%d",num[0]);
for(int j=1;j<index;j++){
printf("*%d",num[j]);
}
}
if(sum>N) return;
for(int i=2;i<=N;i++){
if(judge(i)&&N%i==0){
sum*=i;
N/=i;
num[index++]=i;
DFS(sum);
}
}
}
int main()
{
scanf("%d",&N);
if(judge(N)){
printf("%d",N);
}else{
DFS(1);
}
return 0;
}