TLE求助
查看原帖
TLE求助
941801
louie2011楼主2024/8/4 13:07

记录

#include<bits/stdc++.h>
using namespace std;
int a,b,c,t,m;
int gcd(int a,int b)
{
	if(b==0)
	{
		return a;
	}
	if(a<b)
	{
		return gcd(a,b%a);
	}
	return gcd(b,a%b);
}
void out1(int p,int q)
{
	if(q<0)
	{
		q*=-1;
		p*=-1;
	}
	if(p==0)
	{
		cout<<0;
		return;
	}
	int tmp=gcd(abs(p),q);
	p/=tmp;
	q/=tmp;
	if(p%q==0)
	{
		cout<<p/q;
		return;
	}
	else
	{
		cout<<p<<"/"<<q;
		return;
	}
}
int main()
{
	cin>>t>>m;
	while(t--)
	{
		cin>>a>>b>>c;
		if(b*b-4*a*c<0)
    	{
	    	cout<<"NO"<<endl;
	    }
	    else if(b*b-4*a*c==0)
	    {
	    	out1(-b,2*a);
	    	cout<<endl;
		}
		else
		{
			int p1,q1,p2,q2,r;
			q1=q2=2*a;
			p1=-b;
			p2=1;
			r=b*b-4*a*c;
			int tmp=2;
			while(tmp*tmp<=r)
			{
				while(r%(tmp*tmp)==0)
				{
					r/=tmp*tmp;
					p2*=tmp;
				}
				tmp++;
			}
			if(q2<0)
			{
				q2*=-1;
				p2*=-1;
			}
			tmp=gcd(abs(p2),q2);
			p2/=tmp;
			q2/=tmp;
			if(r==1)
			{
				int tmp1=gcd(q1,q2)*q1*q2;
				int tmp2=p1*(tmp1/q1)+p2*(tmp1/q2);
				p1=tmp2;
				q1=tmp1;
				p2=0;
				q2=1;
				r=0;
//				cout<<"a"<<p1<<" "<<q1<<endl;;
				out1(p1,q1);
			}
			else
			{
				if(p1!=0)
				{
					if(q1<0)
					{
						q1*=-1;
						p1*=-1;
					}
					tmp=gcd(abs(p1),q1);
					p1/=tmp;
					q1/=tmp;
					out1(p1,q1);
					cout<<"+";
				}
				if(p2==1 && q2==1)
				{
					cout<<"sqrt("<<r<<")";
				}
				else if(q2==1 && p2!=0)
				{
					cout<<p2<<"*sqrt("<<r<<")";
				}
				else if(p2==1 && q2!=0)
				{
					cout<<"sqrt("<<r<<")/"<<q2;
				}
				else
				{
					cout<<p2<<"*sqrt("<<r<<")/"<<q2;
				}
			}
			
			cout<<endl;
		}
	}
	return 0;
}
2024/8/4 13:07
加载中...