求调,样例WA
查看原帖
求调,样例WA
466596
MorningStarCzy楼主2024/10/3 23:01

rt,有注释,不知道大家看的看不懂

#include<bits/stdc++.h>
using namespace std;
int tot,p[1005],e[1005]={0};
void Init()//筛素数
{
	e[1]=1;
	for(int i=2;i<=1000;i++) if(!e[i])
		for(int j=i+i;j<=1000;j+=i) e[j]=1;
	for(int i=1;i<=1000;i++)
		if(!e[i]) p[++tot]=i;
}
int fastpow(int a,int b)//快速幂
{
	int ans=1,k=b;
	while(k)
	{
		if(k&1) ans*=a;
		a*=a;k>>=1;
	}
	return ans;
}
int f(int d)
{
	int ans=1,k=d,cnt=0,cnt2=0;
	int _[1005]={0},__[1005]={0};
	while(k!=1)
	{
		cnt++;
		while(k%p[cnt]==0) _[++cnt2]=p[cnt],k/=p[cnt],__[cnt]++;
	}
	for(int i=1;i<=cnt;i++)
		if(__[i]/2>0) ans*=fastpow(p[i],__[i]/2);
	return ans;
}//提取一个数中的平方数(需用到那些素数),如f(75)=5,因为75=3*5*5,所以提取平方结果为5
void Solve()
{
	int a,b,c;cin>>a>>b>>c;
	int d=b*b-4*a*c;//delta
	if(d<0) cout<<"NO";
	else if((-b*1.0+sqrt(d))/2.0/(a*1.0)>(-b*1.0-sqrt(d))/2.0/(a*1.0))//(-b+sqrt(delta))/2a为较大 
	{
		if(sqrt(d)*sqrt(d)==d)
		{
			if((-b+(int)sqrt(d))%(2*a)!=0)
			{
				int g=__gcd(-b+(int)sqrt(d),2*a);
				int x=(-b+(int)sqrt(d))/g,y=2*a/g;
				if(y<0) cout<<-x<<"/"<<-y;
				else cout<<x<<"/"<<y;
			}
			else
			{
				if(2*a>0)cout<<(-b+sqrt(d))/(2*a);
				else cout<<(b-(int)sqrt(d))/(-2*a);
			}
		}
		else
		{
			int q1=-b,q2=f(d),q3=d/f(d)/f(d),q4=2*a;
			if(q1==0)
			{
				int g=__gcd(q2,q4),q22=q2/g,q44=q4/g;
				if(q2==1) cout<<"sqrt(";
				else cout<<q22<<"sqrt("<<endl;
				cout<<q3<<")";
				if(q44!=1) cout<<"/"<<q44;
			}
			else
			{
				int g=__gcd(__gcd(q1,q4),__gcd(q2,q4)),q22=q2/g,q44=q4/g,q11=q1/g;
				cout<<q11<<"+";
				if(q2==1) cout<<"sqrt(";
				else cout<<q22<<"sqrt(";
				cout<<q3<<")";
				if(q44!=1) cout<<"/"<<q44;
			}
		}
	}
	else//(-b-sqrt(delta))/2a为较大 
	{
		if(sqrt(d)*sqrt(d)==d)
		{
			if((-b+(int)sqrt(d))%(2*a)!=0)
			{
				int g=__gcd(-b-(int)sqrt(d),2*a);
				int x=(-b-(int)sqrt(d))/g,y=2*a/g;
				if(y<0) cout<<-x<<"/"<<-y;
				else cout<<x<<"/"<<y;
			}
			else
			{
				if(2*a>0)cout<<(-b+sqrt(d))/(2*a);
				else cout<<(b-(int)sqrt(d))/(-2*a);
			}
		}
		else
		{
			int q1=-b,q2=f(d),q3=d/f(d)/f(d),q4=2*a;
			if(q1==0)
			{
				int g=__gcd(q2,q4),q22=q2/g,q44=q4/g;
				if(q2==1) cout<<"sqrt(";
				else cout<<q22<<"sqrt(";
				cout<<q3<<")";
				if(q44!=1) cout<<"/"<<q44;
			}
			else
			{
				cout<<q1<<"-";
				int g=__gcd(q2,q4),q22=q2/g,q44=q4/g;
				if(q2==1) cout<<"sqrt(";
				else cout<<q22<<"sqrt("<<endl;
				cout<<q3<<")";
				if(q44!=1) cout<<"/"<<q44;
			}
		}
	}
	cout<<'\n';
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	Init();
	int T,m;cin>>T>>m;
	while(T--) Solve();
	return 0;
}
2024/10/3 23:01
加载中...