y² − x² = n → (y−x)(y+x) = n。
設 u = y−x,v = y+x,則 u·v = n,且 u, v 同奇偶(因 y = (u+v)/2, x = (v−u)/2 必須為整數)。
要求最小正整數 x = (v−u)/2,即在所有合法因子對 (u,v) 中最大化 u(最小化差值)。
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long n;
while (cin >> n) {
long long ans = -1;
for (long long u = (long long)sqrt(n); u >= 1; --u) {
if (n % u) continue;
long long v = n / u;
if (u == v) continue; // x=0
if ((u & 1) != (v & 1)) continue; // 奇偶不同
ans = (v - u) / 2;
break;
}
cout << ans << '\n';
}
return 0;
}
O(√n) 每測試用例,n < 10⁹ 完全足夠。