Pārlūkot izejas kodu

Longest Collatz sequence in Go

Adel Qalieh 9 gadi atpakaļ
vecāks
revīzija
592a504e5a
1 mainītis faili ar 40 papildinājumiem un 0 dzēšanām
  1. 40 0
      problem14.go

+ 40 - 0
problem14.go

@@ -0,0 +1,40 @@
+package main
+
+import "fmt"
+
+var chainLengths = make(map[int]int)
+
+func main() {
+	var maxChainLength int
+	var maxStarting int
+	for i := 1; i < 1e6; i++ {
+		l := ChainLength(i)
+		if l > maxChainLength {
+			maxChainLength = l
+			maxStarting = i
+		}
+	}
+	fmt.Println(maxStarting)
+}
+
+func Collatz(n int) int {
+	if n%2 == 0 {
+		return n / 2
+	} else {
+		return 3*n + 1
+	}
+}
+
+func ChainLength(n int) int {
+	l := 0
+	for n != 1 {
+		i, ok := chainLengths[n]
+		if ok {
+			return l + i
+		}
+		n = Collatz(n)
+		l++
+	}
+	chainLengths[n] = l
+	return l + 1
+}