思路来自:dark_dream的cnblogs博客)
题意:给定正整数b,求最大的整数a,满足a*(a+b) 为完全平方数
解题思路:假设 a^2+a*b = (a+t)^2 -> a^2 + a*b = a^a + 2*a*t +t^2 -> a*b = 2*a*t +t^2 -> a = t^2/(b-2*t);
因为 a = t^2/(b-2*t); 易知( t >= 0 && t < b/2)。假如 可知 在t的范围内 a 随 t 的增大而增大 ,又因为 a 必须是 整数
所以
(1) b为奇数的时候 t = (b-1)/2;
(2) b 为 偶数 且 (b-2)/2 为偶数 ,那么t = (b-2)/2
(3)b 为 偶数且(b-2)/2 为奇数,那么 t = (b - 4)/2
//要注意用long long 否则会 WA。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
long long a,b;
long long res;
int T;
scanf("%lld",&T);
while(T--){
scanf("%d",&b);
if(b%2==1){res=(b-1)/2;a=(long long)res*res/(b-2*res);}
else if(b%2==0&&((b-2)/2)%2==0){res=(b-2)/2;a=(long long)res*res/(b-2*res);}
else if(b%2==0&&((b-2)/2)%2==1){res=(b-4)/2;a=(long long)res*res/(b-2*res);}
printf("%lld\n",a);
}
return 0;
}