和数,也即其所有因数的加总正好等于其本身。
比如说:6=1+2+3。
掌握了这个规律之后,我们首先来对其进行一下分析:我们首先需要定义一个范围,比如1000以内所有的和数是多少,然后通过for循环遍历这个范围内所有的数,通过遍历的数逐个和其因子进行求余,将其因子放入至一个列表当中,最后再将列表当中的因子相加求和判断是否是其和数本身即可。
def f(n): # 定义一个函数f(n)
list = [] # 同时创建一个空列表
for i in range(1,n+1): # 将判断完数的范围值赋值给i
for j in range(1,i): # 将所有符合条件的因子赋值给j,其中j的范围不会超过i.
if i%j==0: # 条件判断,遍历i中的数,并且用其遍历的数对其因子j求余,如果余数为0 则表示其为和数因子
list.append(j) # 将和数因子加入到列表当中
if sum(list) == i: # 对列表中,和数的因子进行判断
print(i) # 并打印出和数
list = [] # 用空列表接收和数因子的值
if __name__ == '__main__': # 对函数进行封装
n = int(input("请输入最大范围数字:"))
f(n) # 将输入值回传给上面的函数f(n)
当然了,除了上述的方法之外,我们还有一个更加简单的方法,具体如下:
def f(n): # 我们定义一个函数f(n)
for i in range(1,n+1): # 将判断完数的范围值赋值给i
sum = 0 # 对完数的因子初始化值
for j in range(1,i): # 完数因子的范围
if i%j == 0: # if条件进行判断
sum += j # 循环体不断对sum进行求和定义。
if sum == i: # j循环体外,再对所有因子所求的和进行判断,如果因子相加等于完数,则满足完数条件。
print(i) # 打印出和数
if __name__ == '__main__': # 将函数f(n)进行封装
n = int(input("请输入最大范围数字:"))
f(n) # 将值传回上面所定义的函数当中。
方法二中,我们无需创建空列表,直接对其因子进行初始化,然后对其因子直接进行sum的求和,最后再对sum的值进行判断即可。
2020年2月22日
北京市通州区京贸中心
网友评论