/*
摘: 解题思路:如果要按正常方法从小到大遍历,由于数据量大一定会超时。 其实上述式子转化后可以分解因子:n = ( y - x )*( y + x ) ; 令 y - x = i,所以有 x + y = n / i ,即 ( n / i - i ) / 2 = x. 注意:x 要大于 0 ,当 n 是完全平方数时要注意。2012-04-21
*/ #include<stdio.h> #include<math.h>int main()
{ int T,n,i,x; scanf("%d",&T); while(T--){ scanf("%d",&n); i = (int)sqrt(n); for(; i>0; i--){ if(n%i==0 && (n/i-i)%2==0 && (n/i-i)/2>0){ // (n/i-i)/2>0 保证x > 0 x = (n/i-i)/2; break; } } if(i>0)printf("%d\n",x); else printf("-1\n"); } return 0; }