【题目描述】
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子
【输入】
N
【输出】
? its factors are ? ? ?
【样例输入】
1000
【样例输出】
6 its factors are 1 2 3 28 its factors are 1 2 4 7 14 496 its factors are 1 2 4 8 16 31 62 124 248
【代码】
找因子的方法就是把这个数从1除到这个数自身的一半,余数为0的除数就是因子。比如10,让10从1除到5即可,余数为0的除数都是10的因子,比如1,2,5。不建议用数组,不知道N多大,因子有多少,容易有空间浪费,或者出现数组越界。判断是因子后,直接输出就好。
#include<stdio.h>
void _1017()
{
/*一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子 */
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int s = 0;
for (int j = 1; j <= i / 2; j++)
{
if (i%j == 0)
{
s += j;
}
}
if (s == i)
{
printf("%d its factors are", s);
for (int m = 1; m <= i / 2; m++)
{
if (i%m == 0)
printf(" %d", m);
}
printf("\n");
}
}
}
int main()
{
_1017();
return 0;
}