私はcodewars.comのチャレンジを試みていますが、私のコードをより効率的にするためのいくつかの問題があります。チャレンジの指示は、範囲内のすべての素数を見つけることです。そして、それらの間に指定された隙間を持つ2つの素数を見つけなければなりません。素数を見つけるためのJavaScriptコードの最適化
動作するアルゴリズムを作成しましたが、すべてのテストケースを完了するのには時間がかかります。あなたは以下のコードを見ることができます:
function gap(g, m, n) {
// your code
var stopNumber;
var checkIfInteger;
var primeNumbersInRange = [];
var arrayIndex = 0;
var gap;
//iterate through all of the numbers in the range and find if they're prime
for(var numberToCheck = m; numberToCheck <= n; numberToCheck++){
var checkedTwoAndThreePass = true;
checkIfInteger = numberToCheck/2;
if(Number.isInteger(checkIfInteger)){
checkedTwoAndThreePass = false;
}
checkIfInteger = numberToCheck/3;
if(Number.isInteger(checkIfInteger)){
checkedTwoAndThreePass = false;
}
if(checkedTwoAndThreePass){
var k = 1;
var primeNumberCheck = true;
stopNumber = Math.sqrt(numberToCheck);
while(((6 * k) - 1) <= stopNumber & primeNumberCheck === true){
checkIfInteger = numberToCheck/((6 * k) - 1);
if(Number.isInteger(checkIfInteger)){
primeNumberCheck = false;
}
else{
checkIfInteger = numberToCheck/((6 * k) + 1);
if(Number.isInteger(checkIfInteger)){
primeNumberCheck = false;
}
}
k++;
}
if(primeNumberCheck === true){
primeNumbersInRange[arrayIndex] = numberToCheck;
arrayIndex++;
}
}
}
for(var i = 0; i < primeNumbersInRange.length; i++){
gap = primeNumbersInRange[(i+1)] - primeNumbersInRange[i];
if(gap === g){
var primeNumbersThatMeetGap = [primeNumbersInRange[i], primeNumbersInRange[(i+1)]];
return primeNumbersThatMeetGap;
}
}
var primeNumbersThatMeetGap = null;
return primeNumbersThatMeetGap;
}
この問題の制約はどれくらいですか(範囲の範囲はどれくらい大きくなるでしょうか)。 – kraskevich
基本的なhttps://en.wikipedia.org/wiki/Sieve_of_Eratosthenesは、重複したチェックを避けることができます。 "all"は素数を見つける必要があるからです。 – user2864740
インデントスタイルを決めてそれに応じてコードをクリーンアップできますか?また、あなたはおそらく '&&'が必要な '&'を持っています。 jshint.comでコードをチェックし、すべてのエラーを修正してください。 – Tomalak