【问题描述】
由数学基本定理可知:任何一个大于1的非素数整数(即合数)都可以唯一分解成若干个素数的乘积。编写程序,从控制台读入一个合数(合数的大小不会超过int数据类型表示的范围),求这个合数可以分解成的素数。
【输入形式】
从控制台输入一个合数。
【输出形式】
在标准输出上按照由小到大的顺序输出分解成的素数,各素数之间以一个空格分隔,最后一个整数后也可以有一个空格。
【输入样例】
12308760
【输出样例】
2 2 2 3 3 3 3 5 29 131
【样例说明】
输入的合数为12308760,其分解成的素数乘积为:2*2*2*3*3*3*3*5*29*131。
#include<stdio.h>
#include<math.h>
//判断是否为素数
int Judge(int x){
int i;
for(i=2;i<=sqrt(x);i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int main(){
int num,i,stack[100];
int top=-1;
scanf("%d", &num);
for(i=num;i>1;i--){
if(num%i == 0){
if(Judge(i)){
num=num/i;
stack[++top] = i;
i++;
}
}
}
while(top>=0){
printf("%d ", stack[top]);
top--;
}
return 0;
}