JavaScriptで指定した間隔(ギャップ)を持つ2つの素数のペアを見つける方法
問題
数値 gap を第一引数として、また2つの数値からなる範囲配列を第二引数として受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在し、かつ絶対差が gap と一致する素数のペアを見つけて返すものです。
例えば、gap = 4、範囲が [20, 200] の場合、「37」と「41」はどちらも素数であり、その差はちょうど4であるため、条件を満たすペアとなります。
解決のアプローチ
この問題は以下のステップで解決できます。
- 素数判定: 与えられた数が素数かどうかを判定するヘルパー関数を用意します。
- 素数の収集: 指定された範囲内のすべての素数を配列に格納します。
- ペアの検索: 隣接する素数同士の差を順番に調べ、指定したギャップと一致する最初のペアを見つけたら結果として返します。
- 該当なしの場合: 条件を満たすペアが存在しない場合は
nullを返します。
サンプルコード
以下が実際のコードです。
const gap = 4;
const range = [20, 200];
const primesInRange = (gap, [left, right]) => {
// 素数判定用のヘルパー関数
const isPrime = num => {
for(let i = 2; i < num; i++){
if(num % i === 0){
return false;
};
};
return true;
};
// 範囲内のすべての素数を収集
const primes = [];
const res = [];
for(let i = left; i < right; i++){
if(isPrime(i)){
primes.push(i);
};
};
// 隣接する素数同士の差をチェック
let currentNum = primes[0];
for(let j = 1; j < primes.length; j++){
if(primes[j] - currentNum === gap){
res.push(currentNum, primes[j]);
return res;
}else{
currentNum = primes[j];
};
};
// 見つからなかった場合
return null;
};
console.log(primesInRange(gap, range));
出力結果
コンソールには以下のように出力されます。
[37, 41]
コードの解説
まず isPrime 関数が、2から対象の数未満までのすべての整数で割り切れるかどうかを確認することで素数判定を行います。次に、範囲 [20, 200] 内の素数をすべて配列に集めます。
その後、隣接する素数を順番に比較していきます。20以上200未満の範囲では、最初の素数は23ですが、23と29の差は6のため条件を満たしません。探索を続けると「37」と「41」に出会います。両者は素数であり、差は 41 - 37 = 4 で指定したギャップと一致するため、このペアが結果として返されます。
なお、この実装では最初に見つかったペアのみを返します。範囲内のすべての該当ペアが必要な場合は、return res; の部分を削除し、ループ完了後に res を返すように変更してください。
-
JavaScriptで指定範囲内の特定の距離を持つk-素数ペアを見つける方法
k-素数(K-Prime)とは自然数のうち、素因数を重複込みで数えてちょうどk個持つものを「k-素数(k-prime)」と呼びます。たとえば4の場合、素因数は2だけですが、4 = 2 × 2 と分解できるため、2が2回カウントされます。このことから4は2-素数であるといえます。同様に、8 = 2 × 2 × 2 と3つの素因数に分解できるため、8は3-素数ということになります。問題の概要今回は、次の3つの引数を受け取るJavaScript関数を実装します。k:素因数の個数(重複込み)step:求めるペア間の距離(間隔)range:探索対象となる範囲[開始値, 終了値]この関数は、指定された範囲
-
JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法
問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3