primes: add ConcurrentSieve
[?]
Feb 5, 2021, 8:00 PM
BCVIGM7NFXDF2O44TAH53F3LZUYBCWIUUEZHXJYH6B6VX3UE6B5QCDependencies
Change contents
- replacement in snippets/primes/primes_test.go at line 40
func TestSieve(t *testing.T) {func TestJustSieve(t *testing.T) { - edit in snippets/primes/primes_test.go at line 47
func TestConcSieve(t *testing.T) {is := is.New(t)for _, tc := range sieveCases {is.Equal(tc.expected, primes.ConcurrentSieve(tc.input))}} - replacement in snippets/primes/primes_test.go at line 60
func BenchmarkSieve(b *testing.B) {func BenchmarkJustSieve(b *testing.B) { - edit in snippets/primes/primes_test.go at line 63
}}func BenchmarkConcurrentSieve(b *testing.B) {for i := 0; i < b.N; i++ {primes.ConcurrentSieve(1e6) - edit in snippets/primes/primes.go at line 6
"sync" - edit in snippets/primes/primes.go at line 69[2.2832]
func ConcurrentSieve(limit int) []bool {sieve := make([]bool, limit+1)wg := new(sync.WaitGroup)wg.Add(1)go func() {// handle even numbersfor i := 2 * 2; i <= limit; i += 2 {sieve[i] = true}wg.Done()}()for p := 3; p*p <= limit; p += 2 {wg.Add(1)go func(p int) {if !sieve[p] {for i := p * p; i <= limit; i += p {sieve[i] = true}}wg.Done()}(p)}wg.Wait()return sieve}