Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最初のn個の自然数の二乗和を求めるプログラム

この記事では、与えられた問題文に対する解法とそのアプローチについて学びます。具体的には、最初のn個の自然数の二乗和(1² + 2² + 3² + … + n²)を求める方法を、2つの異なる手法を使って解説します。

問題文

正の整数Nが入力として与えられます。このとき、12 + 22 + 32 + … + N2 の値を計算してください。

この問題は、主に以下の2つの方法で解くことができます。

  • 繰り返し処理による乗算と加算の計算
  • 数学の公式を利用した直接計算

アプローチ1:繰り返し処理による計算

この方法では、1からnまでループを実行し、各i(1 ≤ i ≤ n)についてiの二乗を求め、変数smに順次加算していきます。シンプルで直感的な方法ですが、nが大きくなると計算量が増える点に注意が必要です。

コード例

def sqsum(n):
    sm = 0
    for i in range(1, n + 1):
        sm = sm + pow(i, 2)
    return sm

# メイン処理
n = 5
print(sqsum(n))

出力結果

55

n = 5の場合、1 + 4 + 9 + 16 + 25 = 55となり、正しく計算できていることが確認できます。

アプローチ2:数学的公式を利用する方法

ご存知の通り、自然数の二乗和は以下の公式で表すことができます。

n * (n + 1) * (2 * n + 1) // 6

この公式を使えば、ループ処理を行わずにO(1)の計算量で答えを求めることができるため、非常に効率的です。大きなnに対しても高速に動作します。

コード例

def squaresum(n):
    return (n * (n + 1) * (2 * n + 1)) // 6

# メイン処理
n = 10
print(squaresum(n))

出力結果

385

n = 10の場合、公式により10 × 11 × 21 ÷ 6 = 385となり、正しい結果が得られています。

まとめ

この記事では、最初のn個の自然数の二乗和を求める2つのアプローチについて学びました。小さな値や学習目的には繰り返し処理が分かりやすく、パフォーマンスを重視する場合や大きな入力値を扱う場合は数学的公式を利用する方法が最適です。用途に応じて適切な手法を選択しましょう。

  1. Pythonで2つの数の公約数を求めるプログラムの書き方

    はじめに この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 2つの整数が与えられたとき、それらに共通する約数(公約数)の個数を表示する必要があります。 アプローチの考え方 まず、入力として受け取った2つの数のうち、小さい方の値(最小値)を計算します。続いて、1からその最小値までの各値で2つの数を順番に割っていき、両方の数を割り切ることができるかどうかをループ処理で確認します。 条件が真(True)と評価されるたびに、カウンターを1ずつ増加させます。最終的なカウンターの値が、2つの数の公約数の個数となります。 実装例 それでは、以下のコードで実際の実装を見てみましょう。

  2. Pythonでフィボナッチ数を求める方法:再帰と動的計画法の2つのアプローチを徹底解説

    本記事では、「n番目のフィボナッチ数を計算する」という問題に対する解決策と考え方を、2つの異なるアプローチ(再帰的手法と動的計画法)のコード例とともにわかりやすく解説します。 問題の概要 今回の課題は、n番目のフィボナッチ数を求めることです。 フィボナッチ数列 Fn は、次の漸化式によって定義されます。 Fn = Fn-1 + Fn-2 初期値(シード値)は以下の通りです。 F0 = 0、F1 = 1 この問題を解くには、主に次の2つの方法があります。 再帰的なアプローチ 動的計画法によるアプローチ アプローチ1:再帰的な手法 まずは、定義そのものをそのままコードに反映させた再帰的な実