思路是通过(p + q)^2 - 4pq先求 (p -q) ^ 2
判断其是否为平方数
再输出结果
dalaos看看吧
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std ;
int k ;
long long n , d , e ;
long long qa , qf , qans , flag, p , q ;
int main()
{
freopen("decode.in","r",stdin);
freopen("decode.out","w",stdout);
cin >> k ;
for ( int i = 1 ; i <= k ; i ++ )
{
scanf("%lld%lld%lld", &n , &d , &e ) ;
qa = n - d * e + 2 ; // p + q
qf = qa * qa - 4 * n ; // (p + q) ^ 2 - 2pq
// cout << qa << " " << qf << endl ;
if ( qf <= 0 )
{
printf("NO\n");
continue ;
}
flag = 0 ;
for ( long long j = 1 ; j * j <= qf ; j ++ )
{
if ( j * j == qf )
{
qans = j ;
flag = 1 ;
}
}
if ( flag == 0 || qa - qans <= 0 || ( (qa - qans) % 2 ) != 0 )
{
printf("NO\n");
continue ;
}
long long op1 = (qa + qans) / 2 , op2 = (qa - qans) / 2 ;
if ( op1 <= op2 ) p = op1 , q = op2 ;
else p = op2 , q = op1 ;
printf("%lld %lld\n", p , q ) ;
}
fclose(stdin);
fclose(stdout);
return 0 ;
}