package main import ( "fmt" "math" "sync" "time" ) var maxInt64Float float64 var maxNum int64 var resultChan chan bool var wg sync.WaitGroup func main() { startTime := time.Now() defer func() { cost := time.Since(startTime) fmt.Println("Run Time=", cost) }() resultChan = make(chan bool, 1) var numResult []int64 numResult = append(numResult, 0) maxInt64Float = float64(math.MaxInt64) maxNum = int64(math.Pow(maxInt64Float, float64(1)/3)) var i int64 for i = 1; i <= maxNum; i++ { numResult = append(numResult, i*i*i) } size := maxNum / 10 wg.Add(10) for start := int64(0); start < maxNum; start += size { end := start + size if end > maxNum { end = maxNum } if start < 3 { start = 3 } go fermat(numResult, start, end) } wg.Wait() } func fermat(numResult []int64, start, end int64) { var n int64 //升序排列前两个最小数没有可能 等于另外2个数相加和 for n = start; n < end; n++ { fmt.Println("n=", n, "numResult[n]=", numResult[n]) var i, j int64 i = 1 j = n - 1 for i < j { if numResult[i]+numResult[j] == numResult[n] { resultChan <- true return } if numResult[i]+numResult[j] > numResult[n] { j-- } if numResult[i]+numResult[j] < numResult[n] { i++ } } } wg.Done() }