求助 急!!!
查看原帖
求助 急!!!
1099417
FYH666666楼主2024/9/28 21:13

超绝模拟

谢谢帮查

#include<bits/stdc++.h>
using namespace std;
int T,M;
int a,b,c,d;
int gcd(int m,int n){
	if(m%n==0) return n;
	return gcd(n,m%n);
}
bool isqrt(int a){
	for(int i=sqrt(a)+2;i>=sqrt(a)-2;i--){
		if(i*i==a) return 1;
	}
	return 0;
}
int xs(int a){
	int sum=1,e=a; 
	for(int i=a;i>=1&&e!=1;i--){
		if(isqrt(i)&&a%i==0){	
			sum*=sqrt(i);
			e/=i;
		}
	}
	return sum;
}
int bkfs(int a){
	int e=a; 
	for(int i=a;i>=1&&e!=1;i--) if(isqrt(i)&&a%i==0) e/=i;
	return e;
}
void step1(int a,int b,int c,int d){
	int sum=gcd(-b,2*a);
	int p=-b/sum,q=(2*a)/sum;
	if(q==1) printf("%d\n",p);
	else{
		if(q<0) printf("%d/%d\n",-p,-q);
		else printf("%d/%d\n",-p,-q);
	} 
}
void step2(int a,int b,int c,int d){
	if(isqrt(d)){
		d=sqrt(d);
		int p=-b+d,q=2*a;
		int sum=gcd(p,q);
		p/=sum;
		q/=sum;
		if(q==1) printf("%d\n",p);
		else{
			if(q<0) printf("%d/%d\n",-p,-q);
			else printf("%d/%d\n",-p,-q);
		} 
	}
	else{
		int q=2*a,p1=-b,p2=xs(d),p3=bkfs(d),qq=2*a;
		if(p1){
			int sum=gcd(q,p1),sumq=q;
			p1/=sum;
			sumq/=q;
			if(sumq==1) printf("%d+",p1);
			else{
				if(q<0) printf("%d/%d\n",-p1,-q);
				else printf("%d/%d\n",-p1,-q);
			} 
		}
		int sum=gcd(p2,qq);
		p2/=sum;
		qq/=sum;
		if(p2==qq&&qq==1) printf("sqrt(%d)\n",p3);
		else if(qq==1) printf("%d*sqrt(%d)\n",p2,p3);
		else if(p2==1) printf("sqrt(%d)/%d\n",p3,p2);
		else printf("%d*sqrt(%d)/%d\n",p2,p3,qq);
	}
}
int main(){
	scanf("%d%d",&T,&M);
	for(int i=1;i<=T;i++){
		scanf("%d%d%d",&a,&b,&c);
		d=b*b-4*a*c;
		if(d<0) printf("NO\n");
		else if(d==0) step1(a,b,c,d);
		else step2(a,b,c,d);
	}
	return 0;
} 
2024/9/28 21:13
加载中...