当前位置:   article > 正文

c语言编程求一个数的所有因子,求一个数的所有质因子之和

求一个数的质因数的和 c语言

一个简单的练习,代码虽短所含的内容丰富

1.[代码][C/C++]代码

/*

编写递归函数:求一个大于2的正整数的所有质因子之和

1、判断输入数是否满足条件,即,zs>2 且是int 类型

2、满足条件1后求和,he=zs1+zs2+zs3....和=质数1+质数2+质数3....

2步中可以分为:

2.1判断输入值 m 是否是质数——前面已经有过这样的函数判断,直接用就行,

if(2.1==true)

return m;

else

return2.2分解 m——

2.2.1从2开始能被 m 整除的数 m`,

修改 m=m%m`

return m`+2.1(m)//求新的m值

*/

#include

#include

int pdzs(int);//判断质数

int fenjie(int);//分解

int qiuhe(int);//求和

void main()

{

int m;//存储输入的数

int he; //存储所有质因子和

//输入并判断处理

while(printf("请输入一个大于2的正整数\n")\

,scanf("%d",&m)==0||m<=2)

{

while(getchar()!='\n')

;

printf("您输入的数不符合要求!\n");

}

he=qiuhe(m);

printf("正整数%d的质因子之和为:%d\n",m,he);

system("PAUSE");

}

int qiuhe(int m_)

{

int pd=0;

pd=pdzs(m_);

这儿可以写成 return pd?m_:fenjie(m_);

///

if(pd==1)

{

return m_;

}

else

{

return fenjie(m_);

}

}

int pdzs(int n)

{

int pfg;

int bsss=0;

if(n==2)//特殊情况判断

return 1;

if(n%2==0)//传入的参数不可能是1,所以这儿就不再做判断!

return 0;

{

int n_=n, js;

for(pfg=1,js=1;n_>0;pfg++,js+=2)

{n_-=js;}

}

int i;

for(i=3;i

{

if(n%i==0)

{

bsss=1;//不是素数成立

break;

}

}

return bsss?0:1;

}

int fenjie(int f)

{

int i;

for(i=2;f%i!=0;i++)

;

f=f/i;//i 的值不可能是4、6、8、9、10...如果f 能整除4、6、8、9、10...那也必定整除质数2、3、5、7...

printf("分解函数后新值为:%d\n",f);

return i+qiuhe(f);

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/252423
推荐阅读
相关标签
  

闽ICP备14008679号