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/collatzBinary files differ new 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.") | 
