0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで等差数列・等比数列の総和を求める関数

Posted at

まずは、数列をlistに格納してからsumで総和を計算する方法。

  • Space Complexity: O(n)(たぶん)
  • Time Complexity: O(n)
# 等差数列
def sigma_arith_loop(a, d, l, m):
    """
    a: int or float - 初項
    d: int or float - 公差
    l: int          - 計算の始点
    m: int          - 計算の終点
    """
    ls = [a + d * (k - 1) for k in range(l, m + 1)] 
    
    return sum(ls)

# 等比数列
def sigma_geo_loop(a, r, l, m):
    """
    a: int or float - 初項
    r: int or float - 公比
    l: int          - 計算の始点
    m: int          - 計算の終点
    """
    ls = [a * r ** (k - 1) for k in range(l, m + 1)]
    
    return sum(ls)

次に、公式を使用する方法。こちらの方が計算効率はいい。

  • Sapce Complexity: O(1)
  • Time Complexity: O(1)
# 等差数列
def sigma_arith(a, d, l, m):
    """
    a: int or float - 初項
    d: int or float - 公差
    l: int          - 計算の始点
    m: int          - 計算の終点
    """
    # この数列の一般式は a_n = a + (n-1)d
    # これをa_n = dn + Bの形に変換すると  a_n = dn + (a-b)
    # 等差数列の総和の公式に当てはめる
    return (m - l + 1) * (2 * a + (m + l - 2) * d) / 2

# 等比数列
def sigma_geo(a, r, l, m):
    """
    a: int or float - 初項
    r: int or float - 公比
    l: int          - 計算の始点
    m: int          - 計算の終点
    """
    # この数式の一般式はa_n = a * r ** (n-1)
    return a * (r ** m - r ** (l - 1)) / (r - 1)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?