60 Pts 求调
查看原帖
60 Pts 求调
968688
TCY1234567楼主2024/4/2 21:03
#include <bits/stdc++.h>
using namespace std;
int ans1 = 1;
int t,m;
int sqrtt(int x)
{
	for(int i=2;i*i<=x;i++)
	{
		while(x%(i*i)==0)
		{
			ans1*=i;
			x/=(i*i);
		}
			
	}
	return x;
}
int main()
{
	scanf("%d%d",&t,&m);
	while(t--)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		if(a<0)
		{
			a=-a;b=-b;c=-c;
		}
		if(b*b-4*a*c>=0)
		{
			int delta = b*b-4*a*c;
			int dd = sqrt(delta);
			if(dd*dd==delta)
	        {
	            int x=-b+dd;
	            if(x%(2*a)==0)
	            	printf("%d\n",x/(2*a));
	            else
	            {
	            	int cc = __gcd(x,2*a);
	            	if(x/cc<0&&2*a/cc<0)
	            		printf("%d/%d\n",-x/cc,-2*a/cc);
	            	else if(2*a/cc<0)
	            		printf("-%d/%d\n",x/cc,-2*a/cc);
	            	else
	            		printf("%d/%d\n",x/cc,2*a/cc);
				}
	        }
	        else
	        {
	        	
           	    int x=-b;
           	    if(x!=0)
           	    {
           	    	if(x%(2*a)==0)
	            		printf("%d+",x/(2*a));
		            else
		            {
		            	int cc = __gcd(x,2*a);
		            	if(x/cc<0&&2*a/cc<0)
		            		printf("%d/%d+",-x/cc,-2*a/cc);
		            	else if(2*a/cc<0)
		            		printf("-%d/%d+",x/cc,-2*a/cc);
		            	else
		            		printf("%d/%d+",x/cc,2*a/cc);
					}
				}
	            ans1 = 1;
				int xx = sqrtt(delta);
				if(ans1/__gcd(ans1,2*a)==1)
					printf("sqrt(%d)\n",xx);
				else if(__gcd(ans1,2*a)==2*a)
					printf("%d*sqrt(%d)\n",ans1/__gcd(ans1,2*a),xx);
				else if(__gcd(ans1,2*a)==ans1)
					printf("sqrt(%d)/%d\n",xx,2*a/__gcd(ans1,2*a));
				else
					printf("%d*sqrt(%d)/%d\n",ans1/__gcd(ans1,2*a),xx,2*a/__gcd(ans1,2*a)); 
				}
		}
		else
		{
			puts("NO");
		}
	
	}
 } 

悬关qaq

2024/4/2 21:03
加载中...