最初のn個の自然数における「二乗和」と「和の二乗」の差を求めるJavaプログラム
プログラミングの学習でよく登場する古典的な数学的問題の一つに、「最初のn個の自然数について、各数値の二乗の合計(二乗和)と、合計値を二乗した値(和の二乗)の差を求める」というものがあります。この記事では、問題の内容をわかりやすく解説し、Javaによる実装例を紹介します。
問題の概要
ある整数 n が与えられたとき、以下の2つの値の差を計算するプログラムを作成します。
- 最初の n 個の自然数それぞれを二乗し、それらを合計した値(二乗和)
- 最初の n 個の自然数を合計し、その結果を二乗した値(和の二乗)
具体例で確認する
n = 3 の場合を例に、手順を順番に見ていきましょう。
n = 3 の場合 【二乗和】最初の3つの数値をそれぞれ二乗して合計 = 3×3 + 2×2 + 1×1 = 9 + 4 + 1 = 14 【和の二乗】最初の3つの数値を合計してから二乗 = (3 + 2 + 1) × (3 + 2 + 1) = 6 × 6 = 36 【差】 = 36 − 14 = 22
このように、n = 3 のときの答えは 22 となります。
効率的な計算方法:公式を使う
ループで一つずつ計算することも可能ですが、数学の公式を利用すると O(1) の定数時間で求められ、非常に効率的です。
- 二乗和の公式: n(n+1)(2n+1) / 6
- 和の公式: n(n+1) / 2(これを二乗すると和の二乗になる)
Javaでの実装例
以下は、上記の公式を用いて差を求めるJavaプログラムの完全なコードです。
public class JavaTester {
public static int difference(int n){
// 最初のn個の自然数の二乗和
int sumSquareN = (n * (n + 1) * (2 * n + 1)) / 6;
// 最初のn個の自然数の合計
int sumN = (n * (n + 1)) / 2;
// 合計値の二乗(和の二乗)
int squareSumN = sumN * sumN;
// 差を返す(絶対値で正の値に統一)
return Math.abs(sumSquareN - squareSumN);
}
public static void main(String args[]){
int n = 3;
System.out.println("Number: " + n);
System.out.println("Difference: " + difference(n));
}
}
実行結果
Number : 3 Difference: 22
コードのポイント
- sumSquareN: 公式 n(n+1)(2n+1)/6 を使って二乗和を直接計算しています。
- sumN: 等差数列の和の公式 n(n+1)/2 を使い、その後二乗することで和の二乗を求めています。
- Math.abs(): 和の二乗は常に二乗和以上になるため差は負にはなりませんが、安全のため絶対値を返すようにしています。
- 計算量: ループを使用しないため、n が大きくなっても処理速度が一定(O(1))に保たれます。
このように、数学的な公式を活用することで、シンプルかつ高速に答えを導き出せるのがこの問題の魅力です。競技プログラミングや面接対策としても役立つ定番問題なので、ぜひ理解しておきましょう。
-
最初のn個の自然数の二乗和を求めるC++プログラムの解説
はじめにこの記事では、最初のn個の自然数(1からnまで)の二乗和を求める方法について解説します。例えば、n = 4 の場合、計算結果は 1² + 2² + 3² + 4² = 1 + 4 + 9 + 16 = 30 となります。基本的なアプローチとしては、1からnまで繰り返すforループを使用し、各ステップで項の二乗を計算して合計に加算していく方法があります。このプログラムの計算量は O(n) です。しかし、O(1) の定数時間で解きたい場合は、次の級数の公式を利用できます。Σk² = n(n + 1)(2n + 1) / 6この公式を使えば、ループ処理を行わずに一発で答えを求めることが可能で
-
Pythonで最初のn個の自然数の二乗和を求めるプログラム
この記事では、与えられた問題文に対する解法とそのアプローチについて学びます。具体的には、最初のn個の自然数の二乗和(1² + 2² + 3² + … + n²)を求める方法を、2つの異なる手法を使って解説します。 問題文 正の整数Nが入力として与えられます。このとき、12 + 22 + 32 + … + N2 の値を計算してください。 この問題は、主に以下の2つの方法で解くことができます。 繰り返し処理による乗算と加算の計算 数学の公式を利用した直接計算 アプローチ1:繰り返し処理による計算 この方法では、1からnまでループを実行し、各i(1 ≤ i ≤ n)についてiの二乗を求め、変数s