题意:求最小的整数x,使得y^2 = x^2 + n, n为给定的正整数。
题解:移项得 (y-x)*(y+x) = n。设a为a的约数,且a < n/a。
当y-x大于0时,y-x = a ,y+x = n/a; 解得 x = (n/a-a)/2
当y-x小于0时,x的表达式是一样的。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int T, n, i;
scanf ("%d", &T);
while (T--) {
scanf ("%d", &n);
bool flag = false;
for (i = (int)sqrt(n*1.0); i >= 1; i--)
{
if (n % i == 0)
{
if ((n / i - i) % 2 == 0) {
int ans = (n / i - i) / 2;
if (ans > 0) { printf ("%d\n", ans); flag = true; break; }
}
}
}
if (!flag) printf ("-1\n");
}
return 0;
}