python:友好的数字检查

时间:2014-04-27 00:07:21

标签: python python-3.x

我需要在python中编写一个函数,它告诉我两个数字(m,n)是否友好。 我知道友好数字是两个不同的数字,所以相关的数字是每个的正确除数的总和等于另一个数。

我无法从这里传球

def ami_check(m,n):

我很感激帮助。

3 个答案:

答案 0 :(得分:4)

来自Wikipedia的定义Amicable Numbers

  

Amicable数字是两个不同的数字,因此它们的总和相关   每个的适当除数等于另一个数。 (正确的   除数之外,数的除数是该数的正数   数字本身。

打破这一点:

  1. two different numbers确定
  2. the sum of the proper divisors of each确定
  3. is equal to the other number确定
  4. 然后:

    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