题目详情
返回题库题目描述
众所周知,对一元二次方程a*x^2+b*x+c=0,(a=0),可以用以下方式求实数解:
- 计算Δ=b^2−4ac,则:
- 若Δ<0,则该一元二次方程无实数解。
- 否则Δ≥0,此时该一元二次方程有两个实数解

例如:
- x^2+x+1=0无实数解,因为Δ=12−4×1×1=−3<0。
- x^2−2x+1=0有两相等实数解x1=x2=1。
- x^2−3x+2=0有两互异实数解x1=1,x2=2。
在题面描述中a和b的最大公因数使用gcd(a,b)表示。例如12和18的最大公因数是6,即gcd(12,18)=6。
现在给定一个一元二次方程的系数a,b,c,其中a,b,c均为整数且a!=0。你需要判断一元二次方程ax^2+bx+c=0是否有实数解,并按要求的格式输出。
在本题中输出有理数v时须遵循以下规则:
由有理数的定义,存在唯一的两个整数p和q,满足q>0,gcd(p,q)=1且v=q/p。
若q=1,则输出
{p},否则输出{p}/{q},其中{n}代表整数n的值;例如:
- 当v=−0.5时,p和q的值分别为−1和2,则应输出
-1/2; - 当v=0时,p和q的值分别为0和1,则应输出
0。
- 当v=−0.5时,p和q的值分别为−1和2,则应输出
对于方程的求解,分两种情况讨论:
若Δ=b2−4ac<0,则表明方程无实数解,此时你应当输出
NO;否则Δ≥0,此时方程有两解(可能相等),记其中较大者为x,则:
若x为有理数,则按有理数的格式输出x。
否则根据上文公式,x可以被唯一表示为x=q1+q2*sqrt(r)的形式,其中:
- q1,q2为有理数,且q2>0;
- r为正整数且r>1,且不存在正整数d>1使d^2∣r(即r不应是d^2的倍数);
此时:
- 若q1!=0,则按有理数的格式输出q1,并再输出一个加号
+; - 否则跳过这一步输出;
随后:
- 若q2=1,则输出
sqrt({r}); - 否则若q2为整数,则输出
{q2}*sqrt({r}); - 否则若q3=1/q2为整数,则输出
sqrt({r})/{q3}; - 否则可以证明存在唯一整数c,d满足d>1,gcd(c,d)=1且q2=c/d,此时输出
{c}*sqrt({r})/{d};
上述表示中{n}代表整数{n}的值,详见样例。
如果方程有实数解,则按要求的格式输出两个实数解中的较大者。否则若方程没有实数解,则输出NO。
输入描述
输入的第一行包含两个正整数T,M,分别表示方程数和系数的绝对值上限。
接下来T行,每行包含三个整数a,b,c。
输出描述
输出T行,每行包含一个字符串,表示对应询问的答案,格式如题面所述。
每行输出的字符串中间不应包含任何空格。