第一次https://www.luogu.com.cn/discuss/945426 修改后:
#include<bits/stdc++.h>
#define T true
#define F false
using namespace std;
int a,b,c,d;
int ans_b1=1,ans_b2=1,ans_b3=1;
bool iss;
int GCD(int a,int b){
int temp;
if(a==0||b==0) return 1;
a=abs(a),b=abs(b);
while(b)
{
temp = b;
b = a % b;
a = temp;
}
return a;
}
int main(){
int t,m;
cin>>t>>m;
// for(int i=2;i<=m+3;i++){
// if(h[i]!=1) p[++l]=i;
// for(int j=2;j<=l;j++){
// if(i*p[j]>m+1) break;
// h[i*p[j]]=1;
// if(i%p[j]==0) break;
// }
// }
while(t--){
cin>>a>>b>>c;
d=b*b-4*a*c;
if(d<0){
cout<<"NO\n";
continue;
}
else{
bool isZheng=T;
b=-b;
a=2*a;
if(a<0&&b<0) b=-b,a=-a;
if(a<0||b<0) isZheng=F,b=abs(b),a=abs(a);
if(d!=0){
int d_out=1,d_in=d;
for(int i=2;i<=d;i++){
while(d_in%(i*i)==0){
d_out*=i;
d_in/=(i*i);
if(d_in==1) break;
}
if(d_in==1) break;
}
int do_aGcd=GCD(d_out,a);
ans_b1=d_out/do_aGcd,ans_b2=d_in,ans_b3=a/do_aGcd;
}
if(a!=0&&b!=0){
int a_bGcd=GCD(a,b);
a/=a_bGcd;
b/=a_bGcd;
}
if(ans_b2==1&&d!=0){
if(b==0){
cout<<ans_b1;
if(ans_b3!=1)cout<<'/'<<ans_b3;
}
else{
if(isZheng){
int t=ans_b3*a/GCD(ans_b3,a);
ans_b1*=(t/ans_b3);
b*=(t/a);
int gcd=GCD(ans_b1+b,t);
cout<<(ans_b1+b)/gcd;
if(t/gcd!=1)cout<<'/'<<t/gcd;
}
else{
int t=ans_b3*a/GCD(ans_b3,a);
ans_b1*=(t/ans_b3);
b*=(t/a);
if(b>ans_b1){
cout<<'-';
swap(b,ans_b1);
}
if(ans_b1-b==0) cout<<0;
else{
int gcd=GCD(ans_b1-b,t);
cout<<(ans_b1-b)/gcd;
if(t/gcd!=1)cout<<'/'<<t/gcd;
}
}
}
}
else if(b!=0){
if(!isZheng){
cout<<'-';
}
cout<<b;
if(a!=1&&b!=0) cout<<'/'<<a;
}
if(d>1&&ans_b2>1){
if(b!=0) cout<<'+';
if(ans_b1!=1) cout<<ans_b1<<'*';
printf("sqrt(%d)",ans_b2);
if(ans_b3!=1) cout<<'/'<<ans_b3;
}
if(d==0&&b==0) cout<<0;
cout<<endl;
}
}
return 0;
}
结果还是#4 #9 #10 RE:
Runtime Error.
Received signal 8: Floating-point exception.