Source code for prime_factors

#!/usr/bin/env python
# Copyright 2011 Abhinav Jauhri
#
# This is free software, licensed under the Lesser Affero General
# Public License, available in the accompanying LICENSE.rtf file.
 

from prime_numbers import rwh

__all__ = ['PrimesFactor', 'PrimeFactorsError']


[docs]class PrimeFactorsError(Exception): """Base class for errors in the :mod:`compute_prime_factors` module. Mehtods of the :class:`PrimeFactor` raise this when unexpected behaviour occurs. """ def __init__(self, error): """Create an exception with an error message. :param error: The actual error message :type error: string """ self.error = error def __str__(self): """Return a string representaion of the :exc:`PrimeFactorError`.""" return repr("Exception: "+self.error)
[docs]class PrimeFactors(object): """ An easy-to-use Python wrapper to print prime factors of an integer >>> from math_util import PrimeFactors >>> prime_factors = PrimeFactors(15) >>> list = prime_factors.compute_prime_factors() >>> primt list [3,5] """ def __init__(self, num=0, prime_factors=[]): """ Create a new :class:`PrimeFactors` object using the given `num`. :param num: Integer for which prime factors have to be generated :type num: int :param prime_factors: Array of prime factors :type prime_factors: list """ self.num = num self.prime_factors = prime_factors
[docs] def compute_prime_factors(self): """ Computes the prime fators for a given integer. :return: List of prime factors :rtype: list :raises PrimeFactor Error: if something unexpected happens """ if self.num < 1: raise PrimeFactorsError('Value less than one is not accepted') else: prime_numbers = rwh(self.num) num = self.num count = 0 while num is not 1: while num%prime_numbers[count] is 0: num /= prime_numbers[count] self.prime_factors.append(prime_numbers[count]) count = count + 1 return self.prime_factors
if __name__ == "__main__": import sys """ Prints all prime factors for a given integer. Usage: prime_factors 15 """ def main(argv): if len(argv) is not 2: print main.__doc__ sys.exit(1) try: obj = PrimeFactors(int(argv[1])) print obj.compute_prime_factors() except PrimeFactorsError, err: sys.stderr.write('%s\n' % err) sys.exit(1) main(sys.argv)