Modernize factorisation demo (mostly augassign.)

This commit is contained in:
Georg Brandl 2009-10-10 21:55:11 +00:00
parent 3d072c9587
commit a0bcc27e65
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(raw_input, '')
for arg in source:
try:
while 1:
n = 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()