10分代码求调
查看原帖
10分代码求调
1429512
Silent_Lamb楼主2024/10/23 23:05

蒟蒻写的不是很好看 见谅

#include <bits/stdc++.h>
using namespace std;
int t,m,a,b,c,d,f,num,j,r,p[]={0,2,3,5,7,11,13,17,0};
void init(int x,int y){
	f=1;
	if(x<0){f*=-1;x*=-1;}
	if(y<0){f*=-1;y*=-1;}
	num=__gcd(x,y);
	x/=num;y/=num;
	if(x==1)printf("%d",f*y);
	else printf("%d/%d",f*y,x);
}
void init_plus(int x,int y,int z){
	f=1;
	if(x<0){x*=-1;}
	if(y<0){y*=-1;}
	num=__gcd(x,y);
	x/=num;y/=num;
	
	if(f==1&&y==x)printf("sqrt(%d)",z);
	else if(x==1)printf("%d*sqrt(%d)",f*y,z);
	else if(y==1)printf("sqrt(%d)/%d",z,f*x);
	else printf("%d*sqrt(%d)/%d",f*y,z,x);
}
int main(){
	cin >> t >> m;
	for(int i=1;i<=t;i++){
		cin >> a >> b >> c;
		d=b*b-4*a*c;
		if(d<0){
			printf("NO\n");
			continue;
		}
		if((int)sqrt(d)*(int)sqrt(d)==d){
			init(2*a,sqrt(d)-b);
			printf("\n");
			continue;
		}
		if(b!=0){
			init((-2)*a,b);
			printf("+");
		}
		
		j=1;r=1;
		while(j<=7){
			if(d%(p[j]*p[j])==0){
				d/=(p[j]*p[j]);r*=p[j];
			}
			else j++;
		}
		init_plus(2*a,r,d);
		printf("\n");
	}
	return 0;
}
2024/10/23 23:05
加载中...