My Code:
#include <bits/stdc++.h>
using namespace std;
int T,M;
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
scanf("%d%d",&T,&M);
while(T--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<0){
a=-a;b=-b;c=-c;
}
int d=b*b-4*a*c;
if(d<0){
printf("NO");
continue;
}
int p=1;
for(int i=sqrt(d);i>=1;i--){
if(d%(i*i)==0){
d/=(i*i);p=i;break;
}
}
int g2=gcd(abs(p),abs(2*a));
if(d==1 || d==0){
if(a>0) b=b-p*d;
else b=b+p*d;
}
int flag=0;
if(b!=0){
flag=1;
int g1=gcd(abs(b),abs(2*a));
if(b%(2*a)==0){
printf("%d",(0-b)/(2*a));
}
else if(a>0) printf("%d/%d",(0-b)/g1,(2*a)/g1);
else printf("%d/%d",(b)/g1,(-2*a)/g1);
if(d==1) continue;
}
if(d==0){
if(!flag) printf("0");
continue;
}
if(flag) printf("+");
if(p%(2*a)==0){
printf("%d*sqrt(%d)",p/(2*a),d);
}
else if(a>0){
if(p/g2!=1) printf("%d*",p/g2);
printf("sqrt(%d)/%d",d,(2*a)/g2);
}
else{
if(p/g2!=1) printf("%d*",p/g2);
printf("sqrt(%d)/%d",d,(-2*a)/g2);
}printf("\n");
}
return 0;
}