- 注意:选择的 ret / i 和 i 相当于 (c +b) 和 (c - b),它俩的和还需满足是偶数。
accode:
#include <stdio.h>
typedef long long ll;
ll a, b, c, n;
inline ll max(ll x, ll y){return (x > y) ? x : y;}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%lld %lld", &n, &a);
if(n == 0 || n > 2)
printf("-1 -1\n");
else if(n == 1)
printf("1 %lld\n", a + 1);
else
{
ll ret = 1ll * a * a;
for(ll i = 1; i <= a; i++)
{
if(ret % i == 0 && ret % (ret / i) == 0 && i != ret / i && (ret / i + i) % 2 == 0)
{
c = (i + ret / i) / 2;
b = max(i, ret / i) - c;
break;
}
}
printf("%lld %lld\n", b, c);
}
}
return 0;
}