symbian-qemu-0.9.1-12/python-2.6.1/Demo/scripts/fact.py
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Demo/scripts/fact.py	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,47 @@
+#! /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
+
+def fact(n):
+    if n < 1: raise ValueError # 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()