等差数列(A.P.)の和の比が与えられたとき、m項目とn項目の項の比を求めるC++プログラム
本記事では、等差数列(A.P.)における初めの m 項の和と初めの n 項の和の比が与えられたときに、m 項目の項と n 項目の項の比を求める問題について解説します。
入力: m = 8, n = 4 出力: 2.142 入力: m = 3, n = 2 出力: 1.666 入力: m = 7, n = 3 出力: 2.6
解法のアプローチ
m 項目と n 項目の項の比をプログラムで求めるには、まず数式を簡略化する必要があります。ここで、Sm を等差数列の初めの m 項の和、Sn を初めの n 項の和とします。
- a … 初項
- d … 公差
問題の条件として、次の関係式が成り立ちます。
Sm / Sn = m2 / n2
等差数列の和の公式は次の通りです。
Sm = (m/2)[ 2a + (m−1)d ]
この公式を条件式に代入すると、
m2 / n2 = (m/2)[ 2a + (m−1)d ] / (n/2)[ 2a + (n−1)d ]
両辺を整理すると、
m / n = [ 2a + (m−1)d ] / [ 2a + (n−1)d ]
交叉乗算(たすき掛け)を行うと、
n[ 2a + (m−1)d ] = m[ 2a + (n−1)d ]
2an + mnd − nd = 2am + mnd − md
2an − 2am = nd − md
(n − m)・2a = (n − m)・d
したがって、
d = 2a
次に、m 項目の項の一般項の公式は以下の通りです。
Tm = a + (m−1)d
よって、m 項目と n 項目の項の比は、
Tm / Tn = [ a + (m−1)d ] / [ a + (n−1)d ]
ここで d = 2a を代入すると、
Tm / Tn = [ a + (m−1)・2a ] / [ a + (n−1)・2a ]
Tm / Tn = a( 1 + 2m − 2 ) / a( 1 + 2n − 2 )
Tm / Tn = (2m − 1) / (2n − 1)
これにより、m 項目と n 項目の項の比を求めるためのシンプルな公式が得られました。それでは、この公式を使った C++ のコードを見ていきましょう。
コード例
上記のアプローチを実装した C++ コード
#include <bits/stdc++.h>
using namespace std;
int main(){
float m = 8, n = 4;
// 公式を適用して比を計算
float result = (2 * m - 1) / (2 * n - 1);
cout << "m項目とn項目の項の比は: " << result;
return 0;
}出力結果
m項目とn項目の項の比は: 2.14286
まとめ
本チュートリアルでは、m 項の和と n 項の和の比が与えられたときに、m 項目と n 項目の項の比を求める問題を取り上げました。和の公式と一般項の公式を段階的に簡略化することで、最終的に「(2m − 1) / (2n − 1)」というシンプルな式を導き出し、これを C++ プログラムとして実装しました。なお、この手法は C や Java、Python など他のプログラミング言語でも同様に実装可能です。本記事が皆さんの学習の一助となれば幸いです。
-
C++で指定された値を持つ葉ノードを削除するアルゴリズム
問題の概要二分木と整数 target が与えられたとき、値が target と一致するすべての葉ノードを削除することを考えます。ここで重要なのは、葉ノードを削除した結果、その親ノードが新たに葉ノードになり、かつその値が target と一致する場合には、その親ノードも同様に削除しなければならないという点です。この操作は、削除できるノードがなくなるまで繰り返し行います。例えば、下図のような二分木があり、target が 2 の場合、最終的な木は次のようになります。解法のアプローチこの問題は、再帰を用いた後順(ボトムアップ)処理によって効率的に解くことができます。具体的な手順は以下の通りです。ルー
-
C++でGCDとLCMの値から条件を満たす数のペアの総数を求める方法
この記事では、最大公約数(GCD)と最小公倍数(LCM)の値が与えられたとき、その両方の条件を満たす整数のペアが全部で何通り存在するかを求める方法を解説します。 例として、GCDが2、LCMが12の場合を考えてみましょう。この条件を満たすペアは (2, 12)、(4, 6)、(6, 4)、(12, 2) の4つです。プログラムの目的は、このペアの総数「4」を計算することです。 解決の鍵となる数学的性質 2つの整数 a と b の間には、次のような重要な関係が常に成り立ちます。 a × b = GCD(a, b) × LCM(a, b) また、a と b はいずれも必ず GCD で割り切れるた