输入一个正整数N, 输出所有正整数M ,满足 M小于等于 N , M等于a三次方加b三次方 等于c三次方加d三次方

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");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值