diff options
author | Guido van Rossum <guido@python.org> | 1991-06-04 20:36:54 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1991-06-04 20:36:54 (GMT) |
commit | ec758ead391daa2ce0e5697aa0e67ec3ba0f37af (patch) | |
tree | 7f2d186afd41d797882d5b5be3330e921804ebe9 /Demo/scripts/fact.py | |
parent | 0481447f4135c11d42ae25f55696af8e8d52fe74 (diff) | |
download | cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.zip cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.gz cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.bz2 |
Initial revision
Diffstat (limited to 'Demo/scripts/fact.py')
-rwxr-xr-x | Demo/scripts/fact.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Demo/scripts/fact.py b/Demo/scripts/fact.py new file mode 100755 index 0000000..ba75a04 --- /dev/null +++ b/Demo/scripts/fact.py @@ -0,0 +1,45 @@ +#! /usr/local/python + +# Factorize numbers, slowly. +# This version uses plain integers and is thus limited to 2**31-1. + +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 = int(sqrt(float(n+1))) + i = 3 + while i <= limit: + if n%i = 0: + res.append(i) + n = n/i + limit = int(sqrt(float(n+1))) + else: + i = i+2 + res.append(n) + return res + +def main(): + if len(sys.argv) > 1: + for arg in sys.argv[1:]: + n = int(eval(arg)) + print n, fact(n) + else: + try: + while 1: + n = int(input()) + print n, fact(n) + except EOFError: + pass + +main() |