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

JavaScriptで数値が別の数値の累乗であるかを判定する方法

はじめに

本記事では、2つの数値 m と n を引数として受け取り、m が n の累乗であるかどうかを判定する JavaScript 関数の実装方法を解説します。m が n の累乗であれば true を返し、そうでなければ false を返します。

判定条件の例

期待される動作は以下のとおりです。

m = 8, n = 2 → true(8 = 2³)
m = 100, n = 10 → true(100 = 10²)
m = 0.01, n = 10 → true(0.01 = 10⁻²)
m = 21, n = 3 → false

コード例

const isPower = (m, n) => {
   let sign = m < 1;
   if (!m) {
      return false;
   };
   while (m !== 1) {
      if (sign) {
         m *= n;
      }
      else {
         m /= n;
      }
      if (sign ? m > 1 : m < 1) {
         return false;
      }
   };
   return true;
}
console.log(isPower(0.01, 10));
console.log(isPower(1000, 10));
console.log(isPower(1001, 10));
console.log(isPower(8, 2));
console.log(isPower(0.125, 2));

出力結果

上記のコードを実行すると、コンソールには次のように出力されます。

true
true
false
true
true

処理の仕組み

このアルゴリズムは次の手順で動作します。

まず、m が 1 未満かどうかを変数 sign に記録しておきます。これにより、0.01 のような小数(負の指数に相当する数値)にも対応できます。また、m が 0 の場合は false を即座に返します。

続いて、m がちょうど 1 になるまでループを繰り返します。m が 1 未満の場合は n を掛け算し、1 以上の場合は n で割り算していきます。この処理の中で、m が 1 を「通り越して」しまった場合(sign が true のときに m > 1 になった場合、あるいはその逆のケース)は、m が n の累乗ではないことが確定するため false を返します。

ループが正常に完了し、m がぴったり 1 になった場合は、m を n のべき乗で表せることになりますので、true を返します。この方法なら、整数だけでなく小数の累乗関係も正確に判定できる点がポイントです。

  1. 【JavaScript】数値を逆順にした値が素数かどうかを判定する方法

    問題 今回は、数値を引数として受け取り、その数値を逆順(数字をひっくり返した値)にした結果が素数であれば true を、そうでなければ false を返す JavaScript 関数を作成します。 ちなみに、このように「逆順にすると別の素数になる数」は「エマープ(emirp:prime を逆から読んだ語)」と呼ばれることがあります。 サンプルコード 以下のコードでは、まず数値を文字列に変換して逆順に並べ替え、その後で素数判定を行っています。 const num = 13; // 数値を逆順にした値を返す関数 const findReverse = (num) => { re

  2. JavaScriptで整数を素数のべき乗の積として表現する方法

    本記事では、正の整数を受け取り、その数を素数のべき乗の積として表す文字列を返すJavaScript関数の作成方法を解説します。 問題の概要 任意の正の整数 n を引数として受け取り、次の形式の文字列を返す関数を実装します。 n = "(p1**n1)(p2**n2)...(pk**nk)" ここで p1〜pk は素因数となる素数、n1〜nk はそれぞれに対応する指数です。「a**b」は「a の b 乗」を意味します。 例 例として 86240 を渡した場合、この数は次のように素因数分解できます。 86240 = 25 × 5 × 72 × 11 したがって、期待される出