打印1000以内的完数,完数指所有因子之和等于它本身的数。用C语言。

如题所述

// 本程序演示一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数
#include"stdio.h"
main()
{
int i,j,s,sum;
printf("完数:\n") ;
sum=0;
for(i=2;i<=1000;i++)
{ s=0; ;//此处s=0一定要加,因为前几次循环的时候s的值已经改变 。清零
for(j=1;j<i;j++)
{
if(i%j==0)//这一块是如果能够整除,那么就是该数的因子,我们累加起来

{s+=j;
}
}
if(s==i) //因子的和与原数比较,如果正确就输出
{printf("%d\n",i);
sum++;
}
}
printf("完数的个数:%d\n",sum);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-29
//
本程序演示一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数
#include"stdio.h"
main()
{
int
i,j,s,sum;
printf("完数:\n")
;
sum=0;
for(i=2;i<=1000;i++)
{
s=0;
;//此处s=0一定要加,因为前几次循环的时候s的值已经改变
。清零
for(j=1;j<i;j++)
{
if(i%j==0)//这一块是如果能够整除,那么就是该数的因子,我们累加起来
{s+=j;}
}
if(s==i)
//因子的和与原数比较,如果正确就输出
{printf("%d\n",i);sum++;
}
}
printf("完数的个数:%d\n",sum);
}
第2个回答  2012-10-27
#include<stdio.h>#include<math.h>
int sx(double n){doublei,k;k=sqrt(n)+1;
for(i=3;i<k;i+=2) if(fmod(n,i)==0)return 0;
return 1;}//判断是否为素数
int main(){double i,k,t,p;for(p=2;p<=31;p++){if(sx(p)==0)continue;t=1;
for(k=1;k<=p;k++)t=t*2;i=t/2;t--;if(sx(t)==1)printf("p=%3.01f\ wq=%10.01f*%10.01f=%20.01f\n",p,i,t,i*t);}}
//应用欧几里得实现完全数的算法
//自己改改吧
相似回答