调了好久呜呜。
#include<bits/stdc++.h>
using namespace std;
int n,k,a,b,c,i,hj1,hj2;
void hj(int a){//比如根号8,这里把他化简成2倍根号2
int i;
for(i=4;i<=a;i++){
if(i%5!=0&&i%5!=1&&i%5!=4)continue;
else if(a%i==0&&sqrt(i)*sqrt(i)==i){
hj1=sqrt(i);
hj2=a/i;
}
}
return;
}
int main(){
cin>>n>>k;
for(i=1;i<=n;i++){
hj1=0;hj2=0;
cin>>a>>b>>c;
if(b==0){
int d=-(c/a);
if(d<0)cout<<"NO"<<endl;
hj(d);
if(hj1==0&&hj2==0)cout<<"sqrt("<<d<<")"<<endl;
else cout<<hj1<<"*sqrt("<<hj2<<")"<<endl;
hj1=0;hj2=0;
continue;
}
int k=b*b-4*a*c;
if(k<0)cout<<"NO"<<endl;
else if(k==0){
int u=(-b)/(__gcd(-b,2*a)),v=(2*a)/(__gcd(-b,2*a));
if(u<0&&v<0){//这其实是防止输出向-3/-2这样子的
u=-u;v=-v;
}
if(u%v==0)cout<<u/v<<endl;
else{//其实就是把所有的负号都转移到最前面,防止3/-2,需要弄成-3/2
if(u<0&&v>=0)cout<<-u<<"/"<<v<<endl;//其实这里就是在化简成最简分数,比如8/6,搞成4/3
else if(u>=0&&v<0)cout<<-u<<"/"<<-v<<endl;
else cout<<u<<"/"<<v<<endl;
}
}else if(k>0){
if(sqrt(k)*sqrt(k)==k){
int d=-b+sqrt(k);
int u=d/(__gcd(d,2*a)),v=(2*a)/(__gcd(d,2*a));
if(u<0&&v<0){
u=-u;v=-v;
}
if(u%v==0)cout<<u/v<<endl;
else{
if(u<0&&v>=0)cout<<-u<<"/"<<v<<endl;
else if(u>=0&&v<0)cout<<-u<<"/"<<-v<<endl;
else cout<<u<<"/"<<v<<endl;
}
}else{
hj(k);
if(hj1==0&&hj2==0){
int u=(-b)/(__gcd(-b,2*a)),v=(2*a)/(__gcd(-b,2*a));
if(u<0&&v<0){
u=-u;v=-v;
}
if(u%v==0)cout<<u/v;
else{
if(u<0&&v>=0)cout<<-u<<"/"<<v;
else if(u>=0&&v<0)cout<<-u<<"/"<<-v;
else cout<<u<<"/"<<v;
}
cout<<"+sqrt("<<k<<")/"<<2*a<<endl;
}else{
int u=(-b)/(__gcd(-b,2*a)),v=(2*a)/(__gcd(-b,2*a));
if(u<0&&v<0){
u=-u;v=-v;
}
if(u%v==0)cout<<u/v;
else{
if(u<0&&v>=0)cout<<-u<<"/"<<v;
else if(u>=0&&v<0)cout<<-u<<"/"<<-v;
else cout<<u<<"/"<<v;
}
int u2=hj1/(__gcd(hj1,2*a)),v2=(2*a)/(__gcd(hj1,2*a));
if(u2<0&&v2<0){
u2=-u2;v2=-v2;
}
if(u2%v2==0)cout<<"+"<<u2/v2<<"*sqrt("<<hj2<<")"<<endl;
else{
if(u2<0&&v2>=0){
if(u2!=1)cout<<-u2<<"*sqrt("<<hj2<<")"<<"/"<<v2<<endl;
else cout<<"sqrt("<<hj2<<")"<<"/"<<v2<<endl;
}
else if(u2>=0&&v2<0){
if(u2!=1)cout<<-u2<<"*sqrt("<<hj2<<")"<<"/"<<-v2<<endl;
else cout<<"sqrt("<<hj2<<")"<<"/"<<-v2<<endl;
}
else{
if(u2!=1)cout<<"+"<<u2<<"*sqrt("<<hj2<<")"<<"/"<<v2<<endl;
else cout<<"+sqrt("<<hj2<<")"<<"/"<<v2<<endl;
}
}
}
}
}
}
return 0;
}