http://projecteuler.net/index.php?section=problems&id=341
ややこしそうだったからずっと放置していたが、組んでみたら簡単だった。
Gを素直に計算するとき、リストか何かが必要かと思ったが、こう書くとその必要はない。
from itertools import * def G(): yield 1 for k, n in enumerate(G(), 1): for m in xrange(n - 1): yield k yield k + 1 print list(islice(G(), 20))
Gを2回計算しているけれど、中で使っているGはほとんど生成しないので影響ない。