Skip to content

Commit ccde9ad

Browse files
committed
Better parallel version
1 parent 7487fa3 commit ccde9ad

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

10pp.go

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package main
2+
3+
import (
4+
"./utils"
5+
"fmt"
6+
"runtime"
7+
"sync"
8+
)
9+
10+
func main() {
11+
runtime.GOMAXPROCS(runtime.NumCPU())
12+
max := 2000000
13+
primes := findPrimes(max)
14+
sum := 2
15+
for i := range primes {
16+
sum += i
17+
}
18+
fmt.Println(sum)
19+
}
20+
21+
func findPrimes(max int) <-chan int {
22+
primes := make(chan int, max)
23+
var done sync.WaitGroup
24+
for i := 3; i < max; i += 2 {
25+
done.Add(1)
26+
go func(num int) {
27+
if utils.IsPrime(num) {
28+
primes <- num
29+
}
30+
done.Done()
31+
}(i)
32+
}
33+
go func() {
34+
done.Wait()
35+
close(primes)
36+
}()
37+
return primes
38+
}

0 commit comments

Comments
 (0)