题解:P11496 [ROIR 2019 Day 1] 完全平方

· · 题解

思路:

如果是零,那答案也为零,因为零是完全平方数。

如果小于零,那么就把 k 取为它的绝对值,用平方差公式,可以从 \sqrt k1 去枚举,得到最小值。

如果大于零,也用平方差公式,枚举出最小值。

code:

#include <bits/stdc++.h>
#define int long long
using namespace std;

int k, ans = 0;
bool flag = 0;

signed main() {
    cin >> k;
    if (k == 0) cout << 0;
    else {
        if (k < 0) {
            k = -k;
            flag = true;
        }
        for (int i = 1; (long long)i * i <= k; i++) {
            if (k % i == 0 && i % 2 == (k / i) % 2) ans = i;
        }
        if (ans == 0) cout << "none";
        else cout << ((!flag) ? ((ans + k / ans) / 2) : ((k / ans - ans) / 2)) << endl;
    }
    return 0;
}