2023 CSP-J T3求调!!!
#include<bits/stdc++.h>
using namespace std;
int T,a,b,c,delta,m,bc,s;
bool nah;
void hj(int x,int y)
{
// cout<<"youlishu:";
int flag=0;
if(x<0)flag++;
if(y<0)flag++;
if(flag%2==1)
{
cout<<"-";
}
x=abs(x);
y=abs(y);
if(x==y)
{
cout<<1;
return ;
}
vector<int> ys;
int i=2;
for(;i*i<x;i++)
{
if(x%i==0)
{
ys.push_back(i);
ys.push_back(x/i);
}
}
if(x%(i*i)==0)
{
ys.push_back(i);
}
sort(ys.begin(),ys.end());
// for(i=0;i<ys.size();i++)
// {
// cout<<ys[i]<<" ";
// }
if(!ys.empty())
while(x>=ys.front()&&y>=ys.front()&&!ys.empty())
{
while(y%ys.front()==0&&x%ys.front()==0)
{
x=x/ys.front();
y=y/ys.front();
}
ys.erase(ys.begin());
}
if(x==0)cout<<0;
else if(y==1)cout<<x;
else cout<<x<<"/"<<y;
}
void hj2(int x,int y)
{
// cout<<"youlishu:";
int flag=0;
if(x<0)flag++;
if(y<0)flag++;
if(flag%2==1)
{
cout<<"-";
}
x=abs(x);
y=abs(y);
if(x==y)
{
cout<<1;
return ;
}
vector<int> ys;
int i=2;
for(;i*i<x;i++)
{
if(x%i==0)
{
ys.push_back(i);
ys.push_back(x/i);
}
}
if(x%(i*i)==0)
{
ys.push_back(i);
}
sort(ys.begin(),ys.end());
// for(i=0;i<ys.size();i++)
// {
// cout<<ys[i]<<" ";
// }
if(!ys.empty())
while(x>=ys.front()&&y>=ys.front()&&!ys.empty())
{
while(y%ys.front()==0&&x%ys.front()==0)
{
x=x/ys.front();
y=y/ys.front();
}
ys.erase(ys.begin());
}
if(x==0)
{
nah=1;
return ;
}
else if(y==1)cout<<x;
else cout<<x<<"/"<<y;
}
void hj3(int x,int del,int y)
{
// cout<<"youlishu:";
int flag=0;
if(x<0)flag++;
if(y<0)flag++;
if(flag%2==1)
{
cout<<"-";
}
x=abs(x);
y=abs(y);
if(x==y)
{
cout<<1;
return ;
}
vector<int> ys;
int i=2;
for(;i*i<x;i++)
{
if(x%i==0)
{
ys.push_back(i);
ys.push_back(x/i);
}
}
if(x%(i*i)==0)
{
ys.push_back(i);
}
sort(ys.begin(),ys.end());
// for(i=0;i<ys.size();i++)
// {
// cout<<ys[i]<<" ";
// }
if(!ys.empty())
while(x>=ys.front()&&y>=ys.front()&&!ys.empty())
{
while(y%ys.front()==0&&x%ys.front()==0)
{
x=x/ys.front();
y=y/ys.front();
}
ys.erase(ys.begin());
}
if(x==0)cout<<"\b";
else if(x==1)cout<<"sqrt("<<del<<")"<<"/"<<y;
else if(y==1)cout<<x<<"*sqrt("<<del<<")";
else cout<<x<<"*sqrt("<<del<<")/"<<y;
}
int main()
{
cin>>T>>m;
while(T--)
{
cin>>a>>b>>c;
delta=b*b-4*a*c;
if(delta<0)
{
cout<<"NO\n";
continue;
}
else
{
int dou=1,csq=2;
// cout<<"delta"<<":\n"<<delta<<"\n";
if(delta==0)
{
dou=-1;
}
else
{
while(csq*csq<=delta)
{
while(delta%(csq*csq)==0)
{
delta=delta/(csq*csq);
dou=dou*csq;
}
csq++;
}
}
if(delta==1||delta==0)
{
if(delta==0)
{
bc=-b;
}
else if(2*a<0)
{
bc=-b-dou;
}
else
{
bc=-b+dou;
}
hj(bc,2*a);
cout<<"\n";
}
else
{
bc=-b;
nah=0;
hj2(bc,2*a);
if(nah==0)cout<<"+";
hj3(bc,delta,2*a);
cout<<"\n";
}
}
}
return 0;
}