问题描述 :
将一个正整数N(1<N<32768)分解质因数。例如,输入90,打印出90=233*5。
输入说明 :
输入一个正整数
输出说明 :
按照范例输出。
其中的质因数的输出顺序按照从小到大的顺序。
如果输入的整数本身是质数,则输出形式为:
3=3
输入范例:
66
输出范例:
66=2311
#include<stdio.h>
#include<math.h>
//判断是不是素数
int sushu(int x){
int i;
if(x==1)
return 0;
for(i=2;i<=sqrt(x);i++){
if(0==x%i){
return 0;
}
}
return 1;
}
//寻找x的 为质数的最小因数(好好读一下这一句话)
int find(int x){
int i;
if(sushu(x))
return x;
for(i=2;i<=sqrt(x);i++){
if(0==x%i && sushu(i))
return i;
}
return 0; //没有找到为素数的因数
}
int main(){
int n,m,i,k;
scanf("%d",&n);
printf("%d=",n);
if(sushu(n))
printf("%d\n",n);
else{
k=0;
while(n>0){
m=find(n);
if(m){//找到了为质数的最小因数
k++;
if(k>=2)
printf("*");
printf("%d",m);
n/=m;//n的值变
}
else //没有找到,结束
break;
}
printf("\n");
}
return 0;
}