用来练手的python 练习题,原链接 : python练习实例19
题干: 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
首先我们要理解,什么是完数。根据百度词条,完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
代码就比较简单易懂了,首先定义一个判断数字是不是完数的函数,之后就在范围内遍历就可以找到该范围内的所有完数了。
源代码如下:
import numpy as np
result_numbers = np.array([])#函数用于找到所有num的真因数
def find_factors(num):factors_mat = np.array([])# 一个数的真因数总是小于等于该数的一半demi_num = int(num/2)for i in range(1,demi_num+1):if num%i == 0:factors_mat = np.append(factors_mat, i)return factors_mat#循环遍历找到1,1000范围内的所有完数
for number in range(1,1001):sum_factors = np.sum(find_factors(number))if sum_factors == number:result_numbers = np.append(result_numbers,number)
print(result_numbers)
输出结果如下: