一元二次方程
#include<bits/stdc++.h>
using namespace std;
int t,m;
int a,b,c;
bool check(int x)
{
int a1=ceil(sqrt(x)),a2=sqrt(x);
if(a1==a2)return true;
return false;
}
bool check2(int x,int y)
{
if(x==0)return true;
if(abs(x)<abs(y))return false;
if(abs(x)%abs(y)==0)return true;
return false;
}
int writex(int x,int y)
{
int a3=x,b3=y,c3=abs(__gcd(a3,b3));
x/=c3;
y/=c3;
if(y<0)x*=(-1),y*=(-1);
return x;
}
int writey(int x,int y)
{
int a4=x,b4=y,c4=abs(__gcd(a4,b4));
x/=c4;
y/=c4;
if(y<0)x*=(-1),y*=(-1);
return y;
}
void deal(int a,int b,int c,int td)
{
int q2=1,r=td;
for(int i=2;abs(i*i)<=abs(r);)
{
if(r%(i*i)==0)q2*=i,r/=(i*i);
else i++;
}
if(double(q2)/(2*a)==1)cout<<"sqrt("<<r<<")"<<endl;
else if(q2%(2*a)==0)cout<<abs(q2/(a*2))<<"*sqrt("<<r<<")"<<endl;
else if((2*a)%(q2)==0)cout<<"sqrt("<<r<<")/"<<abs(2*a/q2)<<endl;
else cout<<abs(writex(q2,2*a))<<"*sqrt("<<r<<")/"<<abs(writey(q2,2*a))<<endl;
}
int jie(int a,int b,int dt)
{
int a1=-b+sqrt(dt);
int a2=-b-sqrt(dt);
int a3=max(a1/(2*a),a2/(2*a));
if(a1/(2*a)==a3)return a1;
if(a2/(2*a)==a3)return a2;
}
int main()
{
cin>>t>>m;
for(int i=1;i<=t;i++)
{
cin>>a>>b>>c;
int dt=b*b-4*a*c;
int d=jie(a,b,dt);
if(dt<0)
{
cout<<"NO\n";
continue;
}
if(check(dt))
{
if(check2(d,2*a))cout<<d/(2*a)<<endl;
else cout<<writex(d,2*a)<<"/"<<writey(d,2*a)<<endl;
continue;
}
if((-b)/2!=0)
{
if(check2(-b,2*a))cout<<-b/(2*a)<<"+";
else cout<<writex(-b,2*a)<<"/"<<writey(-b,2*a)<<"+";
}
deal(a,b,c,dt);
}
return 0;
}