human
Sieve EratosthenesをGOに書いてください
gpt
```
package main

import (
    "fmt"
)

func eratosthenes(n int) []bool {
    primes := make([]bool, n+1)
    for i := 2; i <= n; i++ {
        primes[i] = true
    }
    for p := 2; p*p <= n; p++ {
        if primes[p] == true {
            for i := p * p; i <= n; i += p {
                primes[i] = false
            }
        }
    }
    return primes
}

func main() {
    fmt.Println("Enter a positive integer:")
    var n int
    _, err := fmt.Scanf("%d", &n)
    if err != nil {
        fmt.Println("Invalid input")
        return
    }
    primes := eratosthenes(n)
    fmt.Println("Primes up to", n, ":")
    for i := 2; i <= n; i++ {
        if primes[i] == true {
            fmt.Println(i)
        }
    }
}
```

この実装では、iが素数かどうかを追跡するためにブール配列primesを使っている。まず、2からnまでのすべての数が素数であると仮定し、すべての素数pに対してpの倍数であるすべてのiに対してprimes[i]を偽に設定する。p^2がnより大きくなるまで続ける。

そして、ブール配列primesを使ってすべての素数を出力する。mainでは、ユーザーに正の整数nを入力してもらい、nまでのすべての素数を出力する。
human
このソリューションはどの程度最適ですか？もっと最適ですか？