本文目录一览:
用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");
}
}
}