T3

ax^2 + bx + c = 0 (令a > 0,若<0,同乘-1取反) Δ = b^2 - 4ac

较大的根 = (b+Δ)/2a(-b + \sqrt{Δ})/2a

分情况讨论:

  1. 无实根 Δ < 0,输出 NO

  2. 有实根 Δ ≥ 0

    (1) Δ = 0

    x = -b/2a,若-b | 2a,输出结果即可,若无法整除,约分后输出

    (2) Δ > 0

    x=(b+Δ)/2ax = (-b + \sqrt{Δ})/2a

    这里要讨论 b+Δ-b+ \sqrtΔ的情况:

    ① Δ 是完全平方数,开方后 -b 得到 t,判断 t | 2a,能整除直接输出,否则约分后输出

    ② Δ不是完全平方数,尝试化简 Δ为 krk \sqrt{r} 的形式,答案分为两部分:b/2a+kr/2a-b/2a + k * \sqrt{r} / 2a,注意约分,若b为0,不需要输出+号,否则是两部分相加

两个重点:

  1. 根据gcd(a,b)是否等于1来判断是否可以约分
  2. 对于Δ不是完全平方数的情况,如何提取k?数据范围很小,直接暴力找即可,代码如下:
// 32 = 16 * 2
int k, r;
for (int i = sqrt(delta); i >= 1; i--)
{
	if (delta % (i*i) == 0)
	{
		k = i;
		r = delta / (i*i);
		break;
	}
}

1 条评论

  • @ 2024-8-14 17:38:08

    in:

    10 20
    1 -19 5
    -2 12 15
    1 8 7
    1 8 -8
    -1 -11 0
    -1 -7 -7
    -2 -5 8
    2 -8 -13
    -1 -10 11
    -1 -15 0
    

    out:

    19/2+sqrt(341)/2
    3+sqrt(66)/2
    -1
    -4+2*sqrt(6)
    0
    -7/2+sqrt(21)/2
    -5/4+sqrt(89)/4
    2+sqrt(42)/2
    1
    0
    
    • 1