社区讨论

#4 RE求调

P9750[CSP-J 2023] 一元二次方程参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lxj3qqyt
此快照首次捕获于
2024/06/17 23:00
2 年前
此快照最后确认于
2024/06/18 15:40
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int m,a,b,c;
signed main()
{
	int _;
	cin>>_>>m;
	while (_--)
	{
		cin>>a>>b>>c;
		int q=b*b-4*a*c;
		if (q<0)
		{
			cout<<"NO\n";
		}
		else
		{
			if (double(sqrt(double(q)))-int(sqrt(q))>pow(10,-6))
			{
				bool pan=0;
				int k=-b;
				int h=2*a;
				int gc=__gcd(k,h);
				k/=gc;
				h/=gc;
				if (h==1)
				{
					if (k)cout<<k;
					else pan=1;
				}
				else
				{
					if (h<0)
					{
						cout<<-k<<'/'<<-h;
					}
					else cout<<k<<'/'<<h;
				}
				int u=1;
				for (int i=2;i<=q-1;i++)
				{
					if (q%(i*i)==0)
					{
						while (q%(i*i)==0 && q>i*i)
						{
							q/=i*i;
							u*=i;
						}
					}
				}
				if (!pan)
				{
					cout<<'+';
				}
				h=2*a;
				gc=__gcd(u,h);
				u/=gc;
				h/=gc;
				u=abs(u);
				h=abs(h);
				if (h==1 && u!=1)
				{
					cout<<u<<'*'<<"sqrt("<<q<<')'<<'\n';
				}
				else if (h==1 && u==1)
				{
					cout<<"sqrt("<<q<<')'<<'\n';
				}
				else if (u==1)
				{
					cout<<"sqrt("<<q<<')'<<'/'<<h<<'\n';
				}
				else
				{
					cout<<u<<'*'<<"sqrt("<<q<<')'<<'/'<<h<<'\n';
				}
			}
			else
			{
				if (a>0)
				{
					int k=-b+sqrt(q);
					int h=2*a;
					int gc=__gcd(k,h);
					k/=gc;
					h/=gc;
					if (h==1)
					{
						cout<<k<<'\n';
					}
					else
					{
						if (h<0)
						{
							cout<<-k<<'/'<<-h<<'\n';
						}
						else cout<<k<<'/'<<h<<'\n';
					}
				}
				else
				{
					int k=-b-sqrt(q);
					int h=2*a;
					int gc=__gcd(k,h);
					k/=gc;
					h/=gc;
					if (h==1)
					{
						cout<<k<<'\n';
					}
					else
					{
						if (h<0)
						{
							cout<<-k<<'/'<<-h<<'\n';
						}
						else cout<<k<<'/'<<h<<'\n';
					}
				}
			}
		}
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...