#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
while(b!=0)
{
a%=b;swap(a,b);
}return a;
}
int main()
{
int t,m;cin>>t>>m;
while(t--)
{
int a,b,c,dt,sq1,sq2;cin>>a>>b>>c;
dt=b*b-4*a*c;
if(dt<0){printf("NO\n");continue;}
if(dt==0)
{
int u=-b,d=2*a;
u/=gcd(b,2*a),d/=gcd(b,2*a);
if(d==1) {printf("%d\n",u);continue;}
else if(d==-1){printf("%d\n",-u);continue;}
else if(d>1){printf("%d/%d\n",u,d);continue;}
else if(d<-1){printf("%d/%d\n",-u,-d);continue;}
}
for(int i=1;i*i<=dt;i++)
{
if(dt%(i*i)==0)
{sq1=i;sq2=dt/(i*i);}//sqrt(delta)=sq1*sqrt(sq2)
}
int lu=b,ld=2*a,ru=sq1,rd=2*a;
lu/=gcd(b,2*a),ld/=gcd(b,2*a),ru/=gcd(sq1,2*a),rd/=gcd(sq1,2*a);
lu*=-1;ru=abs(ru);rd=abs(rd);
if(lu<0&&ld<0) lu=-lu,ld=-ld;
//预处理
if(sq2==1)
{
if(a<0)
{
int up=b+sq1,dw=-2*a;
up/=gcd(b+sq1,-2*a);dw/=gcd(b+sq1,-2*a);
if(dw==1){printf("%d\n",up);continue;}
else if(dw==-1){printf("%d\n",-up);continue;}
else if(dw<-1){printf("%d/%d\n",-up,-dw);continue;}
else if(dw>1){printf("%d/%d\n",up,dw);continue;}
}
else
{
int up=sq1-b,dw=2*a;
up/=gcd(sq1-b,2*a),dw/=gcd(sq1-b,2*a);
if(dw==1){printf("%d\n",up);continue;}
else if(dw==-1){printf("%d\n",-up);continue;}
else if(dw<-1){printf("%d/%d\n",-up,-dw);continue;}
else if(dw>1){printf("%d/%d\n",up,dw);continue;}
}
}
if(lu==0)//如果只有根号一项
{
if(ru==1&&rd==1) {printf("sqrt(%d)\n",sq2);continue;}
if(ru!=1&&rd==1) {printf("%d*sqrt(%d)\n",ru,sq2);continue;}
if(ru==1&&rd!=1) {printf("sqrt(%d)/%d\n",sq2,rd);continue;}
if(ru!=1&&rd!=1) {printf("%d*sqrt(%d)/%d\n",ru,sq2,rd);continue;}
}
if(ld==1){printf("%d",lu);}
else if(lu<0&&ld<0){printf("%d/%d\n",-lu,-ld);}
else{printf("%d/%d",lu,ld);}
if(ru==1)
{
if(rd==1) printf("+sqrt(%d)\n",sq2);
else printf("+sqrt(%d)/%d\n",sq2,rd);
continue;
}
else if(ru>1)
{
if(rd==1) printf("+%d*sqrt(%d)\n",ru,sq2);
else printf("+%d*sqrt(%d)/%d\n",ru,sq2,rd);
continue;
}
cout<<endl;
}
}
这是唯一一道让我连着调了三天的黄题