P9783 题解

· · 题解

根据平方差公式,对原式进行变式,得:x^2-y^2=(x+y)(x-y)=n

考虑判断 n 的奇偶性。

n 为偶数,x+yx-y 至少有一个式子为偶数,设 x+y=2,则 x-y=\dfrac{n}{2},解方程得 \begin{cases}x=\dfrac{n}{4}+1\\y=\dfrac{n}{4}-1\end{cases}。容易发现,当 n 不为 4 的倍数时,xy 不为整数,此时输出 No,否则输出 Yesx,y

n 为奇数,则 x+yx-y 一定为奇数,xy 的奇偶性不同。设 x-y=1,x+y=n,这样 (x+y)(x-y) 的值一定为 n。解方程,得 \begin{cases}x=\dfrac{n+1}{2}\\y=\dfrac{n-1}{2}\end{cases}。输出 Yesx,y

特判:当 n=14 时,原方程是无解的,输出 Non=0 时,x 可以等于 y,输出 Yes 和任意两个相同的数。

#include <bits/stdc++.h>

using namespace std;

long long n;

int main() {
    cin >> n;
    if (n == 1 || n == 4) {
        cout << "No";
        return 0;
    }
    if (!n) {
        cout << "Yes\n" << 1 << ' ' << 1;
        return 0;
    }
    if (!(n % 2)) {
        if (n % 4 != 0) {
            cout << "No";
        }
        else {
            cout << "Yes\n" << n / 4 + 1 << ' ' << n / 4 - 1;
        }
    }
    else {
        cout << "Yes\n" << (n + 1) / 2 << ' ' << (n - 1) / 2;
    }
    return 0;
}