最近、本当に大きな数値のエラトステネのセグメント化された篩の高速実装について読んだ。続きエラトステネスのセグメント化された篩をJavaScriptで実装する
は同じの実装です:
function sieve(low, high) {
var primeArray = [], ll = Math.sqrt(low), output = [];
for (var i = 0; i < high; i++) {
primeArray[i] = true;
}
for (var i = 2; i <= ll; i++) {
if (primeArray[i]) {
for (var j = i * i; j < high; j += i) {
primeArray[j] = false;
}
}
}
for (var i = 2; i < ll; i++) {
if(primeArray[i])
{
var segmentStart = Math.floor(low/i) * i;
for(var j = segmentStart; j <= high; j+=i)
{
primeArray[j] = false;
}
}
}
for(var i = low; i <= high; i++)
{
if(primeArray[i])
{
output.push(i);
}
}
return output;
};
私はそれが間違って持っている場所を見つけ出すように見えることはできません。 おそらくそれはあまりにも長い間働いています。例えば
:
sieve(4,10)
[5,7]
を返す必要があります。しかし、それはあなたが十分に高い要因をチェックされていない[5,7,9]
そして、この実装は間違って正確に何をするのでしょうか?予期しないエラーが発生しますか?答えが間違っていますか? – mdziekon
はい、いくつかのケースで失敗します。 –
具体的には、私が4から始めると –