根据该定义 可以得出判断完数的函数如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0
for(i = 1i <=n/2i ++)
if(n%i == 0) s+= i//统计所有真因子的和。
if(s == n) return 1//如果与原值相等,则该数为完数。
return 0//不是完数。
}
根据该函数,只需要对需要打印的范围内1 ~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0
for(i = 1i <=n/2i ++)
if(n%i == 0) s+= i//统计所有真因子的和。
if(s == n) return 1//如果与原值相等,则该数为完数。
return 0//不是完数。
}
int main()
{
int n
for(n = 1n <1000n++)
if(is_perfect_number(n)) printf("%d,",n)
}
求1000以内的完数的C语言代码如下:
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,33550336等等。截至2018年,相关研究者已经找到51个完全数。
完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)。
#include <stdio.h>
int main()
{
int n=1000
int r,j,i
for(i=1i<=ni++){
r = 0
for(j=1j<ij++){
if(i%j == 0){
r = r + j
}
}
if(r == i){
printf("the result is:%d\n",r)
}
}
return 0
}
输出结果为: 6,28,496,
即1000以内的完数只有6、28、496三个数字。
重置sum的位置错了,放到内循环的开头:
#include <stdio.h>int wanquanshu()
{
int n, i, k, sum
while (scanf("%d", &n)!=EOF)
{
for (i=1 i<=n i++)
{
sum=0 //放在这里
for (k=1 k<i k++)
{
if (i%k==0)
{
sum=sum+k
}
}
if (sum==i)
{
printf("%d\n", i)
}
}
}
return 0
}
void main()
{
wanquanshu()
}