题意:给n,求x;
直接枚举肯定超时, 把给的式子变形, (y+x)(y-x) = n;
令y-x = b, y+x = a;
枚举b, b 的范围肯定是sqrt(n), y = (a+b)/2; x = (a-b)/2;
b越大, x越小, 所以倒着枚举b
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std; int main()
{
int t, n, a, b, x;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
x = -;
for(b = sqrt(n); b >= ; b--)
{
if(n%b==)
{
a = n/b;
if(a>b && (a-b)%==)
{
x = (a-b)/;
break;
}
}
}
printf("%d\n", x);
}
return ;
}