求助,必关注(在线等)
查看原帖
求助,必关注(在线等)
990027
Rain2012楼主2024/8/12 11:08
#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c;
int det()
{
	return b*b - 4*a*c;
}
int gcd(int a,int b)
{
	a = abs(a);
	b = abs(b);
	return b > 0 ? gcd(b,a%b):a;
}
void yls_cout(int zi,int mu)
{
	int y = gcd(zi,mu);
    zi /= y;mu /= y;
    if(mu == 1 || zi == 0)
	{
		cout<<zi;
	}
	else cout<<zi<<"/"<<mu;
}
void wls_cout(int d)
{
	int k = 1;
	for(int i=2;i*i<=d;i++)
	{
		while(d%(i*i)==0)
		{
			k*=i,d/=(i*i);
		}
	}
	if(-b)
	{
		yls_cout(-b,2*a);
		cout<<"+";
	}
	if(2*a == 1)
	{
		cout<<"sqrt("<<d<<")"<<endl;
	}
	int t = abs(gcd(k,2*a));
	
	if(k/t!=1)
	{
		cout<<k/t<<'*';
	}
	cout<<"sqrt("<<d<<")";
	if(2*a/t!=1)
	{
		cout<<'/'<<2*a/t;
	}
	cout<<endl;
}
int main()
{
    cin>>t>>m;
    while(t--)
    {
        cin>>a>>b>>c;
        int d = det();
		if(d < 0) cout<<"NO"<<endl;
        else
        {
            if((int)sqrt(d) == sqrt(d))
            {
            	yls_cout(max(sqrt(d)-b,-(sqrt(d)+b)),2*a);
            	cout<<endl;
            }
            else
            {
                wls_cout(d);
            }
        }
    }
}
2024/8/12 11:08
加载中...