我需要在python中编写一个函数,它告诉我两个数字(m,n)是否友好。 我知道友好数字是两个不同的数字,所以相关的数字是每个的正确除数的总和等于另一个数。
我无法从这里传球
def ami_check(m,n):
我很感激帮助。
答案 0 :(得分:4)
来自Wikipedia的定义Amicable Numbers
:
Amicable数字是两个不同的数字,因此它们的总和相关 每个的适当除数等于另一个数。 (正确的 除数之外,数的除数是该数的正数 数字本身。
打破这一点:
two different numbers
确定the sum of the proper divisors of each
确定is equal to the other number
确定然后:
def ami_check(x,y):
if x==y: return False # 1
sum_x=sum(e for e in range(1, x//2+1) if x%e==0) # 2
sum_y=sum(e for e in range(1, y//2+1) if y%e==0) # 2
return sum_x==y and sum_y==x # 3
答案 1 :(得分:0)
您可以使用此代码:: 检查友好数字
def sumPropDiv(n):
"""returns sum of proper divisors of n"""
dSum = 0
for x in range(1, n/2 + 1):
if n % x == 0:
dSum += x
return dSum
def amicSum(number):
"""finds the sum of all amicable numbers less than number, with number greater than 4."""
answer = 0
for x in range(4, number):
if sumPropDiv(x) > 4:
if sumPropDiv(sumPropDiv(x)) == x and sumPropDiv(x) != x:
answer += x
print x, "and", sumPropDiv(x), "are an amicable pair."
return answer
print amicSum(10000)
答案 2 :(得分:0)
这是一次尝试,
def factors(n):
return sorted(reduce(list.__add__,
([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))[:-1]
def ami_check(m,n):
return sum(factors(m)) == n and n != m
<强>结果强>
In [1]: ami_check(220,284)
Out[1]: True
In [2]: ami_check(5545,21654)
Out[2]: False
In [3]: ami_check(2620,2924)
Out[3]: True