用C语言求1000以内的完数?

2024-11-19 03:40:09
推荐回答(5个)
回答(1):

完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义 可以得出判断完数的函数如下:
#include
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。

return 0;//不是完数。
}
根据该函数,只需要对需要打印的范围内1 ~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。

return 0;//不是完数。
}

int main()
{
int n;
for(n = 1; n < 1000; n++)
if(is_perfect_number(n)) printf("%d,",n);
}

回答(2):

完数,即完全数(Perfect
number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义
可以得出判断完数的函数如下:
#include
int
is_perfect_number(int
n)
{
int
i,s=0;
for(i
=
1;
i
<=n/2;
i
++)
if(n%i
==
0)
s+=
i;//统计所有真因子的和。
if(s
==
n)
return
1;//如果与原值相等,则该数为完数。
return
0;//不是完数。
}
根据该函数,只需要对需要打印的范围内1
~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include
int
is_perfect_number(int
n)
{
int
i,s=0;
for(i
=
1;
i
<=n/2;
i
++)
if(n%i
==
0)
s+=
i;//统计所有真因子的和。
if(s
==
n)
return
1;//如果与原值相等,则该数为完数。
return
0;//不是完数。
}
int
main()
{
int
n;
for(n
=
1;
n
<
1000;
n++)
if(is_perfect_number(n))
printf("%d,",n);
}

回答(3):

给:
#include

int ws(int a,int b,int c)
{
int d;
if (a>c) {
if (a%c==0)
b+=c;
d=ws(a,b,c+1);
}
else if (c==a) {
if (b==a) {
return 1;
}
else return 0;
}
if (c==a-1&&d) {
printf("%d is Prefect number:\t",a);

}
if (d&&(a%c==0)) {
printf("%d ",c);
}
else if (!d) return 0;
if (c==1)
{putchar('\n');
return d;}

}
int main(void)
{
int i;

for (i=1; i<=1000; i++)
ws(i,0,1) ;
return 0;
}

运行结果为:
6 is Prefect number: 3 2 1
28 is Prefect number: 14 7 4 2 1
496 is Prefect number: 248 124 62 31 16 8 4 2 1
Press any key to continue

回答(4):

回答(5):

6,28,496

#include
void main()
{
int n,i,s;
for(n=2;n<=1000;n++)
{
s=0;
for(i=1;i<=n/2;i++)
if(n%i==0)
s+=i;
if(s==n)
printf("%d是完数!\n",n);
}
}