2014-04-27 32 views
2

我需要在python中編寫一個函數,告訴我兩個數字(m,n)是否友好。 我知道友好的數字是兩個不同的數字,因此相關的每個正確的除數的總和等於另一個數字。python:友好的數字檢查

我不能從這裏

def ami_check(m,n): 

通過我將不勝感激幫助。

+2

爲了解決這個問題,定義,計算一個數字的約數的總和(因爲你需要做一個函數那兩次)。提示:如果該函數是給定數字的除數,該函數將循環檢查適當範圍的每個整數。 – Inspired

回答

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) 
3

定義,Amicable NumbersWikipedia

親情號碼是兩個不同的號碼如此相關,使得的 的總和每個適當的因數等於另一個數字。 (A正確 除數一些比 數字本身其他的是一些積極因素

打破下來:

  1. two different numbers OK
  2. the sum of the proper divisors of each OK
  3. is equal to the other number OK

Then:

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 
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