WA 70 #2 #9 #10
查看原帖
WA 70 #2 #9 #10
391452
_sun_楼主2023/11/2 12:17
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int gcd(int a, int b)
{
    a=abs(a),b=abs(b);
    return b ? gcd(b, a % b) : a;
}
int N[10010];
int main()
{
    int t,M;
    cin >> t >> M;
    for (int i = 1; i <= 10000; i ++ )
        N[i]=i*i;
    while (t -- )
    {
        int a,b,c;
        cin >> a >> b >> c;
        int d=b*b-a*c*4;
        if(d<0)
        {
            cout << "NO" << endl;
            continue;
        }
        if(d==0)
        {
            if(a<0)
                b=-b,a=-a;
            if(b%(2*a)==0)
                cout << -b/(2*a) << endl;
            else
                cout << -b/gcd(b,2*a) << '/' << 2*a/gcd(b,2*a) << endl;
            continue;
        }
        float s=sqrt(d);
        if(floor(s)==s)
        {
            int k;
            if(a>0)
                k=-b+s;
            else
                k=-b-s;
            if(k%(2*a)==0)
                cout << k/(2*a) << endl;
            else
            {
                if(k/(2*a)<0)
                    cout << "-";
                cout << abs(k/gcd(k,2*a)) << "/" << abs(2*a/gcd(k,2*a)) << endl;
            }
        }
        else
        {
            int h=1;
            for (int i = 2; i <= 10000; i ++ )
            {
                if(d%N[i]==0)
                {
                    d/=N[i];
                    h*=i;
                    i--;
                }
                if(d<N[i])
                    break;
            }
            if(b!=0)
            {   
                if(a<0)
                    a=-a,b=-b;
                if(b%(2*a)==0)
                    cout << -b/(2*a) << "+";
                else
                    cout << -b/gcd(b,2*a) << "/" << 2*a/gcd(b,2*a) << "+";
            }
            a=abs(a);
            if(h==(2*a))
                cout << "sqrt(" << d << ")" << endl;
            else if(h%(2*a)==0)
                cout << h/(2*a) << "*sqrt(" << d << ")" << endl;
            else if((2*a)%h==0)
                cout << "sqrt(" << d << ")/" << 2*a/h << endl;
            else
                cout << h/gcd(h,2*a) << "*sqrt(" << d << ")/" << 2*a/gcd(2*a,h) << endl;
        }
    }
}
2023/11/2 12:17
加载中...