최근 큰 숫자에 대한 에라 토 스테 네스의 세그먼트 시브 (Segmented Sieve of Seated Sieve)에 대한 기사를 읽었습니다. 내가 잘못 가지고 위치를 알아낼 수 없습니다자바 스크립트에서 에라 토 스테 네스 (Eratosthenes)의 세그먼트 시브 구현
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에서 시작합니다. –