Staging
v0.5.1
https://github.com/python/cpython
Raw File
Tip revision: 86f5bf6be9f3d21ebdf1aa991927f56971342362 authored by Anthony Baxter on 17 August 2006, 00:38:04 UTC
Branching release25-maint. All further 2.5 releases (including the release candidates,
Tip revision: 86f5bf6
fact.py
#! /usr/bin/env python

# Factorize numbers.
# The algorithm is not efficient, but easy to understand.
# If there are large factors, it will take forever to find them,
# because we try all odd numbers between 3 and sqrt(n)...

import sys
from math import sqrt

error = 'fact.error'            # exception

def fact(n):
    if n < 1: raise error   # fact() argument should be >= 1
    if n == 1: return []    # special case
    res = []
    # Treat even factors special, so we can use i = i+2 later
    while n%2 == 0:
        res.append(2)
        n = n/2
    # Try odd numbers up to sqrt(n)
    limit = sqrt(float(n+1))
    i = 3
    while i <= limit:
        if n%i == 0:
            res.append(i)
            n = n/i
            limit = sqrt(n+1)
        else:
            i = i+2
    if n != 1:
        res.append(n)
    return res

def main():
    if len(sys.argv) > 1:
        for arg in sys.argv[1:]:
            n = eval(arg)
            print n, fact(n)
    else:
        try:
            while 1:
                n = input()
                print n, fact(n)
        except EOFError:
            pass

if __name__ == "__main__":
    main()
back to top