C语言求完数

Python025

C语言求完数,第1张

/*完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)*/

#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)

}

时间太紧,没注意程序的简洁性和效率,这个需要你自己改了

int main ()

{

int m,n,a,i,e,f

scanf("%d %d",&m,&n)

int count=0//统计m n之间一共多少个符合要求

for(i=mi<=ni++)

{

e=sqrt(i+100)//一个数加100

f=sqrt(i+268)//一个数加268

if ( (sqrt(i+100)==e)&&(sqrt(i+268)==f) )

{

count+=1//计数

printf("%d ",i)//打印

}

}

if( count==0)

{

printf ("no")//在m n之间全部检测结束,如果count依然等于0,才能打印no

}

return 0

}

请采纳,谢谢。

修改了一下,能运行,没有改代码,就把括号改了一下

结果如下

#include <stdio.h>

int main()

{

long int x,y,a,b,c

for(x=1x<=1000x++)

{

int s[100]

a=1

for(y=1y<=x/2y++)

{

if(x%y==0)

{

s[a]=y

a++

}

}

c=0

for(b=1b<=ab++)

{

c=c+s[b]

if (x==c)

{

printf("%d its factors are ",x)

for(c=1c<=bc++)

printf("%d ",s[c])

printf("\n")

}

}

}

}