社区讨论
@ronan2
P9750[CSP-J 2023] 一元二次方程参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mm7mk707
- 此快照首次捕获于
- 2026/03/01 18:46 上周
- 此快照最后确认于
- 2026/03/01 18:59 上周
CPP
#include <bits/stdc++.h>
using namespace std;
int T, M, gt;
int gcd(int a, int b) {
if (b == 0) return a;
else return gcd(b, a % b);
}
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;
int d = b * b - 4 * a * c;
if (d < 0) {
printf("NO\n");
continue;
}
int f = 1, i = 2;
while (i * i <= d) {
while (d % (i * i) == 0) {
f *= i, d /= (i * i);
}
i++;
}
if (d == 0 || d == 1) {
gt = abs(gcd(-b + f * d, 2 * a));
printf("%d", (-b + f * d) / gt);
if (2 * a / gt != 1)
printf("/%d", 2 * a / gt);
printf("\n");
}
else {
gt = abs(gcd(-b, 2 * a));
if (-b / gt != 0)
printf("%d", -b / gt);
if (2 * a / gt != 1)
printf("/%d", 2 * a / gt);
if (-b / gt != 0)
printf("+");
gt = abs(gcd(f, 2 * a));
if (f / gt != 1) printf("%d*", f / gt);
printf("sqrt(%d)", d);
if (2 * a / gt != 1) printf("/%d", 2 * a / gt);
printf("\n");
}
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...