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

JavaScriptで数値が三角数かどうかを判定する方法


三角数(Triangular Number)とは?

三角数とは、点を正三角形の形に敷き詰めたときに現れる数のことです。n番目の三角数は「1からnまでの自然数の合計」として表され、次の公式で求められます。

Tn = n(n+1) / 2

具体的な三角数は 1, 3, 6, 10, 15, 21, 28 … と続きます。例えば 10 は、各辺に4個の点を配置した正三角形を構成できるため、三角数です。

問題

数値を引数として受け取り、その数値が三角数であれば true を、そうでなければ false を返すJavaScript関数を実装します。

判定の考え方

n(n+1)/2 = num となる正整数 n が存在するかどうかを調べればよいことになります。この式を変形すると二次方程式になるため、判別式に注目すると、次のように判定できます。

8 × num + 1 が完全平方数(ある整数の2乗)であれば、その数は三角数である

コード例

const isTriangular = (num = 1) => {
  if(num < 1){
    return false;
  }
  const val = Math.sqrt(8 * num + 1);
  return Number.isInteger(val);
};

console.log(isTriangular(10)); // true
console.log(isTriangular(15)); // true
console.log(isTriangular(9));  // false

出力結果

true
true
false

コードのポイント

Math.sqrt() で平方根を計算し、Number.isInteger() で整数かどうかを確認するだけで、ループ処理を一切使わずに O(1) で判定できます。負の数や0は三角数にならないため、事前に除外している点にも注意してください。

別解:ループで累積和を比較する方法

より直感的な実装としては、1から順に加算していき、目標の数値に一致するかを確認する方法もあります。

const isTriangularLoop = (num = 1) => {
  let sum = 0;
  for(let i = 1; sum < num; i++){
    sum += i;
    if(sum === num){
      return true;
    }
  }
  return false;
};

小さな数値であればこの方法でも十分ですが、大きな数値を扱う場合は数学的な判定(平方根による検証)の方が効率的です。


  1. JavaScriptで配列内の紛らわしい数(Confusing Number)を見つける方法

    紛らわしい数(Confusing Numbers)とは? 配列内のある数値が「紛らわしい数」とみなされるのは、その数値を上下左右に180度回転した結果が、同じ配列内に存在する別の数値になる場合です。たとえば、6を180度回転すると9になり、逆に9を回転すると6になります。 ただし注意が必要なのは、180度回転しても有効な数字として成立するのは 0、1、6、8、9 の5種類だけという点です。2、3、4、5、7 を含む数値は、回転しても正しい数として扱うことができません。 今回求められているのは、自然数 num を第1引数(唯一の引数)として受け取るJavaScript関数を作成することです。この

  2. JavaScriptで指定した数より大きい最小の素数を見つける方法

    問題JavaScriptで、ある数値 n を受け取る関数を作成することを考えます。この関数は、n より大きい数の中で最小となる素数を返す必要があります。アプローチまず、与えられた数が素数かどうかを判定する補助関数 isPrime を用意します。素数判定では、2 からその数の平方根まで順に割り切れるかを確認すれば十分です。平方根以降の因数は必ずペアが存在するため、ここまで調べれば判定できます。これにより計算量を大幅に抑えられます。次に、nextPrime 関数の中で、引数の数値を1ずつ増やしながら isPrime で判定を行い、最初に見つかった素数を返します。コード例以下が実際のコードです。co