
#include<stdio.h>
void main()
{
int i,j,k,h,s,sum
int a[200]//20个是不够的
s=0
sum=0
for(i=2i<=1000i++)
{
s=0//此处s=0一定要加,因为前几次循环的时候s的值已经改变
k=0
for(j=1j<ij++)
{
if((i%j)==0){a[k]=jk++}
}
for(h=0h<kh++)
{
s+=a[h]
}
if(i==s){printf("%d ",i)sum++}
}
printf("完数的个数:%d\n",sum)
}
时间太紧,没注意程序的简洁性和效率,这个需要你自己改了!
C语言程序如下:
#include <stdio.h>
int main()
{
long int i,j,sum
for(i=2i<100i++)
{ sum=0
for(j=2j<=i/2j++)
{
if(i%j==0)
{
sum=sum+j
}
}
if(i==sum+1)
printf("%d\n",i)
}
}
扩展资料:
如果一个数恰好等于它的因子之和,则称该数为“完全数”。
第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。后面的完全数还有8128、33550336等等。
参考资料:百度百科-完全数
请对比修改的地方:
#include"stdio.h"
main()
{int i,c,n=1,sum=0
for(i=1i<=100i++)
{c=i
for(n=1n<=i/2n++)
if(i%n==0) c=c-n
if(c==0)
{printf("%d\n",i)
sum++}
}
printf("100以内有%d个完数\n",sum)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)