6688鸭鸭 发表于 2020-3-22 18:31:26

希望看得懂的朋友解释一下,谢谢

import math



for num in range(1, 10000):

    result = 0

    for factor in range(1, int(math.sqrt(num)) + 1):

      if num % factor == 0:

            result += factor

            if factor > 1 and num // factor != factor:

                result += num // factor

    if result == num:

      print(num)

希望解释一下以上这段求完美数的代码,菜鸟看不懂{:5_100:}

最后的魁拔 发表于 2020-3-22 19:03:00

建议试数,或者调试一下

March2615 发表于 2020-3-22 19:50:54

import math

# 完美数
# e.g. 28 = 1 * 28 = 2 * 14 = 4 * 7 = 1 + 2 + 4 + 7 + 14

# 找出1-10000之间的完美数
for num in range(1, 10000):
    result = 0
    for factor in range(1, int(math.sqrt(num)) + 1):
      if num % factor == 0:
            result += factor# 这一步找出num的因子
            # 同时判断另一个因子是不是符合条件
            # 大于1是因为完美数的定义是除去本身的因子
            # and后面的条件是防止同一个因子使用两次(考虑到平方的特殊情况)
            if factor > 1 and num // factor != factor:
                result += num // factor
    if result == num:# result是因子之和,和num相等时即满足完美数的定义并输出
      print(num)
   

希望你能看得懂

coolsummer2080 发表于 2020-3-22 20:00:16


import math#导入math模块


for num in range(1, 10000): #循环9999次,测试1-10000之间有哪些是完美数。

    result = 0#完美数即是该数的所有真因数(子)的和等于该数本身,这里用result存放因数和,初值设为0。

    for factor in range(1, int(math.sqrt(num)) + 1):在1到math.sqrt(num)+1范围内测试每个factor,

      if num % factor == 0:#如果此表达式成立,则factor为num的真因数(子)

            result += factor   #将该真因子加入result

            if factor > 1 and num // factor != factor:

                result += num // factor    #加上与factor对应的另一个因数(子)。

    if result == num: #根据完美数的定义,如果条件成立即为完美数

      print(num)

如果能看懂我的解释,{:5_109:}{:5_109:}给个最佳答案呗{:5_109:}{:5_92:}

楚风暮雨 发表于 2020-9-21 18:12:38

请问下为什么只用检测 ‘在1到math.sqrt(num)+1范围内测试每个factor’ 这个范围?
页: [1]
查看完整版本: 希望看得懂的朋友解释一下,谢谢