30pts求调
查看原帖
30pts求调
1176773
cuiwl123楼主2024/7/23 15:39
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
	int m=max(a,b),n=min(a,b);
	int c=m%n;
	while(c)
		m=n,n=c,c=m%n;
	return n;
}
int main()
{
	//freopen("uqe2.in","r",stdin);
	//freopen("ans.txt","w",stdout);
	int t,m;
	bool ff=false;
	cin>>t>>m;
	while(t--)
	{
		int a,b,c,del;
		scanf("%d%d%d",&a,&b,&c);
		if(a<0)
			a=-a,b=-b,c=-c;
		del=b*b-4*a*c;
		if(del<0)
		{
			printf("NO\n");
			continue;
		}
		else if(del==0)
		{
			b=-b,a*=2;
			if(b==0)
				printf("0\n");
			else
			{
				int minl=gcd(abs(a),abs(b));
				b/=minl,a/=minl;
				if(a==1)
					printf("%d\n",b);
				else if(a==-1)
					printf("-%d\n",b);
				else
					printf("%d/%d\n",b,a);
			}
			continue;
		}
		else
		{
			int k=ceil(sqrt(del))+1,sum=1;
			while(k>1&&del>1)
			{
				while(del%(k*k)==0&&del/(k*k)>=1)
					sum*=k,del/=(k*k);
				k--;
			}
			if(del==1)
			{
				b=-b+sum,a=a*2;
				if(b)
				{
					int minl=gcd(abs(a),abs(b));
					b/=minl,a/=minl;
					if(a==1)
						printf("%d\n",b);
					else if(a==-1)
						printf("-%d\n",b);
					else
						printf("%d/%d\n",b,a);
					continue;
				}
			}
			else
			{
				b*=-1,a*=2;
				if(b)
				{
					int minl=gcd(abs(a),abs(b)),aa=a;
					b/=minl,aa/=minl;
					ff=true;
					if(aa==1)
						printf("%d",b);
					else if(aa==-1)
						printf("-%d",b);
					else
						printf("%d/%d",b,aa);
				}
				int minl1=gcd(abs(a),abs(sum)),aa1=a;
				sum/=minl1,aa1/=minl1;
				if(ff)
					printf("+");
				if(sum!=1)
					printf("%d*",sum);
				printf("sqrt(%d)",del);
				if(aa1!=1)
					printf("/%d\n",aa1);
				else
					printf("\n");
			}
		}
	}
	return 0;
}
2024/7/23 15:39
加载中...