J组T3求调
和正确代码对拍一样
#include<bits/stdc++.h>
#define ll long long
#define pp puts("A");
using namespace std;
ll T,M,a,b,c;
ll ck(ll r){
ll roww=0;
for(int i=2;i<=sqrt(r);i++){
if(r%i == 0){
ll tmp=r,cnt=0,ppp=1;
while(tmp%i == 0){
ppp*=i;
cnt++;
tmp/=i;
}
if(cnt>1){
if(cnt&1){
roww*=sqrt(ppp/i);
r/=ppp/i;
}else{
roww*=sqrt(ppp);
r/=ppp;
}
}
}
}
return r;
}
ll zdgys(ll x,ll y){
if(y == 0) return x;
return zdgys(y,x%y);
}
void rrout(ll x,ll y){
ll z=zdgys(x,y);
if(x*y<0) putchar('-');
x/=z,y/=z;
if(y!=1) printf("%lld/%lld",abs(x),abs(y));
else printf("%lld",abs(x));
}
void mmout(ll p,ll q,ll r){
ll roww=1;
if(p*q<0) putchar('-');
ll gr=ck(r);
p*=sqrt(r/gr);
r=gr;
ll z=zdgys(abs(p),abs(q));
p/=z,q/=z;
if(abs(q) == 1&&abs(p)!=1) printf("%lld*sqrt(%lld)",abs(p),r);
else if(abs(p) == 1&&abs(q)!=1) printf("sqrt(%lld)/%lld",r,abs(q));
else if(abs(p) == 1&&abs(q) == 1) printf("sqrt(%lld)",r);
else{
printf("%lld*sqrt(%lld)/%lld",abs(p),r,abs(q));
}
}
void ccout(ll x,ll y,ll p,ll q,ll r){
ll gr=ck(r);
if(gr == 1){
x=x*q+(p*sqrt(r))*y;
y*=q;
p=0;
q=0;
r=0;
}
if(x!=0){
rrout(x,y);
if(r!=0&&p!=0&&p*q>0){
putchar('+');
}
}
if(r!=0&&p!=0){
mmout(p,q,r);
}
puts("");
}
int main(){
// freopen("baoli.in","r",stdin);
// freopen("wode.out","w",stdout);
scanf("%lld%lld",&T,&M);
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
if(b == 0){
if(a*c>0) puts("NO");
else{
ccout(0,1,1,a,-a*c);
}
continue;
}
if(c == 0){
if(b >= 0) puts("0");
else ccout(-b,a,0,0,0);
continue;
}
ll d=b*b-4*a*c;
if(d<0){
puts("NO");
continue;
}
if(a > 0) ccout(-b,2*a,1,2*a,d);
if(a < 0) ccout(-b,2*a,-1,2*a,d);
}
return 0;
}