summaryrefslogtreecommitdiffstats
path: root/Demo/scripts/fact.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1991-06-04 20:36:54 (GMT)
committerGuido van Rossum <guido@python.org>1991-06-04 20:36:54 (GMT)
commitec758ead391daa2ce0e5697aa0e67ec3ba0f37af (patch)
tree7f2d186afd41d797882d5b5be3330e921804ebe9 /Demo/scripts/fact.py
parent0481447f4135c11d42ae25f55696af8e8d52fe74 (diff)
downloadcpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.zip
cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.gz
cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.bz2
Initial revision
Diffstat (limited to 'Demo/scripts/fact.py')
-rwxr-xr-xDemo/scripts/fact.py45
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()