求助
  • 板块灌水区
  • 楼主yzl0225
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/3 08:27
  • 上次更新2024/10/3 10:54:38
查看原帖
求助
1061745
yzl0225楼主2024/10/3 08:27

第一次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.
2024/10/3 08:27
加载中...