1000以内的完数

Python022

1000以内的完数,第1张

求1000以内的完数的C语言代码如下:

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,33550336等等。截至2018年,相关研究者已经找到51个完全数。

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

#include <stdio.h>

int main()

{

int n=1000

int r,j,i

for(i=1i<=ni++){

r = 0

for(j=1j<ij++){

if(i%j == 0){

r = r + j

}

}

if(r == i){

printf("the result is:%d\n",r)

}

}

return 0

}

输出结果为: 6,28,496,

即1000以内的完数只有6、28、496三个数字。

完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。

根据该定义 可以得出判断完数的函数如下:

#include <stdio.h>

int is_perfect_number(int n)

{

int i,s=0

for(i = 1i <=n/2i ++)

if(n%i == 0) s+= i//统计所有真因子的和。

if(s == n) return 1//如果与原值相等,则该数为完数。

return 0//不是完数。

}

根据该函数,只需要对需要打印的范围内1 ~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。

完整代码如下:

#include <stdio.h>

int is_perfect_number(int n)

{

int i,s=0

for(i = 1i <=n/2i ++)

if(n%i == 0) s+= i//统计所有真因子的和。

if(s == n) return 1//如果与原值相等,则该数为完数。

return 0//不是完数。

}

int main()

{

int n

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

if(is_perfect_number(n)) printf("%d,",n)

}

重置sum的位置错了,放到内循环的开头:

#include <stdio.h>

int wanquanshu()

{

int n, i, k, sum

while (scanf("%d", &n)!=EOF)

{

for (i=1 i<=n i++)

{

sum=0   //放在这里

for (k=1 k<i k++)

{

if (i%k==0)

{

sum=sum+k

}

}

if (sum==i)

{

printf("%d\n", i)

}

}

}

return 0

}

void main()

{

wanquanshu()

}