求解一元二次方程
2025-08-04 14:23:43
发布于:浙江
3阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int solve1(){
return (b*b-4*a*c);
}
void solve2(int u,int d){
//cout<<u<<" "<<d;
if(u%d==0)cout<<u/d;
else{
int t=__gcd(u,d);
if(u<0&&d>0||d<0&&u>0)cout<<"-"<<abs(u/t)<<"/"<<abs(d/t);
else cout<<u/t<<"/"<<d/t;
}
}
void solve4(int u,int d){
if(u%(d*d)==0)u/=(d*d),d=1;
int s=1;
for(int i=2;i*i<=u;++i){
while(u%(i*i)==0){
//cout<<i<<endl;
s*=i;
u/=(i*i);
}
}
if(b!=0)cout<<"+";
d=abs(d);
//cout<<endl<<u<<endl;
if(s==1){
cout<<"sqrt("<<u<<")";
if(d!=1)cout<<"/"<<d;
}
else{
//cout<<s<<" "<<d<<endl;
if(s%d==0){
cout<<s/d<<"*sqrt("<<u<<")";
}
else if(__gcd(s,d)!=1){
int i=__gcd(s,d);
if(s/i==1&&d/i!=1)cout<<"sqrt("<<u<<")/"<<(d/i);
else cout<<(s/i)<<"*sqrt("<<u<<")/"<<(d/i);
}
else {
cout<<s<<"*sqrt("<<u<<")/"<<d;
}
}
}
void solve3(int i){
if(b!=0){
solve2(-b,2*a);
}
solve4(i,2*a);
}
int main(){
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
int t,m;
cin>>t>>m;
while(t--){
cin>>a>>b>>c;
int i=solve1();
// cout<<i<<" ";
if(i>=0){
int ti=sqrt(i);
if(ti*ti==i){
//cout<<ti<<" "<<i;
//cout<<" "<<ti*ti;
if(a>0)solve2(-b+ti,2*a);
else solve2(-b-ti,2*a);
}
else{
solve3(i);
}
cout<<endl;
}
else{
cout<<"NO"<<endl;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
这里空空如也
有帮助,赞一个