func Run() { var sieve euler.Sieve limit := 1000000 ps := sieve.PrimesUpto(limit) longestLen := 0 longestVal := 0 for a := 1; a < len(ps); a++ { total := 0 for b := a; b < len(ps); b++ { total += ps[b] if total >= limit { break } if b-a+1 > longestLen && sieve.IsPrime(total) { longestLen = b - a + 1 longestVal = total } } } fmt.Printf("%d\n", longestVal) }
// Return the first goldbach prime for the given number, if present. func goldbach(sieve *euler.Sieve, number int) (result int, present bool) { for _, p := range sieve.PrimesUpto(number) { if p == 2 { continue } _, perfect := perfect_root((number - p) / 2) if perfect { result = p present = true return } } return }