LoginSignup
3
2

More than 5 years have passed since last update.

Project Euler 29「個別のべき乗」

Last updated at Posted at 2018-02-14

すっごい簡単。

Problem 29 「個別のべき乗」

2 ≤ a ≤ 5 と 2 ≤ b ≤ 5について, a^b を全て考えてみよう:

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

これらを小さい順に並べ, 同じ数を除いたとすると, 15個の項を得る:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
2 ≤ a ≤ 100, 2 ≤ b ≤ 100 で同じことをしたときいくつの異なる項が存在するか?

def hoge(num):
    set_numbers = set()
    for a in range(2, num+1):
        for b in range(2, num+1):
            set_numbers.add(a ** b)
    return len(set_numbers)

print(hoge(100))

ワンライナーだとこう。

len( set( a ** b for b in range(2, num+1) for a in range(2, num+1) ) )

ついさっき教えてもらったジェネレータ内包表記を早速実践していくぅ。

追記

shiracamusさんからのご指摘を頂いて訂正
さすがに間違った記載方法のままは問題があると思ったので。

len( set( a ** b for a in range(2, num+1) for b in range(2, num+1) ) )

あと、ググってたら出てきたんですがsetの内包表記はこういう書き方もできるんですね。

len({ a ** b for a in range(2, num+1) for b in range(2, num+1) })
3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2