赞
踩
一个简单的练习,代码虽短所含的内容丰富
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);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。