作业帮 > 综合 > 作业

每个整数都可以分解成几个素数的乘积

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 15:12:15
每个整数都可以分解成几个素数的乘积
用C语言编写一个程序,就是输入一个整数后就可以输出是哪几个素数的乘积.
思想是把这个整数分成任何两个因数的乘积,因数又可以再分,直到得到的所有因数全是素数.
#include
#include
typedef struct factor{
int factor;
struct factor *factor_L,*factor_R;
}factor,*factorp;
/*采用二叉树结构来存放因子*/
int main(int args,char *argv[]){
int Aninterger;
factorp FactorC(int this_factor);
void showfactor(factorp root);
factorp Root;
printf("Please input an interger:"); scanf("%d",&Aninterger);
Root=FactorC(Aninterger); /*分解因数*/
printf("%d=1",Aninterger);
showfactor(Root); /*显示所有的素数因数*/
return 0;
}
factorp FactorC(int this_factor){
factorp root;
int i,tmp;
root=(factorp)malloc(sizeof(factor));
root->factor=this_factor;
root->factor_L=NULL;
root->factor_R=NULL;
if(this_factor==2)return root;
for(i=(int)(1+this_factor/2);i>2;i--){
/*从整数的一半开始寻找因数,因为最小的因数是2*/
tmp=this_factor%i;
if(tmp==0){ /*如果分解成功就递归调用这个函数继续分解因数一直到不能再分解*/
root->factor_L=FactorC(i);
root->factor_R=FactorC(this_factor/i);
break;
}
}
return root;
}
void showfactor(factorp root){
/*找到树的末端显示就好了*/
if(root->factor_L==NULL)
printf("*%d",root->factor);
else{
showfactor(root->factor_L);
showfactor(root->factor_R);
}
}