1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } bool pd(int x, int &r) { for (int i = 0; i * i <= x; i++) if (x == i * i) { r = i; return 1; } return 0; } int main() { int T, M; scanf("%d%d", &T, &M); while (T--) { int a, b, c, r; scanf("%d%d%d", &a, &b, &c); if (a < 0) a = -a, b = -b, c = -c; int delta = b * b - 4 * a * c; if (delta < 0) { printf("NO\n"); continue; } if (pd(delta, r)) { int p = -b + r, q = 2 * a; if (p * q == 0) printf("0\n"); else { if (p * q < 0) { printf("-"); p = abs(p); q = abs(q); } int d = gcd(p, q); p /= d; q /= d; if (q == 1) printf("%d\n", p); else printf("%d/%d\n", p, q); } } else { int p = -b, q = 2 * a; if (p * q != 0) { if (p * q < 0) { printf("-"); p = abs(p); q = abs(q); } int d = gcd(p, q); p /= d; q /= d; if (q == 1) printf("%d+", p); else printf("%d/%d+", p, q); } p = 1, q = 2 * a; for (int i = 2; i * i <= delta; i++) while (delta % (i * i) == 0) { p *= i; delta /= (i * i); } int d = gcd(p, q); p /= d; q /= d; if (p != 1) printf("%d*", p); if (delta != 1) printf("sqrt(%d)", delta); if (q != 1) printf("/%d", q); printf("\n"); } } return 0; }
- 1
信息
- ID
- 1972
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 61
- 已通过
- 18
- 上传者