C++でn番目のスターナンバー(星形数)を求めるプログラム
この記事では、整数 n が与えられたときに、n番目のスターナンバー を求めるC++プログラムの作成方法を解説します。
スターナンバーとは?
スターナンバー(Star Number)とは、中心に点を置き、その周囲に六芒星(六角星)の形を描いたときの点の総数を表す特殊な数です。図形的には「中心付き六芒星数」と呼ばれることもあります。
スターナンバーの例は以下の通りです。
1, 13, 37, 73, 121, ...
問題の理解
具体的な入力と出力の例を見てみましょう。
入力
n = 5
出力
121
n = 5 のとき、5番目のスターナンバーである 121 が出力されます。
解法のアプローチ
n番目のスターナンバーは、次の一般項の公式から求めることができます。
まず、各項がどのように構成されているか観察してみましょう。
n = 2 → 13 = 12 + 1 = 6(2) + 1 n = 3 → 37 = 36 + 1 = 6(6) + 1 n = 4 → 73 = 72 + 1 = 6(12) + 1 n = 5 → 121 = 120 + 1 = 6(20) + 1
この規則性から、n番目の項は次の式で表せることがわかります。
n番目のスターナンバー = 6 × n × (n − 1) + 1
実際に検証してみると、n = 5 の場合は 6 × (5 × 4) + 1 = 120 + 1 = 121 となり、正しい結果が得られます。
C++での実装例
上記の解法を実際に動作させるプログラムは以下の通りです。
サンプルコード
#include <iostream>
using namespace std;
int findStarNo(int n){
int starNo = ( 6*(n*(n - 1)) + 1 );
return starNo;
}
int main(){
int n = 4;
cout<<"The star number is "<<findStarNo(n);
return 0;
}実行結果
The star number is 73
まとめ
スターナンバーは、公式 6 × n × (n − 1) + 1 を使えばO(1)の計算量で簡単に求められることがわかりました。図形数の一種として、六芒星の形状と密接に関連した興味深い数列です。ぜひ自分でもコードを書いて、さまざまなnの値で試してみてください。
-
C++で最小公倍数(LCM)を求めるプログラム:初心者向けに2つの方法を解説
最小公倍数(LCM: Least Common Multiple)とは、2つの整数に共通する倍数の中で最も小さい数のことです。プログラミングの基礎的なアルゴリズム学習においても頻出のテーマであり、C++を使えば簡単に求めることができます。最小公倍数とは?具体例で確認例として、15と9という2つの数を考えてみましょう。それぞれ素因数分解すると次のようになります。15 = 5 × 3 9 = 3 × 3この場合、15と9の両方を割り切れる最小の数、つまり最小公倍数は 45 となります。方法1:大きい方の数から順に増やしていく方法まず紹介するのは、最も直感的なアプローチです。2つの数のうち大きい方
-
C++で2つの数の最大公約数(GCD)を求めるプログラム
最大公約数(GCD)とは最大公約数(GCD: Greatest Common Divisor)とは、2つの整数をどちらも割り切る正の整数のうち、最も大きい数のことです。プログラミングの基礎的なアルゴリズム問題としてよく取り上げられるテーマであり、分数の約分や暗号処理など、さまざまな場面で活用されます。例として、45と27という2つの数を考えてみましょう。45 = 5 × 3 × 327 = 3 × 3 × 3両方の数に共通する素因数は「3 × 3」であるため、45と27の最大公約数は9となります。方法1:ユークリッドの互除法による実装2つの数の最大公約数を求める最も効率的な方法が「ユークリッド