C++で指定された数がプロニック数(Pronic Number)かどうかを判定する方法
プロニック数(Pronic Number)とは、点を長方形の形にきれいに配置できる数のことで、「矩形数」と呼ばれることもあります。その定義は非常にシンプルで、2つの連続する整数の積として表される数です。つまり、プロニック数 n は次の式で表せます。
n = x × (x + 1)
最初のいくつかのプロニック数を列挙すると、0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342 となります。
プロニック数の具体例
- 2 = 1 × 2
- 6 = 2 × 3
- 12 = 3 × 4
- 20 = 4 × 5
- 30 = 5 × 6
プロニック数の判定アルゴリズム
ある数 num がプロニック数かどうかを判定するには、0 から √num までの各整数 i について「num == i × (i + 1)」が成り立つかどうかを順に調べます。条件を満たす i が1つでも見つかれば、その数はプロニック数であると判断できます。この方法の計算量は O(√n) であり、非常に効率的です。
C++での実装例
以下は、0から200までの範囲の数を判定し、プロニック数だけを出力するC++プログラムです。
#include <iostream>
#include <cmath>
using namespace std;
bool isPronicNumber(int num) {
for (int i = 0; i <= (int)(sqrt(num)); i++)
if (num == i * (i + 1))
return true;
return false;
}
int main() {
for (int i = 0; i <= 200; i++)
if (isPronicNumber(i))
cout << i << " ";
return 0;
}実行結果
0 2 6 12 20 30 42 56 72 90 110 132 156 182
このプログラムでは、isPronicNumber 関数が数値の判定を担当し、main 関数が 0 から 200 までの整数を順番にチェックしています。√num までしかループしないため、大きな数でも高速に判定できるのがポイントです。
-
C++でNが五角数(ペンタゴナル数)かどうかを判定するプログラム
五角数とはある整数 N が与えられたとき、それが五角数(ペンタゴナル数)であるかどうかを判定するのが本記事の目的です。五角数とは、点を並べることで正五角形の形を描くことができる数のことです。これらの数は、五角形を構成する頂点や点として表現できます。五角数の例としては、次のような数列が挙げられます。1, 5, 12, 22, 35, 51, 70, 92 …五角数を判定する公式ある数が五角数かどうかは、以下の公式を利用して確認できます。p(n) = (3 × n² − n) / 2ここで、n は五角形を構成する点の個数を表します。この式から得られる値が順に 1, 5, 12, 22, 35… と
-
アームストロング数を判定するC++プログラムの書き方と解説
アームストロング数とはアームストロング数(Armstrong Number)とは、各桁の数字を「総桁数」乗した値の合計が、元の数そのものと等しくなる数のことです。例えば、153は3桁の数なので、各桁を3乗して足し合わせると元の数に戻ります。主なアームストロング数の例は以下の通りです。3 = 3^1 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153 371 = 3^3 + 7^3 + 1^3 = 27 + 343 + 1 = 371 407 = 4^3 + 0^3 + 7^3 = 64 + 0 + 343 = 407この性質を利用すると、任意の整数がアームスト