666
2025-08-08 10:44:36
发布于:上海
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
void tosimp(int &p,int &q){//化简
if(p==0){
q=1;
return;
}
int g=gcd(abs(p),abs(q));//找最大公因数
p/=g,q/=g;
if(q<0){//保证负号在分子上
p=-p;
q=-q;
}
}
void solve(){
int a,b,c;
cin>>a>>b>>c;
int d=bb-4ac;
if(d<0){//无解
cout<<"NO\n";
return ;
}
if(d==0){//只有一个解
int p=-b;//&p
int q=2a;//&q
tosimp(p,q);
//p/q q1
if(q1) cout<<p<<endl;
else cout<<p<<"/"<<q<<endl;
return;
}
int k=1,t=d; //sqrt(d)=ksqrt(r)
// d=kkr
for(int i=2;ii<=t;i++){
while(t%(ii)==0){//找到一个能整除的平方数
//d尽可能地把平方数整除尽
//t每次除平方数ii,k每次乘i,最后k就是能开尽的平方数
t/=ii,k=i;
}
//d=t=4493->223sqrt(3)
}
int r=t;
if(r1){//x解是有理数
//用a的±去找最大实数解
int p=(a>0)?(-b+k):(-b-k);
int q=2*a;
tosimp(p,q);
if(q1) cout<<p<<endl;
else cout<<p<<"/"<<q<<endl;
}else{//x解是无理数->划分为p1/q1+p2sqrt(r)/q2;
//x=-b/(2a) ± k/(2a)sqrt(r)
//a>0 -b/(2a) + k/(2a)sqrt(r)
//a<0 -b/(2a) - k/(2a)sqrt(r)
int p1=-b;
int q1=2a;
tosimp(p1,q1);
int s=(a>0)?1:-1;//处理正负号
int p2=sk;
int q2=2*a;
tosimp(p2,q2);
if(p1!=0){
if(q11) cout<<p1;
else cout<<p1<<"/"<<q1;
cout<<"+";
}
if(p21&&q21) cout<<"sqrt("<<r<<")";//sqrt(r)
else if(q21) cout<<p2<<"sqrt("<<r<<")";//p2sqrt(r)
else if(p2==1) cout<<"sqrt("<<r<<")/"<<q2;//sqrt(r)/q2
else cout<<p2<<"sqrt("<<r<<")/"<<q2;//p2sqrt(r)/q2
cout<<endl;
}
}
int main(){
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
int t,m;
cin>>t>>m;
while(t--){
solve();
}
fclose(stdin);
fclose(stdout);
return 0;
}
这里空空如也
有帮助,赞一个