2011-01-09 4 views
0

私はこの素数ふるいアルゴリズムを書いており、正しく動作しません。私はアルゴリズム自体のエラーを見つけることができません。誰か助けてくれますか?これは、それが印刷になっているものであるゴール素数アルゴリズムが悪い

:対

[2 3 5 7 11 13 17 19 23 29] 

何も実際にプリント:

[3 5 7 11 13 17 19 23 25 29] 

package main 

import "fmt" 

func main() { 
var primes = sieve(makeNumbers(29)) 
fmt.Printf("%d\n", primes); 
} 

func makeNumbers(n int) []int { 
var numbers = make([]int, n - 1) 
for i := 0; i < len(numbers); i++ { 
    numbers[i] = i + 2 
} 
return numbers 
} 

func sieve(numbers []int) []int { 
var numCopy = numbers 
var max = numbers[len(numbers)-1] 
var sievedNumbers = make([]int, 0) 
for i := 0; numCopy[i]*numCopy[i] <= max; i++ { 
    for j := i; j < len(numCopy); j++ { 
    if numCopy[j] % numCopy[i] != 0 || j == i { 
    sievedNumbers = append(sievedNumbers, numCopy[j]) 
    } 
    } 
    numCopy = sievedNumbers 
    sievedNumbers = make([]int, 0) 
} 
return numCopy 
} 

答えて

3

"for j:= i"ではなく "for j:= 0"である必要があります。

関連する問題