59 lines
1.4 KiB
Python
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() |