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<<”十万以内的完数为”<