1package main23import (4 "fmt"5 "math/big"6)78func val(slice []*big.Int, index int) *big.Int {9 if index < 0 || index >= len(slice) {10 return big.NewInt(0)11 }1213 return slice[index]14}1516func pascal(current []*big.Int) []*big.Int {17 next := make([]*big.Int, len(current)+1)1819 for i := range next {20 next[i] = big.NewInt(0)21 next[i].Add(val(current, i-1), val(current, i))22 }2324 return next25}2627func print(slice []*big.Int) {28 for i, n := range slice {29 if i < len(slice)-1 {30 fmt.Printf("%d ", n)31 } else {32 fmt.Println(n)33 }34 }35}3637var two = big.NewInt(2)38var zero = big.NewInt(0)3940func numOdd(slice []*big.Int) int64 {41 var odd int64 = 042 for _, n := range slice {43 mod := big.NewInt(0)44 mod.Mod(n, two)45 if mod.Cmp(zero) == 1 {46 odd += 147 }48 }4950 return odd51}5253func totalNums(rows int64) *big.Int {54 nums := big.NewInt(rows)55 nums.Mul(nums, big.NewInt(rows+1))56 nums.Div(nums, big.NewInt(2))5758 return nums59}6061const lastRow int64 = 1276263func main() {64 curr := []*big.Int{big.NewInt(1)}65 totalOdd := big.NewInt(numOdd(curr))66 for i := 0; int64(i) < lastRow; i++ {67 curr = pascal(curr)68 totalOdd.Add(totalOdd, big.NewInt(numOdd(curr)))69 }7071 frac := big.NewRat(0, 1)72 nums := totalNums(lastRow + 1)73 frac.SetFrac(totalOdd, nums)74 fmt.Println(totalOdd, nums, frac)75}