寻找完美数
首先先看一下这道题目:所有真因子之和小于其本身的数称为亏数。如:4 的真因子 1、2 之和为 3,小于 4,是亏数。
所有真因子之和大于其本身的数称为盈数。如:12 的真因子 1、2、3、4、6 之和为 16,大于 12,是盈数。
不盈不亏的数,即:所有真因子之和等于其本身的数,称为完美数。如:6 的真因子 1、2、3 之和恰为 6,是完美数。
请编写程序,显示指定范围内的完美数。
思路如下:寻找完数即就是寻找目标数的所有因子之和使之相加等于目标数,在寻找因子时,循环就必不可少了,首先用一层循坏来计数的范围,再用一层循环来寻找因子,如下:
for(i=a;i<=b;i++)
sum=0;
for(j=1;j<=i/2;j++)
然后需要注意的是每经历一次for循环,就要让sum置0,接下来就用函数的思想来解决这个题:
#include <stdio.h>
int fact(int a,int b)
{
int i,j,sum=0,flag=0,p=0;
for(i=a;i<=b;i++)
{
sum=0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
sum+=j;
}
if(sum==i&&sum!=1)
{
if(p==0)
printf("%d",i); //这里是对格式有所要求
else
printf(" %d",i);
p++;
flag=1;
}
}
if(flag==0)
printf("None\n");
}
int main(void)
{
int x,y;
scanf("%d %d",&x,&y);
fact(x,y);
return 0;
}
这个是运行结果哦!
ヾ(❀ω)ノ゙这道题就大功告成啦!!!!