Skip to content

Instantly share code, notes, and snippets.

@kehiy
Last active April 16, 2024 15:41
Show Gist options
  • Save kehiy/ac8f48496d374f73f4fdcec5538bbf41 to your computer and use it in GitHub Desktop.
Save kehiy/ac8f48496d374f73f4fdcec5538bbf41 to your computer and use it in GitHub Desktop.
Collatz conjecture or 3n+1 problem in python
import random
def is_odd(num: int):
if (num % 2) == 0:
return False
return True
def collatz(num: int):
if num == 1:
print("its one!")
exit(0)
if is_odd(num):
new_num = num * 3 + 1
print(new_num)
collatz(new_num)
new_num = num / 2
print(new_num)
collatz(new_num)
collatz(random.randint(3, 10)) # you can use any number or rage you want. I used 3 as minimum, so you can see the 4, 2, 1 result. I used 10 as maximum to make sure it will run fast and easy.
# you can give this function any number, and regarding to 3n + 1 problem it will end with 4, 2, 1 numbers always.
# read this for more informtation:
# https://en.wikipedia.org/wiki/Collatz_conjecture
# this youtube video is a more fluent explanition of this:
# https://www.youtube.com/watch?v=094y1Z2wpJg
fn is_odd(num: usize) -> bool {
return (num % 2) != 0
}
fn collatz(num: usize) {
if num == 1 {
println!("it's one!");
return;
}
if is_odd(num) {
let new_num = num * 3 + 1;
println!("{}", new_num);
collatz(new_num);
return;
}
let new_num = num / 2;
println!("{}", new_num);
collatz(new_num);
return;
}
fn main() {
collatz(7)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment