WA60pts求助
查看原帖
WA60pts求助
732869
OrangePayne楼主2023/11/1 13:50

Rt 代码如下

#include<bits/stdc++.h>
using namespace std;
int f[1005];
int check(int n){
	for(int i=0;i*i<=n;i++){
		if(i*i==n)return i;
		else f[i]=i*i;
	}
	return -114;
}
int main(){
	//freopen("uqe.in","r",stdin);
//	freopen("uqe.out","w",stdout);
	int t,m,a,b,c,P5,FF16,zelda,stellaris;
	int x1,x2;
	int kfc,mdl;
	cin>>t>>m;
	while(t--){
		cin>>a>>b>>c;
		P5=b*b-4*a*c;
		if(P5<0){
			printf("NO\n");
			continue;
		}
		FF16=check(P5);
		if(FF16==-114){
			kfc=1;
			zelda=-b;
			if(b!=0){
				if(zelda%(a<<1)==0){
					//~ if(zelda/(a<<1)!=0)
					cout<<zelda/(a<<1)<<'+';
				}else{
					stellaris=__gcd(zelda,(a<<1));
					zelda/=stellaris;
					mdl=a;
					a<<=1;
					a/=stellaris;
					if(a<0){a=-a;zelda=-zelda;}
					cout<<zelda<<'/'<<a<<'+';
					a=mdl;
				}
			}
			for(int i=2;i*i<=P5;i++){
				while(P5%f[i]==0){
					kfc*=i;
					P5/=f[i];
					//~ cout<<P5;
				}
			}
			zelda=kfc;
			if(a<0)zelda=min(-P5,P5);
			else zelda=max(-P5,P5);
			//~ cout<<zelda<<' '<<a<<endl;
			if(zelda%(a<<1)==0){
				if(zelda/(a<<1)!=1)cout<<zelda/(a<<1)<<'*';
				cout<<"sqrt("<<P5<<")"<<endl;
			}else{
				stellaris=__gcd(zelda,(a<<1));
				zelda/=stellaris;
				a<<=1;
				a/=stellaris;
				if(a<0){a=-a;zelda=-zelda;}
				if(zelda!=1)cout<<zelda<<'*';
				cout<<"sqrt("<<P5<<")"<<"/"<<a<<endl;
			}
		}else{
			x1=-FF16-b;
			x2=FF16-b;
			if(a<0)zelda=min(x1,x2);
			else zelda=max(x1,x2);
			if(zelda%(a<<1)==0){
				cout<<zelda/(a<<1)<<endl;
			}else{
				stellaris=__gcd(zelda,(a<<1));
	//			cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
				zelda/=stellaris;
	//			cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
				a<<=1;
	//			cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
				a/=stellaris;
	//			cout<<zelda<<' '<<stellaris<<' '<<a<<endl;
				if(a<0){a=-a;zelda=-zelda;}
				cout<<zelda<<'/'<<a<<endl;
			}
		}
	}
	return 0;
}
2023/11/1 13:50
加载中...