JavaScriptで数値が3のべき乗かどうかを判定する関数の実装方法
はじめに
本記事では、引数として渡された整数が3のべき乗(3, 9, 27, 81, 243…)であるかどうかを判定するJavaScript関数の実装方法を詳しく解説します。条件を満たす場合は true を、満たさない場合は false を返すシンプルな関数を作成していきます。
期待される動作
まず、関数の入出力のイメージを確認しておきましょう。
isPowerOf3(243) // true (243 = 3⁵)
isPowerOf3(343) // false (343 = 7³ なので3のべき乗ではない)
isPowerOf3(81) // true (81 = 3⁴)
実装コード
以下が実際の実装例です。
const num = 243;
var isPowerOf3 = (num = 3) => {
let divisor = num === 1 ? 1 : 3;
while(divisor < num){
divisor *= 3;
}
return divisor === num;
};
console.log(isPowerOf3(num)); // true
console.log(isPowerOf3(343)); // false
console.log(isPowerOf3(81)); // true
コードの解説
この関数は次のような流れで動作します。
- 初期化: 引数が
1の場合はdivisorを1(3⁰ = 1)で初期化し、それ以外の場合は3からスタートします。 - ループ処理:
divisorが引数の数値以上になるまで、3倍し続けます。 - 判定: ループ終了後、
divisorが元の数値と一致すればtrue、一致しなければfalseを返します。
実行結果
コンソールには以下のように出力されます。
true
false
true
別のアプローチ:対数を利用する方法
ループを使わず、対数を活用して判定することも可能です。log₃(n) の計算結果が整数になれば、その数は3のべき乗だと判断できます。
const isPowerOfThree = (num) => {
if (num <= 0) return false;
return Number.isInteger(Math.log(num) / Math.log(3));
};
console.log(isPowerOfThree(243)); // true
console.log(isPowerOfThree(343)); // falseただし、この方法は浮動小数点演算の誤差により、特に大きな数値で誤った結果を返す可能性がある点に注意してください。厳密な判定が必要な場合は、先ほど紹介したループ方式や、数値を3で割り続ける方式のほうが安全です。
まとめ
今回は、数値が3のべき乗かどうかを判定するJavaScript関数を紹介しました。シンプルなループ処理による方法は直感的で誤差の心配もなく、多くの場面で十分に使える実装です。ぜひ自分のプロジェクトにも取り入れてみてください。
-
【初心者向け】JavaScriptのescape()関数とは?使い方と非推奨の理由を解説
JavaScriptのescape()関数とはJavaScriptのescape()関数は、文字列をエンコードするために使用される関数です。文字列内の特殊文字をASCII形式のエスケープシーケンス(%xx の形式)に変換します。ただし、この関数はECMAScript v3以降で非推奨(deprecated)とされており、現在の開発では使用が推奨されていません。URIのエンコード目的であれば、代わりにencodeURI()やencodeURIComponent()を使用することが標準的な方法です。escape()の使用例それでは、実際にJavaScriptのescape()関数を使用したサンプル
-
JavaScriptでアップロード時のファイルサイズを検証する方法
Webアプリケーションを開発していると、「ユーザーが大きすぎるファイルをアップロードできないようにしたい」という要件によく出会います。サーバー側でのチェックも重要ですが、JavaScriptを使えばブラウザ上(クライアント側)で即座にファイルサイズを検証でき、無駄な通信やサーバーへの負荷を軽減することができます。 ポイントは、ファイル入力要素(<input type=file>)の files プロパティです。ここには選択されたファイルの情報が File オブジェクトとして格納されており、size プロパティ(バイト単位)を参照することで、アップロード前の段階でファイルサイズを取得