c语言10000以内完数的个数

#include<stdio.h>
main()
{
int a=1,b=0,i,j;
for(i=6;i<=9999;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
a+=j;
}
}
if(a==i)
{
b+=a;
}
}
printf("%d\n",b);
}
麻烦帮忙改一下错
是求完数之和

完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。
1000以内所有完数
C语言代码:
#include <stdio.h>
/**CopyRight@fantasy0707*/
#define N 1000 //完数求解范围
main()
{
int i,j,sum; //sum用来存放因子之和

for(i=1;i<N;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");
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-14
#include<stdio.h>
main()
{
int a=1,b=0,i,j;
for(i=6;i<=9999;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0) //可以整除,说明这个i是合数,用a做个标志,并跳出该i的合数检验循环
{
a=0;break;
}
}
if(a==0) //查看合数标志
{
b+=i; //当前i是合数,加进去
a=1; //重新置一下标志
}
}
printf("%d\n",b);
}追问

不对啊!

第2个回答  2013-09-14
#include<stdio.h>
main()
{
int b=0,i,j;
for(i=6;i<=9999;i++)
{
int a=1
for(j=2;j<i;j++)
{
if(i%j==0)
{
a+=j;
}
}
if(a==i)
{
b+=a;
}
}
printf("%d\n",b);
}
第3个回答  推荐于2017-10-09
/*
程序的功能:
如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”,
例如6的因子是1,2,3,且6=1+2+3,因此6是完数。
编写程序,输入数据范围,输出该范围之内的所有完数及其个数。*/
#include <stdio.h>

int main(void)
{
int i, k1, k2, from, to, count, num = 0, arr[1000],sum = 0;

printf("Input 2 integer to determin the range.\n");
scanf("%d%d", &from, &to); //输入数据范围

/* 逐个判断在from到to的范围内的哪些数是完数 */
for (k1=from; k1<=to; k1++)
{
/* 找出k1的各个因子,并将各因子依次存放到数组arr中,因子的个数由count记录 */
for (i=1, count=0; i<=k1/2; i++)
{
if (k1 % i == 0)
{
arr[count] = i;
count++;
}
}
/* 将k1的各个因子相加,各因子之和存放到变量k2中 */
for (i=0, k2=0; i<count; i++)
{
k2 = k2 + arr[i];
}
/* 如果k1等于k2,则k1是完数 */
if (k1 == k2)
{
printf("%d ", k1); //输出k1的值
num++; //变量num的值增加1(变量num用来记录完数的数量)
sum += k1;
}
}
printf("\ncount=%d\n", num); //输出完数的个数
printf("\nsum=%d\n", sum); //输出完数的和

return 0;
}
多功能的, 自己输入范围,希望能帮到你本回答被提问者采纳