Files
troupe-standup/wizard-work/spark/prime_factorizer.py

59 lines
1.4 KiB
Python

#!/usr/bin/env python3
"""
Prime Factorization Tool - Compute prime factors of a positive integer.
Usage: python prime_factorizer.py <number>
Exit 0: success, prints factors
Exit 1: error (invalid input, negative number, or 1)
"""
import sys
from typing import List
def prime_factors(n: int) -> List[int]:
"""Return the prime factorization of n as a list of prime factors."""
if n < 2:
return []
factors = []
d = 2
while d * d <= n:
while n % d == 0:
factors.append(d)
n //= d
d += 1
if n > 1:
factors.append(n)
return factors
def main():
if len(sys.argv) != 2:
print("Usage: python prime_factorizer.py <positive_integer>", file=sys.stderr)
sys.exit(1)
try:
n = int(sys.argv[1])
if n < 1:
print("Error: Number must be positive", file=sys.stderr)
sys.exit(1)
if n == 1:
print("1 has no prime factors")
sys.exit(0)
factors = prime_factors(n)
if len(factors) == 1:
print(f"{n} = {factors[0]} (prime)")
else:
factor_str = " x ".join(str(f) for f in factors)
print(f"{n} = {factor_str}")
sys.exit(0)
except ValueError:
print("Error: Invalid integer", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()