题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
#include<stdio.h>
#define N 1000
//int main()
//{
// int i, j, k, n, sum;
// int a[256];
// for (i = 2; i <= N; i++)
// {
// sum = a[0] = 1;
// k = 0;
// for (j = 2; j <= (i / 2); j++)
// {
// if (i % j == 0)
// {
// sum += j;
// a[++k] = j;
// }
//
// }
// if (i == sum)
// {
// printf("%d=%d", i, a[0]);
// for (n = 1; n <= k; n++)
// printf("+%d", a[n]);
// printf("\n");
// }
//
// }
// return 0;
//}
int perfect(int n)
{
int s = 1, t = n, i;
for (i = 2; i < t; i++)
{
if (n % i == 0)
{
t = n / i;
s += i;
if (t != i) s += t;
}
}
if (n == s) return 1;
else return 0;
}
int main()
{
int i, j, t;
for (i = 1; i < 1001; i++)
{
if (perfect(i))
{
printf("%d=1", i);
t = i;
for (j = 2; j < t; j++)
{
if (i % j == 0)
{
t = i / j;
printf("+%d+%d", j, t);
}
}
printf("\n");
}
}
}