完全平方数

求一个正整数加上正整数x是一个完全平方数,加上正整数y还是一个完全平方数。输入两个正整数x,y。打印所有解。

public class Demo {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        scanner.close();
        //把输入的数字大数字放在x,小数字放在y
        if (x < y) {
            x = x ^ y;
            y = x ^ y;
            x = y ^ x;
        }
        if (x == y || y <= 0) {
            //满足这些条件不计算
            System.out.println(MESSAGE);
        } else {
            calculation(x, y);
        }
    }

    public static void calculation(int x, int y) {
        double t = getLoopNumber(x, y);     //计算出循环次数
        int k = 0;      //用来判断是否有解,k>0有解
        while (t > 0) {
            double temp = (x - y) / t;
            if (temp % 1 != 0) {
                t--;
                continue;
            }
            double a = (temp + t) / 2;
            if (a % 1 != 0) {
                t--;
                continue;
            }
            double b = a - t;
            int r = (int) (b * b - y);
            System.out.println("满足条件的数字:" + r);
            System.out.println(r + "+" + y + "=" + (r + y) + "开方得 " + (int) Math.sqrt(r + y) + "\t" + r + "+" + x + "="
                    + (r + x) + "开方得 " + (int) Math.sqrt(r + x));
            t--;
            k++;
        }
        if (k == 0) {
            System.out.println("不存在这样的正整数");
        }
    }

    public static double getLoopNumber(int x, int y) {
        double a = Math.ceil(Math.sqrt(x));
        double b = Math.ceil(Math.sqrt(y));
        double t = (x - y) / (a + b);
        return Math.floor(t);
    }

    private static final String MESSAGE = "你特么在逗我!";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值