Project Euler Problem 029

http://projecteuler.net/index.php?section=problems&id=29
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2029

Consider all integer combinations of a^b for 2  <= a  <= 5 and 2  <= b <= 5:
  
  2^2= 4, 2^3=  8, 2^4= 16, 2^5=  32
  3^2= 9, 3^3= 27, 3^4= 81, 3^5= 243
  4^2=16, 4^3= 64, 4^4=256, 4^5=1024
  5^2=25, 5^3=125, 5^4=625, 5^5=3125
  
If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:

  4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

How many distinct terms are in the sequence generated by ab for 2  a  100 and 2  b  100?

全部計算して結果を数えた。あんまり良いやり方ではないとおもうけど、、


Pythonで冪乗を計算する方法として ** 演算子と math.pow 関数があるけど、 math.pow の方が早かった。

import math
import datetime

def euler029():
    r = xrange(2, 101)
    x = set([ math.pow(a, b) for a in r for b in r ])
    print len(x)


begin = datetime.datetime.now()
euler029()    
end = datetime.datetime.now()
print end - begin

答え: 9183
実行時間: 0.009549秒くらい ( a ** b だと 0.026253秒くらい )