本蒟蒻的代码 不知道为什么死活有一个点过不去 能看似乎是在81行那里的问题 sqrt化简不了 小图灵说还是RE
using namespace std;
int flag[1005], arr[1005], cnt = 0;
void is_prime(int k) {
flag[0] = flag[1] = 1;
for (int i = 2; i <= k; i++) {
if (!flag[i]) {
arr[++cnt] = i;
}
for (int j = 1; j <= cnt && arr[j]*i <= k; j++) {
flag[arr[j]*i] = 1;
if (i % arr[j] == 0)break;
}
}
// cnt--;
}
int main() {
// freopen("upe.in", "r", stdin);
// freopen("uqe.out", "w", stdout);
int t, m;
cin >> t >> m;
is_prime(m);
// for(int i=1;i<=cnt;i++){
// cout<<arr[i]<<' ';
// }
while (t--) {
int a, b, c;
cin >> a >> b >> c;
int a1, b1, c1;
a1 = a;
b1 = b;
c1 = c;
if (b * b - 4 * a * c < 0) {
cout << "NO\n";
continue;
}
int d = b * b - 4 * a * c;
// cout<<d<<endl;
if (d == 0) {
if (b % (2 * a) == 0) {
cout << -2 * a / b << endl;
} else {
a *= 2, b *= -1;
if (a < 0) {
a *= -1;
b *= -1;
}
int k = abs(__gcd(a, b));
a /= k;
b /= k;
if (a == 1)cout << b << endl;
else cout << b << '/' << a << endl;
}
} else {
int qwe = sqrt(d);
if (qwe * qwe == d) {
a *= 2;
b *= -1;
b += qwe;
if (a < 0) {
a *= -1;
b *= -1;
}
int k = abs(__gcd(a, b));
a /= k;
b /= k;
if (a == 1)cout << b << endl;
else cout << b << '/' << a << endl;
} else if (b == 0) {
// cout<<1;
int sd = b * b - 4 * a * c;
int er = 1;
for (int i = 1; i <= cnt; i++) {
if (sd % (arr[i]*arr[i]) == 0) {
er *= arr[i];
sd /= arr[i];
sd /= arr[i];
}
}
// cout<<endl;
a = a1;
a *= 2;
if (a < 0) {
er *= -1;
a *= -1;
}
int k = abs(__gcd(er, a));
er /= k;
a /= k;
if (er != 1) {
cout << er << '*';
}
// cout<<a<<endl;
if (a == 1)cout << "sqrt(" << sd << ")" << endl;
else cout << "sqrt(" << sd << ")/" << a << endl;
} else {
a *= 2;
b *= -1;
if (a < 0) {
a *= -1;
b *= -1;
}
int k = abs(__gcd(a, b));
a /= k;
b /= k;
if (a == 1)cout << b << '+';
else cout << b << '/' << a << '+';
int er = 1;
for (int i = 1; i <= cnt; i++) {
if (d % (arr[i]*arr[i]) == 0) {
er *= arr[i];
d /= arr[i];
d /= arr[i];
}
}
a = a1;
a *= 2;
if (a < 0) {
er *= -1;
a *= -1;
}
k = abs(__gcd(er, a));
er /= k;
a /= k;
if (er != 1) {
cout << er << '*';
}
// cout<<a<<endl;
if (a == 1)cout << "sqrt(" << d << ")" << endl;
else cout << "sqrt(" << d << ")/" << a << endl;
}
}
}
return 0;
}