назначение кортежей в Go - PullRequest
       3

назначение кортежей в Go

0 голосов
/ 16 февраля 2019

Используя этот код:

for i := uint64(3); n > 1; i, n = i+2, n-1 {

Выход Go Playground :

1999993

Что не правильный результат.

И этот код:

func (p *Prime) Generate(n uint) {
    p.Primes = make([]uint64, 1, n)
    p.Primes[0] = 2
next:
    for i := uint64(3); n > 1; i += 2 {
        q := uint64(math.Sqrt(float64(i)))
        for _, v := range p.Primes[1:] {
            if v > q {
                break
            }
            if i%v == 0 {
                continue next
            }
        }
        p.Primes = append(p.Primes, i)
        n--
    }
}

, который использует:

for i := uint64(3); n > 1; i += 2 {

, затем

n--

Вывод правильный:

15485863

go version go1.11.5 linux/amd64

Я что-то упускаю в кортеже Задания в Go?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 февраля 2019

Нет, это не присвоение кортежей, которое дает неправильный результат.

Существует небольшая разница между двумя кодами, которая вызывает ошибку.В коде playgound i,n = i+2,n-1 заставляет n = n-1 запускаться каждый раз, когда цикл повторяется, в то время как код github запускается n = n-1, только когда i является простым числом (оно пропускает n--, если continue next выполняется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...