wa 60求助
#include<iostream>
#include<cstdio>
#include<string.h>
#include<cmath>
using namespace std;
long long Gcd(long long x,long long y){
if(x<y)swap(x,y);
if(x%y==0)return y;
return Gcd(y,x%y);
}
void S(long long b,long long a){
if(a*b==0){
cout<<0;
return;
}
if(abs(b)%abs(2*a)==0)cout<<b/2/a;
else{
if(b*a>0)cout<<abs(b/Gcd(abs(b),abs(a*2)))<<"/"<<abs(2*a/Gcd(abs(b),abs(2*a)));
else cout<<-abs(b/Gcd(abs(b),abs(a*2)))<<"/"<<abs(2*a/Gcd(abs(b),abs(2*a)));
}
}
long long fj(long long x){
long long ans=1;
for(long long i=2;i*i<=x;i++){
while(x%(i*i)==0){
ans*=i;
x/=i*i;
}
}
return ans;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
long long t,m;
cin>>t>>m;
while(t--){
long long a,b,c;
cin>>a>>b>>c;
long long k=b*b-4*a*c;
if(k<0){
cout<<"NO\n";
continue;
}
if(k==0){
S(-b,a);
cout<<"\n";
continue;
}
double x=sqrt(k);
if(x*x==k){
if((-b+x)*1.0/a*1.0>(-b-x)*1.0/a*1.0)S((-b+x),a);
else S((-b-x),a);
cout<<"\n";
continue;
}
if(b!=0){
S(-b,a);
cout<<"+";
}
long long w=fj(k);
if(w>1){
if(w%(2*a)==0){
if(w==2*a)cout<<"sqrt("<<k/w/w<<")\n";
else cout<<abs(w/2/a)<<"*sqrt("<<k/w/w<<")\n";
}
else cout<<abs(w/Gcd(w,abs(2*a)))<<"*sqrt("<<abs(k/w/w)<<")/"<<abs(abs(a*2)/Gcd(w,abs(a*2)))<<"\n";
}
else cout<<"sqrt("<<k<<")/"<<a*2;
}
return 0;
}
如果能造出错误数据也行