前言:刚刚开始写的时候也想到了先求出两个的解,但是没想到最后正负数系数怎么处理
且我才知道求解gcd是可以负数和正数的
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int a,b,c;
void solve(){
cin >> a >> b >> c;
int u = b*b - 4 * a * c;
if(u<0){
cout << "NO" << endl; return; // 这个应该是没有问题的
}
int d = sqrtl(u);
if(d*d!=u){
cout << "NO" << endl; return; // 这个应该是没有问题的
}
int x = -1*b + u, y = -1*b-u;
int domx = 2*a,domy = 2*a;
int gcdx = __gcd(x,domx), gcdy = __gcd(y,domy);
domx /= gcdx, x/=gcdx, domy /= gcdy, y/= gcdy;
if(a%abs(domx*domy)){
cout << "NO" << endl; return;
}
int z = a/domx/domy;
domx *= z , x *= z;
cout << -1*domx << " " << x << " " << -1*domy << " " << y << endl;
return ;
}
signed main(){
cin >> t;
while(t--){
solve();
}
return 0;
}