【Go】エラステネスのふるい

ja.wikipedia.org

func Soe(n int) []int {
    nums := []int{}
    for i := 2; i <= n; i++ {
        nums = append(nums, i)
    }
    pnums := []int{}
    sqrtVal := int(math.Sqrt(float64(n)))
    for true {
        if sqrtVal <= nums[0] {
            for _, v := range nums {
                pnums = append(pnums, v)
            }
            break
        }
        pnums = append(pnums, nums[0])
        newNums := []int{}
        for _, v := range nums {
            if v%nums[0] > 0 {
                newNums = append(newNums, v)
            }
        }
        nums = newNums
    }
    return pnums
}