065-完全数的求解

手撕代码完全数竟然写错了

伤心欲绝 书写1到1000的完全数

1
2
3
4
5
6
7
8
# 完全数
for aa in range(1,1001): #求一到1000的完全数
    sum = 0 #设置一个求和变量
    for o in range(1,aa):   #从1开始看o是不是因数,直到aa的前一个数字,自己本身是不可以的
        if aa%o == 0: #如果aa对o求余是等于0的那么就是因数
            sum += o #进行累加
    if sum == aa: #最后判断是不是相等
        print(aa) #相等就是完全数

执行结果:

1
2
3
6
28
496

写成函数的形式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 29 19:39:34 2019

@author: zangz
"""
def gong_yin_shu(n):  #求一个数所有的公因数
    alist =[] #记录公因数
    for o in range(1,n):
        if n%o ==0:
            alist.append(o)
    return alist
# 完全数
def wan_quan_shu(n):
    for aa in range(1,n+1): #求一到1000的完全数
        sum1 =sum( gong_yin_shu(aa))
        if sum1 == aa: #最后判断是不是相等
            print(aa) #相等就是完全数