38 lines
587 B
Go
38 lines
587 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
func sum(start, end uint64, result chan uint64) {
|
|
var sum uint64 = 0
|
|
for i := start; i <= end; i++ {
|
|
sum += i
|
|
}
|
|
result <- sum
|
|
}
|
|
|
|
func main() {
|
|
const n uint64 = 5000000000
|
|
var numCPU int = 4
|
|
|
|
result := make(chan uint64, numCPU)
|
|
|
|
var chunkSize uint64 = n / uint64(numCPU)
|
|
|
|
var start uint64 = 1
|
|
var end uint64 = chunkSize
|
|
|
|
for i := 0; i < numCPU; i++ {
|
|
go sum(start, end, result)
|
|
start = end + 1
|
|
end += chunkSize
|
|
}
|
|
|
|
var total uint64 = 0
|
|
for i := 0; i < numCPU; i++ {
|
|
partialSum := <-result
|
|
total += partialSum
|
|
}
|
|
|
|
fmt.Println(total)
|
|
}
|