My code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,m,a,b,c,val;
vector<int> sq;
bool flag;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
void search(int dlt){
int l=-1,r=sq.size();
flag=0;
while(l+1!=r){
int mid=(l+r)>>1;
if(sq[mid]<dlt){
l=mid;
}
else{
r=mid;
}
}
if(sq[r]==dlt){
flag=1;
val=r;
}
return ;
}
void Cout(int p,int q){
if(p==0){
cout<<0;
return ;
}
int a=labs(p),b=labs(q);
if(gcd(a,b)==b){
cout<<p/q;
return ;
}
else{
while(gcd(a,b)!=1){
int tmp=gcd(a,b);
a/=tmp,b/=tmp;
}
if((p>0&&q<0)||(p<0&&q>0)){
a=-a;
}
cout<<a<<"/"<<b;
}
return ;
}
void CCout(bool op,int dlt,int a,int b){
bool pd=0;
if(b!=0){
pd=1;
Cout(-b,2*a);
}
int k=1;
for(int i=0;i<sq.size()&&sq[i]<=dlt;i++){
if(gcd(sq[i],dlt)==sq[i]){
k*=i;
dlt/=sq[i];
}
}
int p=labs(k),q=labs(2*a);
if(gcd(p,q)==q){
if(k/(2*a)==-1){
if(op){
cout<<"-sqrt("<<dlt<<')'<<endl;
}
else{
if(pd){
cout<<"+sqrt("<<dlt<<')'<<endl;
}
else{
cout<<"sqrt("<<dlt<<')'<<endl;
}
}
return ;
}
else if(k/(2*a)==1){
if(op){
if(pd){
cout<<"+sqrt("<<dlt<<')'<<endl;
}
else{
cout<<"sqrt("<<dlt<<')'<<endl;
}
}
else{
cout<<"-sqrt("<<dlt<<')'<<endl;
}
return ;
}
else{
int tmp=k/(2*a);
if(tmp>0){
if(op){
if(pd){
cout<<'+';
}
}
else{
cout<<'-';
}
}
else{
if(!op){
tmp=-tmp;
if(pd){
cout<<'+';
}
}
}
cout<<tmp<<"*sqrt("<<dlt<<')'<<endl;
return ;
}
}
else{
while(gcd(p,q)!=1){
int j=gcd(p,q);
p/=j,q/=j;
}
if(2*a<0){
k=-k;
a=-a;
}
if(p==1&&k>0){
if(op){
if(pd){
cout<<"+sqrt("<<dlt<<")/"<<q<<endl;
}
else{
cout<<"sqrt("<<dlt<<")/"<<q<<endl;
}
}
else{
cout<<"-sqrt("<<dlt<<")/"<<q<<endl;
}
}
else if(p==1&&k<0){
if(op){
cout<<"-sqrt("<<dlt<<")/"<<q<<endl;
}
else{
if(pd){
cout<<"+sqrt("<<dlt<<")/"<<q<<endl;
}
else{
cout<<"sqrt("<<dlt<<")/"<<q<<endl;
}
}
}
else{
if(k>0){
if(op){
if(pd){
cout<<'+'<<p<<"*sqrt("<<dlt<<")/"<<q<<endl;
}
else{
cout<<p<<"*sqrt("<<dlt<<")/"<<q<<endl;
}
}
else{
cout<<'-'<<p<<"*sqrt("<<dlt<<")/"<<q<<endl;
}
}
else{
if(op){
cout<<'-'<<p<<"*sqrt("<<dlt<<")/"<<q<<endl;
}
else{
if(pd){
cout<<'+'<<p<<"*sqrt("<<dlt<<")/"<<q<<endl;
}
else{
cout<<p<<"*sqrt("<<dlt<<")/"<<q<<endl;
}
}
}
}
}
}
void check(int a,int b,int c){
int dlt=b*b-4*a*c;
if(dlt<0){
cout<<"NO"<<endl;
return ;
}
else{
search(dlt);
long double x=(sqrt(dlt)-b)/(2*a),y=(-sqrt(dlt)-b)/(2*a);
if(flag){
if(x>y){
Cout(val-b,2*a);
cout<<endl;
}
else{
Cout(-val-b,2*a);
cout<<endl;
}
}
else{
if(x>y){
CCout(1,dlt,a,b);
}
else{
CCout(0,dlt,a,b);
}
}
}
return ;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>t>>m;
int n=5*m*m;
for(int i=0;i*i<=n;i++){
sq.push_back(i*i);
}
while(t--){
cin>>a>>b>>c;
check(a,b,c);
}
return 0;
}