C语言求完数

Python021

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)

}

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

源代码如下:

#include <stdio.h>

main()

{

int i,j

int sum

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

{

sum=0

for(j=1j<ij++)

{

if(i%j==0)

sum+=j

}

if(sum==i)

{

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

for(j=1j<ij++)

if(i%j==0)

printf("%d ",j)

}

printf("\n")

}

扩展资料

1、完全数是一些特殊的自然数,它所有的真因子即除了自身以外的约数的和即因子函数,恰好等于它本身。

2、第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28。

3、有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496、8128。

#include "stdio.h"

//判断n是否是完数

bool isWanShu(int n)

{

int sum=0, j

for(j=1j<nj++)

{

if(0==n%j) sum+=j

}

if(sum==n) {

printf("%d 是完数, ", n)

return true

} else {

return false

}

}

//输出整数的n的因子(自身除外)

void printFactor(int n)

{

int i

printf("%d 的因子: ", n)

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

if(n%i==0) printf("%d ", i)

}

printf("\n")

}

int main()

{

int i

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

if ( isWanShu(i)) { //如果i是完数,则输出它的因子。

printFactor(i)

}

}

return 0

}

输出结果:

6 是完数, 6 的因子: 1 2 3

28 是完数, 28 的因子: 1 2 4 7 14

496 是完数, 496 的因子: 1 2 4 8 16 31 62 124 248