#include <bits/stdc++.h>
using namespace std;
bool is_sqrt(int x){
int p=sqrt(x);
if(x==p*p){
return true;
}
return false;
}
void f(int t,int a2){
if(t%a2==0){
cout<<t/a2;
}else{
int q;
q=t;
if(t<0){
t=-t;
}
//cout<<t<<" "<<a2;
int p=__gcd(t,a2);
t/=p;
a2/=p;
if(q<0){
cout<<"-"<<t<<"/"<<a2;
}else{
cout<<t<<"/"<<a2;
}
}
}
int check_sqrt(int x){
int sum=1;
int m=x;
for(int i=2;i<=sqrt(m);i++){
if(x%i==0){
int t=0;
while(x%i==0){
x/=i;
t++;
}
if(t>=2){
while(t>=2){
t-=2;
sum*=i;
}
}
}
}
return sum;
}
int main(){
int t,m;
cin>>t>>m;
while(t--){
int a,b,c;
cin>>a>>b>>c;
if(a<0) a=-a,b=-b,c=-c;
int delta=b*b-4*a*c;
if(delta<0){
cout<<"NO"<<endl;
continue;
}
if(is_sqrt(delta)==true){
int s=sqrt(delta);
int t=-b+s;
int a2=2*a;
f(t,a2);
cout<<endl;
}else{
int t=-b;
int a2=2*a;
if(t!=0&&a2!=0){
f(t,a2);
cout<<"+";
}
int l=check_sqrt(delta);
if(l!=1){
int z=l*l;
if(l%a2==0||a2%l==0){
int p=__gcd(l,a2);
l/=p;
a2/=p;
if(l!=0&&l!=1) cout<<l<<"*";
cout<<"sqrt("<<delta/z<<")";
if(a2!=1) cout<<"/"<<a2;
cout<<endl;
}else{
cout<<l<<"*sqrt("<<delta/z<<")";
cout<<"/"<<a2<<endl;
}
}else{
cout<<"sqrt("<<delta<<")";
cout<<"/"<<2*a<<endl;
}
}
}
return 0;
}
1 个赞
我打了3000B也是60(悲)
1 个赞
要考虑 a 是负数,我被这卡了好久
1 个赞
我考虑了呀,if(a<0) a=-a,b=-b,c=-c
1 个赞
我没表示清楚:我的意思是 a 如果是负数可能就会被卡掉
对,所以应该咋改,我这个?