希望看得懂的朋友解释一下,谢谢
import mathfor 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:} 建议试数,或者调试一下 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)
希望你能看得懂
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:} 请问下为什么只用检测 ‘在1到math.sqrt(num)+1范围内测试每个factor’ 这个范围?
页:
[1]