90分第4个点没过求助
查看原帖
90分第4个点没过求助
1263324
haozixuan1楼主2024/8/21 15:10

#include<bits/stdc++.h>

using namespace std;

long long gcd(long long a,long long b){ 

	long long r,bb=b,aa=a;
	while(aa%bb!=0){
		r=aa%bb;
		aa=bb;
		bb=r;
	}
	if(b/bb<0){
		bb*=-1;
	}
	return bb;
}

void print(long long p,long long q){

	long long g=gcd(p,q);
	if(g==q || g*-1==q){
		cout<<p/g;
	}else{
		cout<<p/g<<"/"<<q/g;
	}
}

int main(){

	int T,M;
	cin>>T>>M;
	for(int i=1;i<=T;i++){
		int a,b,c;
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO";
		}else{
			double sqrt_delta=sqrt(delta);
			if(int(sqrt_delta)==sqrt_delta){
				double x1=(-b+sqrt_delta)/(2.0*a);
				double x2=(-b-sqrt_delta)/(2.0*a);
				if(x1>x2){
					print(-b+sqrt_delta,2*a);
				}else{
					print(-b-sqrt_delta,2*a);
				}
			}else{
				double x1=(-b+sqrt_delta)/(2.0*a);
				double x2=(-b-sqrt_delta)/(2.0*a);
				double x,q2;
				int q2_a;
				if(x1>x2){
					x=x1;
					q2=1.0/(2*a);
					q2_a=1;
				}else{
					x=x2;
					q2=-1.0/(2*a);
					q2_a=-1;
				}
				double q1=(-b)/(2.0*a);
				if(q1!=0){
					print(-b,2*a);
					cout<<"+";
				}
				int r=delta;
				for(int i=floor(sqrt(r));i>=2;i--){
					if(r%(i*i)==0){
						r=r/(i*i);
						q2*=i;
						q2_a*=i;
					}
				}
				double q3=1.0/q2;
				if(q2==1){
					printf("sqrt(%d)",r);
				}else if(int(q2)==q2){
					printf("%d*sqrt(%d)",int(q2),r);
				}else if(int(q3)==q3){
					printf("sqrt(%d)/%d",r,int(q3));
				}else{
					int g=gcd(q2_a,2*a);
					if(q2_a/g==1){
						printf("sqrt(%d)/%d",r,2*a/g);
					}else{
						printf("%d*sqrt(%d)/%d",q2_a/g,r,2*a/g);
					}
				}
			}
		}
		printf("\n");
	}
	return 0;
}

2024/8/21 15:10
加载中...