**ここではコードワードからの質問です。与えられたステップ値を持つ最初の素数ペアを見つけるためのJS関数を書く
素数は規則的に配置されていません。例えば、2~3のステップは1である.3~5のステップは2である.7~11のそれは4である.2~50の間には、以下の2ステップの素数のペアがある。
3,5示した
グラム(整数> = 2): - 5,7、 - 11、13 - 17、19、 - - 29、31、41、43
我々は、パラメータで機能ステップを記述します我々が探しているステップ、検索(M含む)の開始を与える
メートル(整数> = 2)、
N(intege
上記の例では、(2、2、50)は2と50の間の最初のペアである[3,5]を返します。 2ステップ。
したがって、これらのgステップの素数が存在する場合は、m、nの範囲の間にgのステップで区切られた2つの素数の最初のペアを返します。そうでない場合は、nilまたはnullまたはNoneまたはNothing )。
例:
ステップ(2、5、7) - > [5,7]又は(5,7)又は{5,7}
ステップ(2、5、5) - >ゼロ又はヌル
ステップ(4、130、200) - ここ> [163、167]及び(163、167)又は{163、167}
は、それが取っている私の溶液 - ですテストに合格するには時間がかかりすぎます。どうすれば効率を上げることができますか?
function step(g, m, n) {
var arr = [];
function isPrime(num){
for (var k=2; k<num; k++){
if(num%k ===0){
return false;
}
}return true;
}
for (var i= m; i < n; i++){
if(isPrime(i)=== true){
arr.push(i);
}
}
var endArr=[];
for(var l=0;l<arr.length;l++)
for(var p=1;p<arr.length;p++){
if(arr[l]-arr[l-p]=== g){
endArr.push(arr[l])
endArr.push(arr[l]-g)
}
}
return endArr.slice(0,2).sort(function(a,b){
return a-b;
})
}
ありがとう!
あなたの 'isPrime'関数は素朴です。あなたは2からkまでのあらゆる数をテストしています。まず、唯一の素数は2であるため、テスト4,6,8などは必要ありません。すべての数値を 'num'までテストする必要はありません。代わりに 'sqrt(num)'の後で停止することができます。次に、2より大きいすべての素数は、 '6n-1または6n + 1'の形式であることが示されています。私。 「6 * 1 + 1 = 5」、「6 * 1 + 1 = 7」、「6 * 2-1 = 11」、「6 * 2 + 1 = 13」等である。この形式のものは素数ではありません)。あなたが見ている数字はかなり小さいので、すべての素数の事前計算テーブルを使用することができます。エラトステネスのようなもので。 –