写一个自定义函数f(m)用于计算其所有因子(包括1和m)之和。若有m<n,且f(m)=f(n)=m+n+1,则m和n是拟互满数,要求找出40~200间的所有拟互满数
def f(m):
factors = [1] # 因子列表,初始值为1
for i in range(2, int(m ** 0.5) + 1):
if m % i == 0:
factors.append(i)
if i != m // i:
factors.append(m // i)
factors.append(m) # 将m本身加入因子列表
return sum(factors) # 返回因子之和
def findAmicableNumbers():
amicable_numbers = []
for m in range(40, 201):
n = f(m) - m - 1 # 计算拟互满数n
if n > m and f(n) == m + n + 1:
amicable_numbers.append((m, n))
return amicable_numbers
print(findAmicableNumbers())
解释:
代码分为两个函数:f(m)
和findAmicableNumbers()
。
f(m)
函数用于计算一个数m
的所有因子之和,具体实现如下: