public class PowTest {
public static void main(String[] args) {
// 写一个程序,输入一个正整数N, 输出所有正整数M ,满足 M <= N , M= (a^3)+(b^3) = (c^3)+(d^3)
//分析:a,b,c,d假设为整数,那么确定的事以上6个变量均为整数
HashMap<Integer, Integer> bPowMap = new HashMap<>();//key为a的立方,value为a
HashMap<Integer, String> sumMap = new HashMap<>();//key为M,value为(a+b)
double N = 1000000;
// double nPow_ = Math.pow(N,1.0/3);//pow函数开根号的时候,由于1.0/3为无线循环小数,基于计算,得到的值不能精确为整数;
int nPow_ = 100;
for (int a = -nPow_; a <= nPow_; a++) {//0-4之间进行循环
int aPowValue = (int) Math.pow(a, 3);//求a^3
bPowMap.put(aPowValue, a);//把a和a^3保存,可以看做是b,因为a和b的值可以为相等的,所以从第一次添加开始就需要有求和
Object[] aPowKeySet = bPowMap.keySet().toArray();
for (int i = 0; i < aPowKeySet.length; i++) {//循环将map中b值取出,然后和a^3求和sumAB,然后满足<=N则保存sumAB,
// 最后就是每一次保存判断sumAB是否已经存在,存在则打印abcd。
Integer keyV = (Integer) aPowKeySet[i];
int sumAB = aPowValue + keyV;
if (sumAB <= N&&sumAB>0) {
if (sumMap.containsKey(sumAB)) {
System.out.println("M=" + sumAB + "; a_b_c_d : " + sumMap.get(sumAB) + "_" + a + "_" + bPowMap.get(keyV));
} else {
sumMap.put(sumAB, a + "_" + bPowMap.get(keyV));
}
}
}
}
System.out.println("cc");
}
}