题意:给定一个n,问是否存在x使得y*y = n+x*x。
思路:n=(y-x)*(y+x),枚举n的因数
令I=y-x
则n/I=y+x
=>x=(n/i-i)/2,x为整数,且大于0 也就要使得n/I-I>0,n/I>I,枚举前sqrt(n)个因数
#include<cstdio>
#include<cstring>
#include<cmath>
int main()
{
int n,t;
scanf("%d",&t);
while(t--)//(y-x)(y+x) = n
{
scanf("%d,",&n);
int len=(int)sqrt(n);
int ans=-1;
for(int i=len;i>0;i--)
{
if(n%i==0&&(n/i-i)%2==0&&(n/i-i)/2>0)
{
ans=(n/i-i)/2;
break;
}
}
printf("%d\n",ans);
}
}