rt,有注释,不知道大家看的看不懂
#include<bits/stdc++.h>
using namespace std;
int tot,p[1005],e[1005]={0};
void Init()//筛素数
{
e[1]=1;
for(int i=2;i<=1000;i++) if(!e[i])
for(int j=i+i;j<=1000;j+=i) e[j]=1;
for(int i=1;i<=1000;i++)
if(!e[i]) p[++tot]=i;
}
int fastpow(int a,int b)//快速幂
{
int ans=1,k=b;
while(k)
{
if(k&1) ans*=a;
a*=a;k>>=1;
}
return ans;
}
int f(int d)
{
int ans=1,k=d,cnt=0,cnt2=0;
int _[1005]={0},__[1005]={0};
while(k!=1)
{
cnt++;
while(k%p[cnt]==0) _[++cnt2]=p[cnt],k/=p[cnt],__[cnt]++;
}
for(int i=1;i<=cnt;i++)
if(__[i]/2>0) ans*=fastpow(p[i],__[i]/2);
return ans;
}//提取一个数中的平方数(需用到那些素数),如f(75)=5,因为75=3*5*5,所以提取平方结果为5
void Solve()
{
int a,b,c;cin>>a>>b>>c;
int d=b*b-4*a*c;//delta
if(d<0) cout<<"NO";
else if((-b*1.0+sqrt(d))/2.0/(a*1.0)>(-b*1.0-sqrt(d))/2.0/(a*1.0))//(-b+sqrt(delta))/2a为较大
{
if(sqrt(d)*sqrt(d)==d)
{
if((-b+(int)sqrt(d))%(2*a)!=0)
{
int g=__gcd(-b+(int)sqrt(d),2*a);
int x=(-b+(int)sqrt(d))/g,y=2*a/g;
if(y<0) cout<<-x<<"/"<<-y;
else cout<<x<<"/"<<y;
}
else
{
if(2*a>0)cout<<(-b+sqrt(d))/(2*a);
else cout<<(b-(int)sqrt(d))/(-2*a);
}
}
else
{
int q1=-b,q2=f(d),q3=d/f(d)/f(d),q4=2*a;
if(q1==0)
{
int g=__gcd(q2,q4),q22=q2/g,q44=q4/g;
if(q2==1) cout<<"sqrt(";
else cout<<q22<<"sqrt("<<endl;
cout<<q3<<")";
if(q44!=1) cout<<"/"<<q44;
}
else
{
int g=__gcd(__gcd(q1,q4),__gcd(q2,q4)),q22=q2/g,q44=q4/g,q11=q1/g;
cout<<q11<<"+";
if(q2==1) cout<<"sqrt(";
else cout<<q22<<"sqrt(";
cout<<q3<<")";
if(q44!=1) cout<<"/"<<q44;
}
}
}
else//(-b-sqrt(delta))/2a为较大
{
if(sqrt(d)*sqrt(d)==d)
{
if((-b+(int)sqrt(d))%(2*a)!=0)
{
int g=__gcd(-b-(int)sqrt(d),2*a);
int x=(-b-(int)sqrt(d))/g,y=2*a/g;
if(y<0) cout<<-x<<"/"<<-y;
else cout<<x<<"/"<<y;
}
else
{
if(2*a>0)cout<<(-b+sqrt(d))/(2*a);
else cout<<(b-(int)sqrt(d))/(-2*a);
}
}
else
{
int q1=-b,q2=f(d),q3=d/f(d)/f(d),q4=2*a;
if(q1==0)
{
int g=__gcd(q2,q4),q22=q2/g,q44=q4/g;
if(q2==1) cout<<"sqrt(";
else cout<<q22<<"sqrt(";
cout<<q3<<")";
if(q44!=1) cout<<"/"<<q44;
}
else
{
cout<<q1<<"-";
int g=__gcd(q2,q4),q22=q2/g,q44=q4/g;
if(q2==1) cout<<"sqrt(";
else cout<<q22<<"sqrt("<<endl;
cout<<q3<<")";
if(q44!=1) cout<<"/"<<q44;
}
}
}
cout<<'\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
Init();
int T,m;cin>>T>>m;
while(T--) Solve();
return 0;
}