# ChemicalDevelopment/CollatzL

Checks collatz-like problems
C Python Makefile
Latest commit cccddd5 Nov 27, 2016
Type Name Latest commit message Commit time
Failed to load latest commit information. .gitignore Makefile README.md collatzl.c collatzl.py collatzl_gmp.c glib.c glib.h glib.py masscheck.py

# CollatzL

Tests modified collatz conjectures (including the original).

# Installation

Make sure you have `gcc`.

Now, clone this repo with:

`git clone https://github.com/ChemicalDevelopment/CollatzL.git`

change to that directory:

`cd CollatzL`

compile and test the code:

`make`

There should be no errors.

If not, please open up an issue.

# Usage

This program is used to verify, or counter Collatz-like problems (include original Collatz).

The original collatz conjecture is:

``````define f(x):
if x is even, f(x) = x / 2
if x is odd, f(x) = 3x+1
``````

And the question is: Does iteration of f(x) `f(f(f(...(x)))))` eventually reach a cycle, or keep expanding?

We don't know, but all numbers <= 4*10^18 do reach a cycle.

An example of a collatz like function would be:

``````define f(x):
if x is 0 mod 3, f(x) = x / 3
if x is 1 mod 3, f(x) = 2 * x + 1
if x is 2 mod 3, f(x) = 5 * x + 4
``````

And again, the question is: Does iteration of f(x) eventually reach a cycle?

To test the original collatz conjecture, run

`./collatzl_c.o \$MIN \$RANGE \$MAX_TRIALS 2 1 0 2 3 1 1`

It starts at MIN, and runs RANGE numbers each at a max of MAX_TRIALS

The `2` after that tells us we take the number mod 2 (even or odd), and the `1 0 2` tells us to multiply by `1`, add `0`, and divide by `2`

the `3 1 1` tells us to multiply by `3`, add `1`, and divide by `1`, if it is 1 mod 2

`./collatzl_c.o 0 1000 1000 2 1 0 2 3 1 1` runs quite quickly, and verifies they all work

To test our other example, the command would be:

`./collatzl_c.o 0 1000 1000 3 1 0 3 2 1 1 5 4 1`

## GMP

There is also a version for GMP, which you can build and test with:

`make gmp`

The interface is the same as the normal, but the executable is `collatzl_gmp.o` instead of `collatzl_c.o`

To run the default command, use:

`./collatzl_gmp.o 0 1000 1000 2 1 0 2 3 1 1`

And our example would be:

`./collatzl_gmp.o 0 1000 1000 3 1 0 3 2 1 1 5 4 1`

You can’t perform that action at this time.