不懂就问
  • 板块学术版
  • 楼主Leave_Childhood
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/8 12:12
  • 上次更新2024/9/8 15:58:23
查看原帖
不懂就问
1035525
Leave_Childhood楼主2024/9/8 12:12

re求解

一元二次方程

#include<bits/stdc++.h>
using namespace std;
int t,m;
int a,b,c;
bool check(int x)
{
	int a1=ceil(sqrt(x)),a2=sqrt(x);
	if(a1==a2)return true;
	return false;
}
bool check2(int x,int y)
{
	if(abs(x)<abs(y))return false;
	if(abs(x)%y==0)return true;
	return false;
}
int writex(int x,int y)
{
	a=x,b=y;
	x/=__gcd(a,b);
	y/=__gcd(a,b);
	if(y<0)x*=(-1),y*=(-1);
	return x;
}
int writey(int x,int y)
{
	a=x,b=y;
	x/=__gcd(a,b);
	y/=__gcd(a,b);
	if(y<0)x*=(-1),y*=(-1);
	return y;
}
void deal(int a,int b,int c,int td)
{
	int q2=1,r=td;
	for(int i=2;abs(i*i)<=abs(r);)
	{
		if(r%(i*i)==0)q2*=i,r/=(i*i);
		else i++;
	}
	if(double(q2)/(2*a)==1)cout<<"sqrt("<<r<<")"<<endl;
	else if(q2%(2*a)==0)cout<<q2/(a*2)<<"*sqrt("<<r<<")"<<endl;
	else if((2*a)%(q2)==0)cout<<"sqrt("<<r<<")/"<<2*a/q2<<endl;
	else cout<<writex(q2,2*a)<<"*sqrt("<<r<<")/"<<writey(q2,2*a)<<endl;
}
int jie(int a,int b,int dt)
{
	int a1=-b+sqrt(dt);
	int a2=-b-sqrt(dt);
	int a3=max(a1/(2*a),a2/(2*a));
	if(a1/(2*a)==a3)return a1;
	if(a2/(2*a)==a3)return a2;
}
int main()
{
	cin>>t>>m;
	for(int i=1;i<=t;i++)
	{
		cin>>a>>b>>c;
		int dt=b*b-4*a*c;
		int d=jie(a,b,dt);
		if(dt<0)
		{
		cout<<"NO"<<endl;
	    continue;
		}
		if(check(dt))
		{
			if(check2(d,2*a))cout<<d/(2*a)<<endl;
			else cout<<writex(d,2*a)<<"/"<<writey(d,2*a)<<endl;
			continue;
		}
		if((-b)/2!=0)
		{
			if(check2(-b,2*a))cout<<-b/(2*a)<<"+";
			else cout<<-b<<"/"<<2*a<<"+";
		}
		deal(a,b,c,dt);
	}
	return 0;
}// \Delta = b ^ 2 - 4acΔ=b^2 −4ac,x=q1+q2*srqt{r}
2024/9/8 12:12
加载中...