Merged revisions 75325 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r75325 | georg.brandl | 2009-10-10 23:55:11 +0200 (Sa, 10 Okt 2009) | 1 line

  Modernize factorisation demo (mostly augassign.)
........
This commit is contained in:
Georg Brandl 2009-10-10 21:57:03 +00:00
parent 4630c09351
commit 8bef554cf7
1 changed files with 19 additions and 17 deletions

View File

@ -9,39 +9,41 @@ 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
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:
# Treat even factors special, so we can use i += 2 later
while n % 2 == 0:
res.append(2)
n = n//2
n //= 2
# Try odd numbers up to sqrt(n)
limit = sqrt(float(n+1))
limit = sqrt(n+1)
i = 3
while i <= limit:
if n%i == 0:
if n % i == 0:
res.append(i)
n = n//i
n //= i
limit = sqrt(n+1)
else:
i = i+2
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))
source = sys.argv[1:]
else:
source = iter(input, '')
for arg in source:
try:
while 1:
n = eval(input())
print(n, fact(n))
except EOFError:
pass
n = int(arg)
except ValueError:
print(arg, 'is not an integer')
else:
print(n, fact(n))
if __name__ == "__main__":
main()