60分灵异事件
查看原帖
60分灵异事件
636409
Headofstate1945楼主2024/9/27 09:25
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,li;
void solve(){
	int a,b,c;
	cin>>a>>b>>c;
	if(a<0){
		b*=-1;
		c*=-1;
		a*=-1;
	}
	int dt=b*b-4*a*c;
	if(dt<0){
		puts("NO");
		return;
	}
	int dr=sqrt(dt);
	if(dr*dr==dt){
		int x;
		x=dr-b;
		a*=2;
		int gcd=__gcd(abs(x),abs(a));
		x/=gcd;
		a/=gcd;
		if(a==1)cout<<x<<endl;
		else cout<<x<<"/"<<a<<endl;
	}
	else{
		int q2=1,r;
		for(r=li*10;r>=1;r--){
			int w=r*r;
			if(dt%w==0){
				dt/=w;
				q2*=r;
			}
		}
		a*=2;
		b*=-1;
		int gcd=__gcd(q2,__gcd(abs(b),abs(a)));
		q2/=gcd;
		b/=gcd;
		a/=gcd;		
		if(a==1){
			if(b==0){
				printf("%lld*sqrt(%lld)",q2,dt);
			}
			else{
				printf("%lld+%lld*sqrt(%lld)",b,q2,dt);
			}
		}
		else{
			int a1=a,a2=a;
			int g1=__gcd(abs(a1),abs(b)),g2=__gcd(abs(a2),abs(q2));
			q2/=g2;
			a2/=g2;
			if(b==0){
				if(q2!=1){
					if(a2!=1)printf("%lld*sqrt(%lld)/%lld",q2,dt,a2);
					else printf("%lld*sqrt(%lld)",q2,dt);
				}
				else{
					if(a2!=1)printf("sqrt(%lld)/%lld",dt,a2);
					else printf("sqrt(%lld)",dt);
				}
			}
			else{
				a1/=g1;
				b/=g1;
				if(q2!=1){
					if(a1==1){
						if(a2==1)printf("%lld+%lld*sqrt(%lld)",b,q2,dt);
						else printf("%lld+%lld*sqrt(%lld)/%lld",b,q2,dt,a2);
					}
					else{
						if(a2==1)printf("%lld/%lld+%lld*sqrt(%lld)",b,a1,q2,dt);
						else printf("%lld/%lld+%lld*sqrt(%lld)/%lld",b,a1,q2,dt,a2);
					}	
				}
				else{
					if(a1==1){
						if(a2==1)printf("%lld+sqrt(%lld)",b,dt);
						else printf("%lld+sqrt(%lld)/%lld",b,dt,a2);
					}
					else{
						if(a2==1)printf("%lld/%lld+sqrt(%lld)",b,a1,dt);
						else printf("%lld/%lld+sqrt(%lld)/%lld",b,a1,dt,a2);
					}	
				}
			}
		}
		cout<<endl;
	}
}
signed main(){
	cin>>T>>li;
	while(T--)solve();
	return 0;
}
2024/9/27 09:25
加载中...