Rt 代码如下
#include<bits/stdc++.h>
using namespace std;
int f[1005];
int check(int n){
for(int i=0;i*i<=n;i++){
if(i*i==n)return i;
else f[i]=i*i;
}
return -114;
}
int main(){
//freopen("uqe.in","r",stdin);
// freopen("uqe.out","w",stdout);
int t,m,a,b,c,P5,FF16,zelda,stellaris;
int x1,x2;
int kfc,mdl;
cin>>t>>m;
while(t--){
cin>>a>>b>>c;
P5=b*b-4*a*c;
if(P5<0){
printf("NO\n");
continue;
}
FF16=check(P5);
if(FF16==-114){
kfc=1;
zelda=-b;
if(b!=0){
if(zelda%(a<<1)==0){
//~ if(zelda/(a<<1)!=0)
cout<<zelda/(a<<1)<<'+';
}else{
stellaris=__gcd(zelda,(a<<1));
zelda/=stellaris;
mdl=a;
a<<=1;
a/=stellaris;
if(a<0){a=-a;zelda=-zelda;}
cout<<zelda<<'/'<<a<<'+';
a=mdl;
}
}
for(int i=2;i*i<=P5;i++){
while(P5%f[i]==0){
kfc*=i;
P5/=f[i];
//~ cout<<P5;
}
}
zelda=kfc;
if(a<0)zelda=min(-P5,P5);
else zelda=max(-P5,P5);
//~ cout<<zelda<<' '<<a<<endl;
if(zelda%(a<<1)==0){
if(zelda/(a<<1)!=1)cout<<zelda/(a<<1)<<'*';
cout<<"sqrt("<<P5<<")"<<endl;
}else{
stellaris=__gcd(zelda,(a<<1));
zelda/=stellaris;
a<<=1;
a/=stellaris;
if(a<0){a=-a;zelda=-zelda;}
if(zelda!=1)cout<<zelda<<'*';
cout<<"sqrt("<<P5<<")"<<"/"<<a<<endl;
}
}else{
x1=-FF16-b;
x2=FF16-b;
if(a<0)zelda=min(x1,x2);
else zelda=max(x1,x2);
if(zelda%(a<<1)==0){
cout<<zelda/(a<<1)<<endl;
}else{
stellaris=__gcd(zelda,(a<<1));
// cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
zelda/=stellaris;
// cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
a<<=1;
// cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
a/=stellaris;
// cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
if(a<0){a=-a;zelda=-zelda;}
cout<<zelda<<'/'<<a<<endl;
}
}
}
return 0;
}