题目
一个数如果恰好等于他的因子之和,这个数就称为完数,例如6 的因数有:1,2,3,而6=1+2+3,所以6就是一个完数.求出1000以内的所有的完数。
C语言实现
#include<math.h>
#include<stdio.h>
void main()
{
int f[100] = { 0 };
int n =0;
double result, i;
int j;
int he = 0;
for (int num =1;num<=1000;num++)
{
//求因数
for (i = 1; i < num; i++)
{
result = num / i;
if (floor(result) == result)
{
f[n] = (int)i;
n++;
}
}
//求所有的因数之和
for (j = 0; f[j] != 0; j++)
he += f[j];
//判断是否满足条件
if (he == num)
printf("%d ", num);
//置零
he = 0;
n = 0;
for (j = 0; j<10; j++)
{
f[j] = 0;
}
}
}
运行结果:
6 28 496 请按任意键继续. . .
python实现
import math as m
#求一个数的因数
def searchFactor(n):
f = []
for i in range(1,n):
if m.floor(n/i) == n/i:
f.append(i)
return f
def sumList(f):
s = 0
for i in range(0,len(f)):
s +=f[i]
return s
if __name__ == '__main__':
r = []
for i in range(1,1001):
if i == sumList(searchFactor(i)):
r.append(i)
print(r)
运行结果:
[6, 28, 496]
说明:c语言实现的是可以进行优化的,闲的时候再说吧。指针还是没有用上。哎
★finished by songpl,2019.1.8