029. 独特的幂(Distinct powers)

对于\(2\le a \le5\)\(2\le b\le5\),考虑所有的整数\(a\)\(b\)的组合\(a^b\),如下:

$$ 22=4, 23=8, 24=16, 25=32\\ 32=9, 33=27, 34=81, 35=243\\ 42=16, 43=64, 44=256, 45=1024\\ 52=25, 53=125, 54=625, 55=3125 $$
如果把上面的结果按照数字顺序从小到大排列并去掉所有重复的数字,我们可以得到以下有15个不同数字的序列:
$$ 4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125 $$
求对于\(2\le a \le100\)\(2\le b\le100\)\(a^b\)会产生的序列中的有多少个不同的数字?

分析:此题需要检查的组合数量为\(99\times99=9801\)个,所以完全可以直接使用暴力算法解决。使用python中的集合推导式可以计算不同的组合,并去掉数字中的重复项,最后再求集合中数字的多少即为所求。

def main():
    r = range(2,101)
    return len({a**b for a in r for b in r})