求100000以内完数

include

include

using namespace std;
int yinhe(int n)//把52问编写成函数,返回因数之和
{
int s=1,p=2,m,k,d;//从p=2开始找质因数,分解
m=n;//保留n的值,便于最后减掉
while(p*p<=n)
{
k=0;//大数由于只有0次和1次两种情况,肯定是除剩下的数,所以单独讨论,减少循环次数
while(n%p==0)
{
n/=p;k++;//标准分解式
}
if(k>0)//条件为真说明该质因数能够被整除至少一次,次数非0
{
s*=(pow(p,k+1)-1)/(p-1);//s=s*(1+p+p^2+….p^k)
}
p++;//除不尽以后,当前的约数的次数已确定=k,寻找下一个约数的次数
}
if(n>1) {s*=(1+n);} //n此时被替换为大于根号n的大的数,他有{0,1)两种情况,所以是乘以n的0次加n
s=s-m;//排除掉非真因数的自身
return s;
}
int main()
{
int i;
cout<<”十万以内的完数为”<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值