2013-01-09 36 views
-4

有誰知道如何在python中編碼Harmonic Series小數形式的諧波系列

H(n) = 1 + 1/2 + 1/3 + ... + 1/n 

注意:我們不允許從預定義模塊導入。輸出必須是分數形式(最低項)的答案的分子和分母。

哦,對不起。我只是一個初學者。我很抱歉。所以這是我對這個諧波系列的代碼。

n = input("Enter n:") 

def harmonic(n): 
    a=1 
    b=1 
    for d in range(2, n+1): 
      a = a*d+b 
      b = b*d 
      return (a,b) 
      x == max(a,b)%min(a, b) 
      if x == 0: 
       y=min(a,b) 
       return y 
      else: 
       y=min(a,b)/x 
       return y 
      a=a/y 
      b=b/y 
      return (a,b) 
print harmonic(n) 

怎麼回事?無論我輸入什麼,輸出總是(3,2)..怎麼了? :(請幫助..謝謝:)

+4

向我們展示你的代碼! – tostao

+7

[你有什麼試過](http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – Zirak

+1

我知道!!!!!!!!! – Gerrat

回答

3

沒有模塊,你必須做的是自己實現分數加法。此外,爲了得到最低的結果,你需要實現/獲得一個gcd函數。

當你做a/b + c/d,結果(沒有標準化)是(ad+bc)/bd。在諧波系列中,請注意其中一個分子(本例中爲c)爲1,因此結果爲(ad+b)/bd

因此,請撥打a當前分子,b當前分母和d系列中的下一個分母。僞代碼將如下所示。 n是輸入整數。

  1. a←1 {將從1/1開始}
  2. b←1
  3. 對於所有d [2 .. n] {從1/21/n,執行以下操作}
    1. aa*d + b
    2. bb*d
    3. xgcd(a,b) {標準化從這裏開始}
    4. aa/x
    5. bb/x
  4. 輸出(ab
+0

這是我的代碼..:) N =輸入( 「輸入n:」) DEF諧波(N): 一個= 1 B = 1 有效範圍內的d(2,N + 1): A = A * d + B b = b * d 回報(A,b) X == MAX(A,b)%以上(A,b) 如果x == 0: Y =分鐘(A,b) 返回是 else: y = min(a,b)/ x return y a = a/y b = b/y return(a,b) print諧波(n) – user1950302