problem14.go 539 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package main
  2. import "fmt"
  3. var chainLengths = make(map[int]int)
  4. func main() {
  5. var maxChainLength int
  6. var maxStarting int
  7. for i := 1; i < 1e6; i++ {
  8. l := ChainLength(i)
  9. if l > maxChainLength {
  10. maxChainLength = l
  11. maxStarting = i
  12. }
  13. }
  14. fmt.Println(maxStarting)
  15. }
  16. func Collatz(n int) int {
  17. if n%2 == 0 {
  18. return n / 2
  19. } else {
  20. return 3*n + 1
  21. }
  22. }
  23. func ChainLength(n int) int {
  24. l := 0
  25. for n != 1 {
  26. i, ok := chainLengths[n]
  27. if ok {
  28. return l + i
  29. }
  30. n = Collatz(n)
  31. l++
  32. }
  33. chainLengths[n] = l
  34. return l + 1
  35. }