60分,大佬求助
查看原帖
60分,大佬求助
772478
Wisdom_chicken_god楼主2023/11/21 20:08
#include<bits/stdc++.h>
using namespace std;
int t,m;
int b[100000];
int f(int x)
{
	int u=x;
	long long sum=1;
	memset(b,0,sizeof(b));
	for(int i=2;i<=sqrt(u);i++)
	{
		if(x%i==0)
		{
			x/=i;
			if(b[i]==1)
			{
				b[i]=0;
				sum*=i;	
			}
			else
			b[i]++;
			i--;
		}	
	}
	return sum;
}
int main()
{
	scanf("%d",&t);
	cin>>m;
	for(int i=1;i<=t;i++)
	{
		int a,b,c,der;
		scanf("%d%d%d",&a,&b,&c);
		der=b*b-4*a*c;
		if(der<0)
		{
			printf("NO\n");
			continue;
		}
		if(a<0)
		{a*=-1,b*=-1,c*=-1;}
		if(sqrt(der)*sqrt(der)==der)
		{
			int p1,p2,px,qx;
			qx=2*a;
			px=(-1)*b+sqrt(der);
			int gcd=abs(__gcd(px,qx));
			px/=gcd;
			qx/=gcd;
			if(px%qx==0)
			printf("%d\n",px/qx);
			else
			printf("%d/%d\n",px,qx);
		}
		else{
			if(b!=0)
			{
				int px,qx;
				px=-1*b;
				qx=2*a;
				int gcd=abs(__gcd(px,qx));
				if(px%qx==0)
				printf("%d+",px/qx);
				else
				printf("%d/%d+",px/gcd,qx/gcd);
			}
			int cnt1=f(der);
			int cnt2=der/(cnt1*cnt1);
			int cnt3=2*a;
			int gcd=abs(__gcd(cnt1,cnt3));
			cnt1/=gcd;
			cnt3/=gcd;
			if(cnt3!=1)
			{
				if(abs(cnt1)==1) 
					printf("sqrt(%d)/%d\n",cnt2,cnt3);
				if(abs(cnt1)!=1) 
					printf("%d*sqrt(%d)/%d\n",cnt1,cnt2,cnt3);
			}
			if(cnt3==1)
			{
				if(abs(cnt1)==1) 
					printf("sqrt(%d)\n",cnt2);
				if(abs(cnt1)!=1) 
					printf("%d*sqrt(%d)\n",cnt1,cnt2);
			}
		}
	}
	return 0;
}
2023/11/21 20:08
加载中...