完数

方法一

 #include"stdio.h"
#include"math.h"
void sortPosition(int a[],int n);
void main()
{
int i,j,s,n;
int a[1000];
int count=0;

printf("1000以内的完数 ");

for(i=1;i<=1000;i++)
{
s=1;
a[0]=1;
n=1;
for(j=2;j<sqrt(i);j++)
{
if(i%j == 0)
{
s += j+i/j;
//s+=i/j;
a[n]=j;
a[++n]=i/j;
n++;
}

}
sortPosition(a,n);
if(s==i && s!=1)
{
printf("%d 完数是",i);
count++;

            for(j=0; j<n; j++)
{
printf("%d ",a[j]);
}  
              printf(" ");

}
}
printf(" 1000以内的完数有%d个 ",count);
}
void sortPosition(int a[],int n)
{
int i,j,temp;
for(i=0;i<=n-1;i++)
{
for(j=i+1;j<=n-1;j++)
{
if(a[j]<a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}

}
}

方法二

#include<stdio.h>
void main()
{
int i,j,s,n;
int a[1000];
int count=0;

printf("1000以内的完数 ");

for(i=2;i<=1000;i++)
{
s=0;
n=0;
for(j=1;j<i;j++)
{
if(i%j == 0)
{
s += j;
a[n++]=j;
}

}
if(s == i)
{
printf("%d ",s);
count++;

//printf("%d 完数是 ",n);
for(j=0; j<n; j++)
printf("%d ",a[j]);
printf(" ");

}
}
printf(" 1000以内的完数有%d个 ",count);
return 0;
}

原文地址:https://www.cnblogs.com/hongou/p/10825910.html