RE求助
查看原帖
RE求助
1012241
Dcchen楼主2024/8/5 20:49
#include<iostream>
#include<cmath>
using namespace std;
int T,M,a,b,c,x=1,y;
int work1(){
	return b*b-4*a*c;
}
int write(int p,int q){
	if(q<0){
		p=-p;
		q=-q;
	}
	int d=1;
	for(int i=2;i<=min(abs(p),q);i++){
		if(p%i==0&&q%i==0){
			d=i;
		}
	}
	p/=d;
	q/=d;
	if(q==1||p==0) cout<<p;
	else cout<<p<<'/'<<q;
}
int main(){
	//freopen("uqe.in","r",stdin);
	//freopen("uqe.out","w",stdout);
	cin>>T>>M;
	while(T--){
		cin>>a>>b>>c;
		if(a<0) a=-a,b=-b,c=-c;
		int delta=work1();
		if(delta<0) {
			cout<<"NO\n";
			continue;
		}
		else{
			int pos=sqrt(delta);
			if(pos*pos==delta){
				int p=-b+sqrt(delta);
				int q=2*a;
				write(p,q);
				cout<<'\n';
			}
			else{
				int x,y;
				for(int i=1;i*i<=delta;i++){
					if(delta%(i*i)==0) {
						x=i;
						y=delta/(i*i);
					}
				}
				int q1_p,q1_q,q2_q,q2_p;
				int r=y;
				r=y;
                q1_p=-b;
                q1_q=2*a;
                q2_p=x;
                q2_q=2*a;
                if(q1_p!=0){
                	write(q1_p,q1_q);
                	cout<<'+';
				}
				if(q2_p==q2_q){
					cout<<"sqrt("<<r<<")";
				}
				else if(q2_p%q2_q==0){
					cout<<q2_p/q2_q<<"*sqrt("<<r<<")";
				}
				else if(q2_q%q2_p==0){
					cout<<"sqrt("<<r<<")/"<<q2_q/q2_p;
				}
				else{
					int gcd=1;
					for(int i=2;i<=min(abs(q2_p),q2_q);i++){
						if(q2_p%i==0&&q2_q%i==0){
							gcd=i;
						}
					}
					q2_p/=gcd;
					q2_q/=gcd;
					cout<<q2_p<<"*sqrt("<<r<<")/"<<q2_q;
				}
				cout<<"\n";
			}
		}
	}
}
2024/8/5 20:49
加载中...