1 solutions
-
0
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