kubo39's blog

ただの雑記です。

2のn乗だけを選ぶ

ニセコイのマリー&あすみすに命を救われている.

10000000までの数から2のn乗の数だけを選んで出力. ただし実行結果は1秒以内、という問題を出した.

print 1
for i in xrange(2, 10000000, 2):
    if not i & (i - 1):
        print i

3系ならこう書ける.

print(1)
[print(i) for i in range(2, 10000000, 2) if not i & (i-1)]

てもとのマシンだとどちらも1秒以内でできた.

下のは3系の出力結果とかかった時間.

$ time python3.3 exercise.py 
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608

real    0m0.617s
user    0m0.604s
sys 0m0.008s