t3 0pts
查看原帖
t3 0pts
533498
yyyzrc123楼主2023/10/31 16:55
#include<bits/stdc++.h>
using namespace std;
int a,b,c,t,m;
int gcd(int a,int b){
	if(a<b)swap(a,b);
	return b==0?a:gcd(b,a%b);
}
void printyouli(int q,int p){
	bool fuhao=0;
	if(q<0)fuhao=!fuhao,q=0-q;
	if(p<0)fuhao=!fuhao,p=0-p;
	if(fuhao)printf("-");
	int gcdd=gcd(q,p);
	q/=gcdd,p/=gcdd;
	if(p==1){
		printf("%d",q);
	}
	else printf("%d/%d",q,p);
}

int main(){
// 	freopen("uqe.in","r",stdin);
// 	freopen("uqe.out","w",stdout);
	cin>>t>>m;
	while(t--){
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0){printf("NO\n");continue;}//i
		if(delta==0){//youli
			printyouli(-b,2*a);
			printf("\n");
			continue;
		}
		if((int)sqrt(delta)*(int)sqrt(delta)==delta){//youli
			int x1= -b+(int)sqrt(delta)/(2*a);
			int x2= -b-(int)sqrt(delta)/(2*a);
			if(x1>x2){printyouli(-b+(int)sqrt(delta),2*a);}
			else{printyouli(-b-(int)sqrt(delta),2*a);}
			printf("\n");
			continue;
		}
		if(b!=0){
			printyouli(-b,2*a);
		}
		int r=delta,q1=1,q2=2*a;
		for(int i=sqrt(delta);i>1;i--){
			if(r%(i*i)==0){
				q1*=i;
				r/=i*i;	
			}
		}
		if(q1<0)q1=0-q1;
		if(q2<0)q2=0-q2;
		if(b!=0)cout<<'+';
		int gcdd=gcd(q1,q2);
		q1/=gcdd,q2/=gcdd;
		if(q1==1&&q2==1)printf("sqrt(%d)\n",r);
		else if(q1==1)printf("sqrt(%d)/%d\n",r,q2);
		else if(q2==1)printf("%d*sqrt(%d)\n",q1,r);
		else printf("%d*sqrt(%d)/%d\n",q1,r,q2);
	}
	return 0;
}
2023/10/31 16:55
加载中...