···11import fileinput
2233PRESENTS = int(fileinput.input()[0].strip())
44+CACHE = {}
55+4657def factors(n):
66- return set(x for tup in ([i, n//i]
77- for i in range(1, int(n**0.5)+1) if n % i == 0) for x in tup)
88+ if n in CACHE:
99+ return CACHE[n]
1010+1111+ CACHE[n] = set()
1212+1313+ for i in range(1, int(n**0.5) + 1):
1414+ if n % i == 0:
1515+ CACHE[n] |= set([i, n//i])
1616+1717+ return CACHE[n]
1818+819920house = 1
1010-1111-while True:
1212- if sum(factors(house)) * 10 >= PRESENTS:
1313- print "Lowest house number #1:", house
1414- break
2121+while sum(factors(house)) * 10 < PRESENTS:
1522 house += 1
16232424+print "Lowest house number #1:", house
2525+1726house = 1
2727+while sum(x for x in factors(house) if (x * 50 >= house)) * 11 < PRESENTS:
2828+ house += 1
18291919-while True:
2020- if sum(x for x in factors(house) if (x * 50 >= house)) * 11 >= PRESENTS:
2121- print "Lowest house number #2:", house
2222- break
2323- house += 1
3030+print "Lowest house number #2:", house