代码:(C++)
#include<bits/stdc++.h>
#define int long long
using namespace std;
double t,m,a,b,c,v,x,q,p,g;
bool pingfang(double n) {
if((int)sqrt(n)*(int)sqrt(n)==n) {
return true;
}
return false;
}
void print(int a,int b) {
if(a*b<0)cout<<"-";
a=abs(a);
b=abs(b);
int g=__gcd(a,b);
a/=g;
b/=g;
if(a==0)return;
if(b==1)cout<<a;
else cout<<a<<"/"<<b;
}
void printc(int a,int c,int b) {
a=abs(a);
b=abs(b);
int g=__gcd(a,b);
a/=g;
b/=g;
if(a!=1)cout<<a<<"*";
cout<<"sqrt("<<c<<")";
if(b!=1)cout<<"/"<<b;
// if(a==1&&b==1)cout<<"sqrt("<<c<<")";
// else if(b==1)cout<<a<<"*sqrt("<<c<<")";
// else cout<<a<<"*sqrt("<<c<<")/"<<b;
}
int yinshu(int v) {
for(int i=sqrt(v); i>=1; i++) {
if(v%i==0)return i;
}
}
signed main() {
// freopen("3.in","r",stdin);
// freopen("3.out","w",stdout);
cin>>t>>m;
for(x=1; x<=t; x++) {
cin>>a>>b>>c;
v=b*b-4*a*c;
if(v<0) {
cout<<"NO"<<endl;
continue;
}
if(v==0&&b==0) {
cout<<0<<endl;
continue;
}
bool yyds=0;
for(int i=v; i>=0; i--) {
if(i!=0&&(int)v%(int)i!=0)continue;
if(!pingfang(i))continue;
// if(i==1){
// cout<<"sqrt("<<v<<")";
// }
if(i!=v) {
if(-b!=0) {
print(-b,2*a);
if(sqrt(i)!=0) {
cout<<"+";
}
}
if(sqrt(i)!=0)printc(sqrt(i),v/(i),2*a);
}
else if(a<0)print(-b-sqrt(i),2*a);
else print(-b+sqrt(i),2*a);
cout<<endl;
yyds=1;
break;
}
if(!yyds)cout<<0<<endl;
}
return 0;
}
20分求助!!!