您的位置:

c语言完数个数,c语言中完数

本文目录一览:

用C语言求给定区间内的完数个数...

源程序如下:

#include

stdio.h

void

printperfect(int

number);

int

isperfect

(int

);

int

main()

{

int

a,b,count=0;

scanf("%d%d",a,b);

int

x=ab?a:b;

int

y=ab?a:b;

for

(;x=y;x++)

{

if

(isperfect(x))

{

printperfect(x);

count=count+1;

}

}

printf("区间%d~%d完数个数为%d\n",a,b,count);

return

0;

}

int

isperfect(int

number)

{

int

sum=0;

for

(int

i=1;inumber;i++)

if

(number%i==0)

sum+=i;

return

sum==number;

}

void

printperfect(int

number)

{

printf("%d=1",number);

for

(int

i=2;inumber;i++)

if

(number%i==0)

printf("+%d",i);

printf("\n");;

}

VC++6.0测试如下:

C语言如何判断这个数是完数?

1、打开c语言编辑器,新建一个C语言空白文件:

2、然后就可以开始编写代码了,这里完数的意思就是一个数等于它的因子之和,比如6的因子为1、2、3,而6刚好是这些数之和。根据完数的定义,程序要输入一个数的范围,接着计算出所选取的整数i的因子,将各因子累加到变量s ,若s等于i,则可确认i为完数:

3、最后运行查询,输入一个范围,程序就会自动查找这个范围内的数字里有那些完数,计算完成后会将其结果打印出来:

C语言判断区间内完数的个数?

你的程序没有错误,超时的问题主要是因为你的找完数的算法有问题,其中有大量的计算是无用的。比如6是一个完数,按照你的算法是用6除以1至5来找出所有因子,这样你就用了5次计算,实际有用的计算到3就可以了,这样就少了2次计算,节省了时间。对于越大的完数,无用的计算就越多。找完数算法可以这样优化:一个数的所有因子中最大的因子必定小于等于该数的一半(除了其本身以外),所以可以把 for(j=1; ji; j++) 中的条件改为 for(j=1; j=(int)(i/2); j++) ,这样的话,计算次数就减少了至少一半,所花费的时间也就少了。

c语言10000以内完数的个数

完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。

1000以内所有完数

C语言代码:

#include stdio.h

/**CopyRight@fantasy0707*/

#define N 1000 //完数求解范围

main()

{

int i,j,sum; //sum用来存放因子之和

for(i=1;iN;i++) //对1到1000以内的数依次尝试

{

sum=0; //给sum赋值,同时也是对上一次的值清空

for(j=1;j=i/2;j++) //查找因子

{

if(i%j==0) // 如果是因子

{

sum+=j; //把当前的因子累加到sum中

}

}

if(sum==i) //判断是不是完数,即因子之和等于自身

{

printf("%-5d its factors are: ",i); //是完数,输出

for(j=1;j=i/2;j++) //再次找出这个完数的因子

{

if(i%j==0) //输出各个因子

printf("%d,",j);

}

printf("\n");

}

}

}