p9750玄2关求条
  • 板块灌水区
  • 楼主Lovelace_qwq
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/14 22:57
  • 上次更新2024/10/15 13:44:56
查看原帖
p9750玄2关求条
1223290
Lovelace_qwq楼主2024/10/14 22:57

link

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int T,m,a,b,c,delta; 
bool pdsqrt(int x){//判断是否为平方数 
	return sqrt(x)*sqrt(x)==x;
}
int gcd(int x,int y){//求最大公因数 
	if(x%y==0) return y;
	return gcd(y,x%y);
}
int fac(int x){//求最大质因子 
	for(int i=sqrt(x);i>=1;i--){
		if(x%(i*i)==0)return i;
	}
}
void op1(int x,int y){
	if(x%y==0){
		printf("%d",x/y);
		return;
	}
	else if(x*y<0){
		printf("-");
		x=abs(x),y=abs(y);
	}
	int t=gcd(x,y);
	printf("%d/%d",x/t,y/t);
}
void op2(int x,int y,string z){
	if(x%y==0){
		if(x/y!=1)printf("%d*",x/y); //系数为1时不输出系数 
		cout<<z;
	}else{
		int t=gcd(x,y);
		if(x/t!=1)printf("%d*",x/t);
		cout<<z;
		printf("/%d",y/t); 
	}
}
int main(){
	cin>>T>>m;
	while(T--){
		scanf("%d%d%d",&a,&b,&c);
		delta=b*b-4*a*c;
		if(delta<0){printf("No\n");continue;}//delta<0,此时无解。 
		if(pdsqrt(delta)){//delta为平方数 
			if(a<0)op1(-b-sqrt(delta),2*a); 
			else op1(-b+sqrt(delta),2*a); 
			printf("\n");
			continue;
		}
		if(b!=0){
			op1(-b,2*a);
			printf("+");
		}
		a=abs(a);
		int t=fac(a);
		string st="sqrt("+to_string(delta/(t*t))+")";
		op2(t,2*a,st);
	} 
	return 0;
}

2024/10/14 22:57
加载中...