1 solutions

  • 0
    @ 2024-12-5 18:18:59

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const ll MAXN = 1e5+5;
    
    struct Fen{
        ll zi,mu;
    };
    
    ll gcd(ll a,ll b){
        if(a<0) a=-a;
        if(b==0) return a;
        return gcd(b,a%b);
    }
    
    Fen add(Fen x, Fen y){
        Fen r;
        r.zi = x.zi*y.mu+x.mu*y.zi;
        r.mu = x.mu*y.mu;
        return r;
    }
    
    Fen yue(Fen x){
        if(x.mu<0){
            x.zi=-x.zi;
            x.mu=-x.mu;
        }
        ll g = gcd(x.zi,x.mu);
        x.zi/=g;
        x.mu/=g;
        return x;
    }
    
    void print(Fen x){
        x=yue(x);
        //printf("begin print x.zi%=lld,x.mu=%lld\n",x.zi,x.mu);
        if(x.zi==0){
            cout<<0;
            return;
        }
        if(x.mu==1){
            cout<<x.zi;
            return;
        }
        cout<<x.zi<<"/"<<x.mu;
    }
    
    ll strip(ll x){
        ll r= 1;
        for(ll i=2;i*i<=x;i++){
            while(x%(i*i)==0){
                r*=i;
                x/=(i*i);
            }
        }
        return r;
    }
    
    int main(){
       
        ll T,M;
        cin>>T>>M;
        while(T--){
            ll a,b,c;
            cin>>a>>b>>c;
            if(a<0){
                a=-a;
                b=-b;
                c=-c;
            }
            ll d = b*b-4*a*c;
            if(d<0){
                cout<<"NO"<<endl;
                continue;
            }
            if(d==0){
                Fen q;
                q.zi = -b;
                q.mu = 2*a;
                q=yue(q);
                print(q);
                cout<<endl;
                continue;
            }
            Fen q1,q2;
            q1.zi=-b;
            q1.mu=2*a;
            q2.zi=1;
            q2.mu=2*a;
            ll ss = strip(d);
            d/=ss*ss;
            //printf("ss=%lld,d=%lld\n",ss,d);
            if(d==1){
                q2.zi*=ss;
                q2 = add(q1,q2);
                q2=yue(q2);
                print(q2);
                cout<<endl;
                continue;
            }
            if(q1.zi!=0){
                print(q1);
                cout<<"+";
            }
            q2.zi*=ss;
            q2=yue(q2);
            if(q2.zi==1&&q2.mu==1){
                cout<<"sqrt("<<d<<")"<<endl;
            } else if(q2.mu==1){
                cout<<q2.zi<<"*sqrt("<<d<<")"<<endl;
            } else if(q2.zi==1){
                cout<<"sqrt("<<d<<")/"<<q2.mu<<endl;
            } else {
                cout<<q2.zi<<"*sqrt("<<d<<")/"<<q2.mu<<endl;
            }
        }
        return 0;
    }
    
    
    • 1

    Information

    ID
    9136
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By