注:该代码已删除freopen().
#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c,tong[100001],f1,q1=1,delta1;
int pd(int d){
if(d<2) return 0;
if(d==2) return 1;
for(int i=2;i<=sqrt(d);i++){
if(d%i==0) return 0;
}
return 1;
}
void huajian(){
if(f1==1) return ;
if(delta1==1){
f1=1;
return ;
}
if(pd(delta1)==1){
if(tong[delta1]==1) q1=q1*delta1;
f1=1;
return ;
}
for(int i=2;i<=sqrt(delta1);i++){
if(delta1%i==0&&pd(i)==1){
tong[i]++;
delta1=delta1/i;
if(tong[i]==2){
q1=q1*i;
tong[i]=0;
}
huajian();
}
}
return ;
}
void cout1(int flag,int zi,int mu){
if(flag==1) cout<<"-";
cout<<zi;
if(mu!=1) cout<<"/"<<mu;
}
void cout2(int zi,int mu,int delta){
cout<<zi<<"*sqrt("<<delta<<")/"<<mu<<endl;
}
void fenshu(int zi,int mu,int cyh,int delta){
int flag;
if(zi<0&&mu>0){
flag=1;
zi=-zi;
}
if(zi>0&&mu<0){
flag=1;
mu=-mu;
}
if(zi<0&&mu<0){
zi=-zi;
mu=-mu;
}
int f[100001],tmp=1;
for(int i=2;i<=zi;i++){
if(zi%i==0&&pd(i)==1){
f[tmp]=i;
tmp++;
}
}
if(zi==2){
f[tmp]=2;
tmp++;
}
for(int i=1;i<tmp;i++){
if(mu%f[i]==0&&zi%f[i]==0){
mu=mu/f[i];
zi=zi/f[i];
i--;
continue;
}
}
if(cyh==0) cout1(flag,zi,mu);
else cout2(zi,mu,delta);
}
int main(){
cin>>t>>m;
while(t--){
memset(tong,0,sizeof(tong));
q1=1;
f1=0;
cin>>a>>b>>c;
int delta=b*b-4*a*c;
if(delta<0){
cout<<"NO"<<endl;
continue;
}
int t=sqrt(delta);
if(t*t==delta){
if(a>0){
fenshu(-b+t,2*a,0,0);
cout<<endl;
}
else{
fenshu(-b-t,2*a,0,0);
cout<<endl;
}
}
else{
if(b!=0){
fenshu(-b,2*a,0,0);
cout<<"+";
}
delta1=delta;
huajian();
delta=(delta/q1)/q1;
if(q1==abs(2*a)) cout<<"sqrt("<<delta<<")"<<endl;
else if(q1%abs(2*a)==0) cout<<q1/abs(2*a)<<"*"<<"sqrt("<<delta<<")"<<endl;
else if(abs(2*a)%q1==0) cout<<"sqrt("<<delta<<")/"<<abs(2*a)/q1<<endl;
else fenshu(q1,abs(2*a),1,delta);
}
}
return 0;
}
样例能过(没去行末空格),为啥爆0?