Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions src/math/computation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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