diff options
Diffstat (limited to '14-Longest-Collatz-Sequence')
-rwxr-xr-x | 14-Longest-Collatz-Sequence/collatz | bin | 0 -> 16696 bytes | |||
-rw-r--r-- | 14-Longest-Collatz-Sequence/collatz.c | 31 | ||||
-rw-r--r-- | 14-Longest-Collatz-Sequence/collatz.py | 28 |
3 files changed, 59 insertions, 0 deletions
diff --git a/14-Longest-Collatz-Sequence/collatz b/14-Longest-Collatz-Sequence/collatz Binary files differnew file mode 100755 index 0000000..37da709 --- /dev/null +++ b/14-Longest-Collatz-Sequence/collatz diff --git a/14-Longest-Collatz-Sequence/collatz.c b/14-Longest-Collatz-Sequence/collatz.c new file mode 100644 index 0000000..ec77af6 --- /dev/null +++ b/14-Longest-Collatz-Sequence/collatz.c @@ -0,0 +1,31 @@ +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +// In C, it's immediately obvious my python solution is inefficient + +// For keeping track of the length of sequences +// c is a temporary counter, s changes when c reaches a new maximum +long int c = 0; +long int s = 0; +long int collatz(long int seed){ + c++; + if(seed == 1) + return 0; + if(seed % 2 == 0) + seed = seed / 2; + else + seed = 3 * seed + 1; + collatz(seed); +} + +int main(){ + for(long int i = 1; i < pow(10, 6); i++){ + c = 0; + collatz(i); + if(c > s){ + s = c; + } + } + printf("The longest sequence has %d numbers \n", s); + return 0; +} diff --git a/14-Longest-Collatz-Sequence/collatz.py b/14-Longest-Collatz-Sequence/collatz.py new file mode 100644 index 0000000..74d5e1e --- /dev/null +++ b/14-Longest-Collatz-Sequence/collatz.py @@ -0,0 +1,28 @@ +import PIL +import math + +# Problem 14 Longest Collatz sequence +# Note, a little slow, takes about 15 seconds. +# There is probably a more efficient solution out there +chain = [] +biggo = [] + + +def collatz(seed): + chain.append(seed) + if(seed == 1): + return 0 + if(seed % 2 == 0): + seed = seed/2 + else: + seed = 3*seed + 1 + collatz(seed) + + +for n in range(1, pow(10, 6)): + collatz(n) + if(len(chain) > len(biggo)): + biggo = chain + chain = [] +print(biggo) +print("Has " + str(len(biggo)) + " numbers.") |