AtCoder BC097 B: Exponential

問題

https://abc097.contest.atcoder.jp/tasks/abc097_b

解法

bpがX以下になる組み合わせについて考えます。

これはbについては1〜X、pについては2〜Xの組み合わせが考えられ、これは2重ループのO(N2)で求めることが出来ます。

ただし、pについては計算結果がXを超えた時点で以降は打ち切ることが出来ます。

このようにして求めた冪乗のリストの内、X以下で最大のものを求めることで解けます。

実装

a = []
for i in 1..1000
    for j in 2..1000
        m = i ** j
        break if m > 1000
        a << m
    end
end
x = gets.chomp.to_i

b = a.sort.uniq.select{|v| v <= x}
puts b[-1]