当前位置: 代码迷 >> 综合 >> 欧拉工程第29题:Distinct powers
  详细解决方案

欧拉工程第29题:Distinct powers

热度:52   发布时间:2023-12-13 07:17:19.0

题目链接:https://projecteuler.net/problem=29

a^b for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100,能产生无重复的数据有多少个?
这个题目其实很简单的,注意一点定义成int、long都会发生越界的,Long只能存储:-2^64+1–2^64-1
所以不要用long,不然错的找不到原因。在java中Math类,可以计算指数,还是要注意这个返回的结果是double型,如果转成long,恭喜你错了。查看javaAPI中,double类型有如下截图:
double长度
用double还是能存完的。
java中Set集合不包含相同元素。有HashSet、TreeSet都可以应用保证不会有重复的数据。

package projecteuler21to30;import java.util.Date;
import java.util.TreeSet;class level29{void solve(){int startA=2;int endA=100;int startB=2;int endB=100;int num=0;TreeSet set=new TreeSet();for(int i=startA;i<=endA;i++){for(int j=startB;j<=endB;++j){
// long powab=(long) Math.pow(i, j);//有2的100次方,发生越界的情况,所有这样不对。//long最长的是2的64次方-1.都是因为转成long惹的祸double powab= Math.pow(i, j);if(set.add(powab)){
   //set.add(Math.pow(i, j))num++;
// System.out.print(powab+"、");}}}System.out.println(set.size()+","+num);}}
public class Problem29 {public static void main(String[] args){Date beginTime=new Date();new level29().solve(); //9183Date endTime=new Date();long Time = endTime.getTime()-beginTime.getTime();System.out.println("Time:"+Time/1000+"秒"+Time%1000+"毫秒");}
}
  相关解决方案