#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll T, M;
ll gcd(ll a, ll b) {
if(a < b) swap(a, b);
if(a%b == 0) return b;
return gcd(b, a%b);
}
ll abss(ll x) {return (x<0?-x:x);}
int main() {
freopen("uqe.in", "r", stdin);
freopen("uqe.out", "w", stdout);
cin >> T >> M;
while(T--) {
ll a, b, c;
cin >> a >> b >> c;
if(a < 0) {
a*=-1;b*=-1;c*=-1;
}
ll delta = b*b-4*a*c;
if(delta < 0) {
cout << "NO" << endl;
continue;
}
ll q1u = -b;
ll q1d = 2*a;
ll q2u = 1;
ll q2d = 2*a;
ll dd = delta;
for(ll i = 1; i*i <= dd; i++) {
if(delta%(i*i) == 0) {
delta /= i*i;
q2u *= i;
}
}
if(delta == 1) {
q1u += q2u;
q2u = 0;
}
if(delta == 0) q2u = 0;
if(q1u != 0) {
ll g = gcd(abss(q1u), abss(q1d));
q1u /= g; q1d /= g;
if(q1d < 0) q1u *= -1,q1d *= -1;
cout << q1u;
if(q1d != 1) cout << "/" << q1d;
if(q2u != 0) cout << "+";
}
if(q1u == 0 && q2u == 0) {
cout << "0" << endl;
continue;
}
if(q2u != 0 && delta != 0) {
ll g = gcd(abss(q2u), abss(q2d));
q2u /= g; q2d /= g;
if(q2d < 0) q2u *= -1,q2d *= -1;
if(q2u != 1) cout << q2u << "*";
cout << "sqrt(" << delta << ")";
if(q2d != 1) cout << "/" << q2d;
}
cout << endl;
}
return 0;
}
模拟题,思路应该还算清晰。gcd没挂