20分求助!!!
查看原帖
20分求助!!!
1062722
xiao999yao楼主2024/7/24 14:14

代码:(C++)

#include<bits/stdc++.h>
#define int long long
using namespace std;
double t,m,a,b,c,v,x,q,p,g;
bool pingfang(double n) {
	if((int)sqrt(n)*(int)sqrt(n)==n) {
		return true;
	}
	return false;
}
void print(int a,int b) {
	if(a*b<0)cout<<"-";
	a=abs(a);
	b=abs(b);
	int g=__gcd(a,b);
	a/=g;
	b/=g;
	if(a==0)return;
	if(b==1)cout<<a;
	else cout<<a<<"/"<<b;
}
void printc(int a,int c,int b) {
	a=abs(a);
	b=abs(b);
	int g=__gcd(a,b);
	a/=g;
	b/=g;
	if(a!=1)cout<<a<<"*";
	cout<<"sqrt("<<c<<")";
	if(b!=1)cout<<"/"<<b;
//	if(a==1&&b==1)cout<<"sqrt("<<c<<")";
//	else if(b==1)cout<<a<<"*sqrt("<<c<<")";
//	else cout<<a<<"*sqrt("<<c<<")/"<<b;
}
int yinshu(int v) {
	for(int i=sqrt(v); i>=1; i++) {
		if(v%i==0)return i;
	}
}
signed main() {
//	freopen("3.in","r",stdin);
//	freopen("3.out","w",stdout);
	cin>>t>>m;
	for(x=1; x<=t; x++) {
		cin>>a>>b>>c;
		v=b*b-4*a*c;
		if(v<0) {
			cout<<"NO"<<endl;
			continue;
		}
		if(v==0&&b==0) {
			cout<<0<<endl;
			continue;
		}
		bool yyds=0;
		for(int i=v; i>=0; i--) {
			if(i!=0&&(int)v%(int)i!=0)continue;
			if(!pingfang(i))continue;
//			if(i==1){
//				cout<<"sqrt("<<v<<")";
//			}
			if(i!=v) {
				if(-b!=0) {
					print(-b,2*a);
					if(sqrt(i)!=0) {
						cout<<"+";
					}
				}
				if(sqrt(i)!=0)printc(sqrt(i),v/(i),2*a);
			}
			else if(a<0)print(-b-sqrt(i),2*a);
			else print(-b+sqrt(i),2*a);
			cout<<endl;
			yyds=1;
			break;
		}
		if(!yyds)cout<<0<<endl;
	}
	return 0;
}

20分求助!!!

2024/7/24 14:14
加载中...