rt 记录
#include<bits/stdc++.h>
using namespace std;
int t,m;
struct node{
int p;
int q;
};
int gcd(int a,int b){
if(b==0){
return a;
}else{
return gcd(b,a%b);
}
}
node simp(node n){
if(n.p==0)return {0,0};
if(n.p%n.q==0)return {n.p/n.q,0};
bool f=(n.p>0&&n.q<0)||(n.p<0&&n.q>0);
n.p=abs(n.p);n.q=abs(n.q);
int t=gcd(n.p,n.q);
n.p/=t;
n.q/=t;
if(f){
return {-n.p,n.q};
}else{
return {n.p,n.q};
}
}
int main(){
//freopen("uqe.in","r",stdin);
//freopen("uqe.out","w",stdout);
cin>>t>>m;
while(t--){
int a,b,c,i,j;
int de;
cin>>a>>b>>c;
de=b*b-4*a*c;
if(de<0){
cout<<"NO\n";
continue;
}
bool isra=0;
node ans;
if((int)sqrt(de)*(int)sqrt(de)==de){
isra=1;
}
if(isra){
if(a>0){
ans={-b+(int)sqrt(de),2*a};
ans=simp(ans);
}else{
ans={-b-(int)sqrt(de),2*a};
ans=simp(ans);
}
if(ans.q==0){
cout<<ans.p<<endl;;
}else{
cout<<ans.p<<"/"<<ans.q<<endl;
}
}else{
node q1,q2;
q1={-b,2*a};
q1=simp(q1);
if(q1.p!=0){
if(q1.q==0){
cout<<q1.p;
}else{
cout<<q1.p<<"/"<<q1.q;
}
if(a<0){
a=abs(a);
cout<<"-";
}else{
cout<<"+";
}
}
q2={1,2*a};
for(int i=2;i*i<=de;i++){
while(de%(i*i)==0){
de/=(i*i);
q2.p*=i;
}
}
q2=simp(q2);
if(q2.q==0){
if(q2.p==1){
cout<<"sqrt("<<de<<")\n";
}else{
cout<<q2.p<<"*"<<"sqrt("<<de<<")\n";
}
}else{
if(q2.p==1){
cout<<"sqrt("<<de<<")/"<<q2.q<<endl;
}else{
cout<<q2.p<<"*"<<"sqrt("<<de<<")/"<<q2.q<<endl;
}
}
}
}
return 0;
}