diff --git a/src/math/computation.py b/src/math/computation.py index 7f09784..9b6edbf 100644 --- a/src/math/computation.py +++ b/src/math/computation.py @@ -3,3 +3,41 @@ def gcd_recursive(a: int, b: int) -> int: if b == 0: return a return gcd_recursive(b, a % b) + + +def lcm(a: int, b: int) -> int: + # Use absolute values to handle negative inputs; return 0 if either input is 0 + return abs(a * b) // gcd(a, b) if a and b else 0 + + +def factorial(n: int) -> int: + if n < 0: + raise ValueError("Negative numbers do not have factorials.") + if n == 0 or n == 1: + return 1 + return n * factorial(n - 1) + + +def fibonacci(n: int) -> int: + if n < 0: + raise ValueError("Negative arguments not supported.") + if n == 0: + return 0 + if n == 1: + return 1 + return fibonacci(n - 1) + fibonacci(n - 2) + + +def is_prime(n: int) -> bool: + if n <= 1: + return False + for i in range(2, int(n**0.5) + 1): + if n % i == 0: + return False + return True + + +def gcd(x: int, y: int) -> int: + while y: + x, y = y, x % y + return x