题目:
考虑
a
b
在 2
a
5,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
如果将这些数字排序,并去除重复的,我们得到如下15个数字的序列:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
ab 在 2
a
100,2
b
100 下生成的序列中有多少个不同的项?
原题:
Consider all integer combinations of ab 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?
解题思路:
由于存在100^100次方,所以一开始考虑用大树求和的办法,后来发现这样做运行的时候耗时太长,想了又想觉得还是用暴力求解,遍历的办法,用hashset去重,定义hashset时不要定义整数型就可以存放超大数,虽然这样写代码不爱好,但确实是这道题最简单最快的解决办法了,如下是代码:
public class Launcher {
public static void main(String[] args) {
HashSet sumList=new HashSet();
int n=0;
for(int i=2;i<=100;i++){
for(int j=2;j<=100;j++){
n++;
sumList.add(Math.pow(i, j));
}
}
System.out.println(sumList.size());
}
}