#include <bits/stdc++.h>
using namespace std;
int t, m, a, b, c;
bool check1(double x){
if((int)sqrt(x) * (int)sqrt(x) == x) return 1;
return 0;
}
void rational(double ans){
if(ans == (int)ans) cout << (int)ans;
else{
for( int i = 1; i <= m; i++ ){
if(int(ans * i) == ans * i){
cout << int(ans * i) << "/" << i;
return;
}
}
}
}
int main(){
freopen("uqe2.in", "r", stdin);
freopen("uqe.out", "w", stdout);
cin >> t >> m;
while(t--){
cin >> a >> b >> c;
double chans = pow(b, 2) - 4 * a * c;
if(chans < 0) cout << "NO" << endl;
else{
double maxn = max((-b + sqrt(chans)) / (2 * a), (-b - sqrt(chans)) / (2 * a));
if(check1(chans)){
rational(maxn);
cout << endl;
}
else{
if(-b != 0){
rational(-b / (2.00 * a));
cout << "+";
}
int tmp = 1;
for( int i = 2; i <= m; i++ ){
while((int)chans % (i * i) == 0){
tmp *= i;
chans /= (i * i);
}
}
int gcd = __gcd((int)tmp, 2 * a);
tmp /= gcd;
int op = 2 * a / gcd;
if(abs(tmp) != 1) cout << abs(tmp) << "*";
cout << "sqrt(" << chans << ")";
if(abs(op) != 1) cout << "/" << abs(op);
cout << endl;
}
}
}
return 0;
}
这个程序告诉我 31 不等于 31
导致错误数据:
1 1000
225 -300 -341