C++
 Computer >> コンピューター >  >> プログラミング >> C++

三角数かどうかを判定するC++プログラム

ある整数 n が与えられたとき、それが三角数であるかどうかを判定する方法を解説します。

三角数とは、n 個の点(または球)を層状に積み重ねて正三角形を形作ることができる数のことです。具体的には、1, 3, 6, 10, 15, 21 … のように、k 番目の三角数は公式 T(k) = k × (k + 1) / 2 で表されます。

例えば、入力が n = 10 の場合、10 は 4 番目の三角数(1 + 2 + 3 + 4 = 10)なので、出力は True になります。

アルゴリズムの手順

この問題を解くには、次の手順に従います。

  • 1 から n まで順に各値 i について調べます。
  • i × (i + 1) が 2 × n と等しい場合、n は三角数なので true を返します。
  • すべての候補を調べても一致しなければ false を返します。
for initialize i := 1, when i <= n, update (increase i by 1), do:
   if i * (i + 1) is same as 2 * n, then:
      return true
return false

C++による実装例

以下に実際の実装例を示します。

#include <bits/stdc++.h>
using namespace std;
bool solve(int n){
   for (int i = 1; i <= n; i++){
      if (i * (i + 1) == 2 * n){
         return true;
      }
   }
   return false;
}
int main(){
   int n = 10;
   cout << solve(n) << endl;
}

入力

10

出力

1

補足:計算量について

この方法の時間計算量は O(n) です。より効率的にしたい場合は、判別式 D = 8n + 1 が完全平方数であるかどうかを確認する方法(O(√n) または O(1))も利用できます。これは、三角数の定義式 k(k+1)/2 = n を二次方程式として解くことで導き出せます。

  1. C++で数値が2つの三角数の和として表現できるか判定する方法

    本記事では、ある整数が2つの三角数の和として表現できるかどうかを判定する方法を、C++のコード例とともに分かりやすく解説します。三角数とは三角数とは、1、3、6、10、15…のように、1から順に自然数を加算して得られる数列のことです。点を正三角形の形に並べたときの個数に対応することから「三角数」と呼ばれています。n番目の三角数は次の式で求められます。n × (n + 1) / 2例えば、1、3、6、10などが三角数に該当します。これらを利用すると、16は「6 + 10」という2つの三角数の和として表現できます。判定アルゴリズム判定の手順は非常にシンプルです。N未満のすべての三角数を生成し、セッ

  2. アームストロング数を判定する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この性質を利用すると、任意の整数がアームスト