C++を使ってAとBの間に挿入されるN個の幾何平均(等比中項)を求める方法
3つの整数 A、B、N が与えられたとき、AとBの間に挿入されるN個の幾何平均(等比中項)を求めることを考えます。
例として、A = 2、B = 32、N = 3 の場合、出力は 4、8、16 となります。
考え方:等比数列の性質を利用する
この問題は非常にシンプルです。AとBをそれぞれ初項・末項とする等比数列の中間に、N個の要素を挿入すればよいのです。
G1、G2、…、Gn をn個の幾何平均とすると、数列は次のようになります。
A、G1、G2、…、Gn、B
このとき、Bは数列の (N + 2) 番目の項に相当します。そこで、等比数列の一般項の公式から、以下の式が成り立ちます。
$$B=A*R^{N+1}$$
$$R^{N+1}=\frac{B}{A}$$
$$R=\lgroup \frac{B}{A}\rgroup^{\frac{1}{N+1}}$$
公比 R が求まれば、各幾何平均は A × Ri(i = 1 ~ N)として順に計算できます。
C++での実装例
#include<iostream>
#include<cmath>
using namespace std;
void showMeans(int A, int B, int N) {
float R = (float)pow(float(B / A), 1.0 / (float)(N + 1));
for (int i = 1; i <= N; i++)
cout << (A * pow(R, i)) <<" ";
}
int main() {
int A = 3, B = 81, N = 2;
showMeans(A, B, N);
}実行結果
9 27
コードの解説
まず、公式に基づいて公比 R を計算します。pow() 関数を使い、(B / A) の 1/(N+1) 乗を求めています。その後、forループで i を 1 から N まで回しながら、A × Ri を順に出力することで、AとBの間のN個の幾何平均がすべて得られます。
上記の例では A = 3、B = 81、N = 2 なので、公比は 81/3 = 27 の平方根である 3 となり、出力は 9 と 27 になります。実際、3、9、27、81 という等比数列が正しく構成されていることが確認できます。
-
C++でax + by = nを満たすxとyを求める方法
この問題では、3つの整数値 a、b、n が与えられます。私たちのタスクは、ax + by = n を満たす x と y を見つけることです。問題の理解まず、具体例を見て問題を把握しましょう。入力 : a = 4, b = 1, n = 5出力 : x = 1, y = 1この場合、4 × 1 + 1 × 1 = 5 となり、確かに方程式を満たしています。解法のアプローチこの問題に対するシンプルな解決策は、0 から n までの範囲で方程式を満たす値を順に探していくことです。これを実現するために、方程式を次のように変形します。x = (n − by) / ay = (n − ax) / bx の候
-
C++とオイラー特性でサッカーボールの五角形・六角形の数を求める方法
サッカーボールをよく見ると、黒い五角形と白い六角形がパズルのように組み合わさり、完璧な球体を形作っていることがわかります。本記事では、オイラー特性(Euler characteristic)という数学的手法を用いて、サッカーボール上に存在する五角形と六角形の数を求める方法を解説し、最後にC++での実装例も紹介します。 オイラー特性とは オイラー特性とは、位相空間における図形や構造の特徴を表す数値です。球面の場合、オイラー特性は常に2になることが知られており、この性質を利用することで、サッカーボール上の五角形と六角形の数を計算できます。 オイラー特性では、以下の要素を使用します。 χ(S) —