#include<bits/stdc++.h>
using namespace std;
int T,M,p;
int a,b,c;
int dirta,dir_;
bool f1=0;
int gcd(int x,int y)
{
x=abs(x),y=abs(y);
if(y==0)return x;
return gcd(y,x%y);
}
void work3(int x)//分解质因数
{
p=1;
int o=0;
for(int i=2;i<=x;i++)
{
while(x%(i*i)==0)
{
o++;
x/=(i*i);
}
p*=pow(i,o);
o=0;
}
dir_=x;
if(x==1)f1=1;
return;
}
void work2(int x)
{
if(dirta==0)return;
int u=gcd(x,p);
x/=u,p/=u;
if(p!=1)
{
cout<<p<<"*";
}
cout<<"sqrt("<<dir_<<")";
if(x!=1)
{
cout<<"/"<<x;
}
return;
}
void work1(int x,int y)//输出分数
{
if(x==0 && !f1)return;
int u=gcd(abs(x),abs(y));
x/=u,y/=u;
if(y<0)x*=-1,y*=-1;
if(y==1)
{
cout<<x;
}
else
{
cout<<x<<"/"<<y;
}
if(dirta!=0 && !f1)cout<<"+";
return;
}
int main()//t3
{
cin>>T>>M;
while(T--)
{
cin>>a>>b>>c;
dirta=b*b-4*a*c;
p=0,dir_=0,f1=0;
if(a<0)a*=-1,b*=-1,c*=-1;
if(dirta<0 || a==0)cout<<"NO";
else
{
work3(dirta);
if(!f1)
{
work1(-b,2*a);
work2(2*a);
if(b==0 && dirta==0)cout<<0;
}
else work1(-b+p,2*a);
}
cout<<endl;
}
return 0;
}
我试过在主函数的最开始加了一个cout<<"a";然后还是RE。