【JavaScript】数値を逆順にした値が素数かどうかを判定する方法
問題
今回は、数値を引数として受け取り、その数値を逆順(数字をひっくり返した値)にした結果が素数であれば true を、そうでなければ false を返す JavaScript 関数を作成します。
ちなみに、このように「逆順にすると別の素数になる数」は「エマープ(emirp:prime を逆から読んだ語)」と呼ばれることがあります。
サンプルコード
以下のコードでは、まず数値を文字列に変換して逆順に並べ替え、その後で素数判定を行っています。
const num = 13;
// 数値を逆順にした値を返す関数
const findReverse = (num) => {
return +num
.toString()
.split('')
.reverse()
.join('');
};
// 素数かどうかを判定する関数
const isPrime = (num) => {
let sqrtnum = Math.floor(Math.sqrt(num));
let prime = num !== 1;
for(let i = 2; i < sqrtnum + 1; i++){
if(num % i === 0){
prime = false;
break;
};
};
return prime;
}
// 逆順にした数が素数かどうかを判定
const isReversePrime = num => isPrime(findReverse(num));
console.log(isReversePrime(num));
コードの解説
findReverse 関数では、toString() で数値を文字列化し、split('') で1文字ずつ配列に分解した後、reverse() で反転させ、join('') で再び文字列に結合しています。先頭にある単項プラス演算子 + によって、最終的な結果は数値型へと変換されます。
isPrime 関数では、平方根までの整数で割り切れるかどうかを確認するだけで素数判定ができる性質(試し割り法)を利用しており、すべての数で割るよりも効率的に処理できます。
例として num = 13 を渡すと、逆順にした値は 31 になります。31 は素数なので、結果として true が出力されます。
出力
true
-
JavaScriptで1からnまでの整数に含まれる「1」の個数を数える方法
はじめに 本記事では、正の整数を引数として受け取り、1からその数までのすべての正の整数に登場する数字「1」の合計出現回数を求めるJavaScript関数を作成します。対象となる数値自体に「1」が含まれている場合は、その分もカウントに含めます。 問題の例 たとえば、入力として次の数値が与えられたとします。 const num = 31; この場合、期待される出力は次のとおりです。 const output = 14; これは、「1」が以下の数値に出現するためです。 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 31 これらを順に確認すると、11だ
-
JavaScriptで指定した数より大きい最小の素数を見つける方法
問題JavaScriptで、ある数値 n を受け取る関数を作成することを考えます。この関数は、n より大きい数の中で最小となる素数を返す必要があります。アプローチまず、与えられた数が素数かどうかを判定する補助関数 isPrime を用意します。素数判定では、2 からその数の平方根まで順に割り切れるかを確認すれば十分です。平方根以降の因数は必ずペアが存在するため、ここまで調べれば判定できます。これにより計算量を大幅に抑えられます。次に、nextPrime 関数の中で、引数の数値を1ずつ増やしながら isPrime で判定を行い、最初に見つかった素数を返します。コード例以下が実際のコードです。co