ProjectEulerはじめました
http://projecteuler.net/
頭の体操によさそう。とりあえず目指せレベル1*1。
問題12:
「約数の個数が初めて500を超える三角数(Wikipedia.ja)を求めよ」
てきとーに。
#!/usr/bin/env python # -*- coding: utf-8 -*- import itertools from datetime import datetime start = datetime.now() # 三角数ジェネレータ def tri(): sm = 0 for n in itertools.count(1): sm += n yield sm # 約数の個数を得る def factors(n): return len([x for x in xrange(1, n+1) if n%x == 0]) for n in tri(): if factors(n) > 500: print n break end = datetime.now() print end-start # 実行時間表示
あまりにも時間がかかるもんだから動かしたまま放置したところ、なんと解答に9時間18分かかってた(笑)
正解そのものは得られたものの、これではあんまりなので改良したい。
[追記]
def factors(n): def gen(n): sqrt_n = math.sqrt(n) for x in xrange(1, int(sqrt_n)+1): if n%x == 0: yield x if x**2 != n: yield n/x return len(list(gen(n)))
とても速くなった(6秒台)
*1:25問以上達成