Problem B: 求完数

输入一个正整数 repeat (0<repeat<10),做repeat 次下列运算:
输入 2 个正整数m 和n(1<=m,n<=1000),输出m 到n 之间的所有完数(完数就是因子和与它本身相等的数)。

#include <stdio.h>

int main()
{
int repeat,i;
scanf("%d",&repeat);
for(i=0;i<repeat;i++)
{
int m,n,j,sum;
scanf("%d%d",&m,&n);
for(int k=m;k<n;k++)
{
if(k==1)
printf("%d\n",k);
  sum =0;
      for(j=1;j<k-1;j++) //要用两个循环进行。计算1-k-1中k的因子和。需要1的原因:因为1也是k的一个真因子,西算因子和时也要算上。
      if(k % j==0)
      sum += j;
      if(sum == k)
      printf("%d\n",k);
}
}
return 0;

}

解题思路:

1、输入m-n,要判断这个区间内的数是否为完数,所以要吧这个区间内的数遍历一遍(利用for循环),对这个区间内的数一个一个进行判断是否为完数

2、先将一个数的真因子加和,在对因子和与数的本身进行比较,判读是否相等。若相等,输出这个数即可。

猜你喜欢

转载自blog.csdn.net/xx1257gd/article/details/81057379