annotate Demo/scripts/fact.py @ 25838:8540887bcec6 2.2

Backport of 2.183: Fix memory leak in add_subclass() found by NealN with valgrind.
author Guido van Rossum <guido@python.org>
date Fri, 18 Oct 2002 13:42:21 +0000
parents 73758db2f464
children 2bc66f1df7cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1269
diff changeset
1 #! /usr/bin/env python
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
504
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
3 # Factorize numbers.
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
4 # The algorithm is not efficient, but easy to understand.
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
5 # If there are large factors, it will take forever to find them,
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
6 # because we try all odd numbers between 3 and sqrt(n)...
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 import sys
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 from math import sqrt
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 error = 'fact.error' # exception
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 def fact(n):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 if n < 1: raise error # fact() argument should be >= 1
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 504
diff changeset
15 if n == 1: return [] # special case
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 res = []
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # Treat even factors special, so we can use i = i+2 later
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 504
diff changeset
18 while n%2 == 0:
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 res.append(2)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 n = n/2
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # Try odd numbers up to sqrt(n)
759
41dd393487f5 small fixes
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
22 limit = sqrt(float(n+1))
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 i = 3
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 while i <= limit:
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 504
diff changeset
25 if n%i == 0:
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 res.append(i)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 n = n/i
504
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
28 limit = sqrt(n+1)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 else:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 i = i+2
759
41dd393487f5 small fixes
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
31 if n != 1:
41dd393487f5 small fixes
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
32 res.append(n)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 return res
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 def main():
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 if len(sys.argv) > 1:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 for arg in sys.argv[1:]:
504
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
38 n = eval(arg)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 print n, fact(n)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 else:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 try:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 while 1:
504
eb03977baeeb Adapt to mixed-mode arithmetic, and added a warning comment.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
43 n = input()
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 print n, fact(n)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 except EOFError:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 pass
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 main()