Pagini recente » Cod sursa (job #1595512) | Cod sursa (job #1652844) | Cod sursa (job #1335348) | Cod sursa (job #1186053) | Cod sursa (job #130372)
Cod sursa(job #130372)
#include<iostream.h>
#include<stdio.h>
#include<math.h>
int main()
{ double de, x, x1, x2, r;
long a, b, c, d,n, nr, i, k, aux, sch, l, v[500001];
freopen("ecuatie.in", "rt", stdin);
freopen("ecuatie.out", "wt", stdout);
cin>>a>>b>>c>>k;
de=b*b-4*a*c;
if(de<0) cout<<-1;
else if((long)sqrt(de)!=sqrt(de)) cout<<-1;
else { r=sqrt(abs(a));
for(i=0, d=1;d<r;d++)
if(a%d==0) { v[i++]=-d; v[i++]=d;
v[i++]=-a/d; v[i++]=a/d;
}
if(d==r) {v[i++]=d; v[i++]=-d;
}
l=i-1;n=i;
do{sch=0;
for(i=0;i<l;i++)
if(v[i]>v[i+1]) {aux=v[i]; v[i]=v[i+1];
v[i+1]=aux;sch=1;
}
l--;
}while(sch);
if(de==0) { x=-b/(2.*a);
for(i=0, nr=0;i<n;i++)
if((long)(v[i]*x)==v[i]*x && (long)(a/v[i]*x)==a/v[i]*x)
{nr++; if(nr==k) break;}
if(i<n){ cout<<'(';
if (abs(v[i])!=1) cout<<v[i];
else if (v[i]==-1) cout<<'-';
cout<<'x'<<((-1*v[i]*x>0)?'+':'-')<<abs(v[i]*x)<<")(";
if (abs(a/v[i])!=1) cout<<a/v[i];
else if (a/v[i]==-1) cout<<'-';
cout<<'x'<<((-1*a/v[i]*x>0)?'+':'-')<<abs(a/v[i]*x)<<")";
}
else cout<<-1;
}
else { x1=(-b+sqrt(de))/(2*a);
x2=(-b-sqrt(de))/(2*a);
for(i=0, nr=0;i<n;i++)
if(-1*v[i]*x1<-1*v[i]*x2)
{if((long)(v[i]*x1)==v[i]*x1 && (long)(a/v[i]*x2)==a/v[i]*x2)
{nr++; if(nr==k) {aux=1;break;}}
if((long)(v[i]*x2)==v[i]*x2 && (long)(a/v[i]*x1)==a/v[i]*x1)
{nr++; if(nr==k){aux=2; break;}}
} else{ if((long)(v[i]*x2)==v[i]*x2 && (long)(a/v[i]*x1)==a/v[i]*x1)
{nr++; if(nr==k) {aux=2;break;}}
if((long)(v[i]*x1)==v[i]*x1 && (long)(a/v[i]*x2)==a/v[i]*x2)
{nr++; if(nr==k) {aux=1;break;}}
}
if(i<n) if(aux==1)
{cout<<'(' ;
if (abs(v[i])!=1) cout<<v[i] ;
else if (v[i]==-1) cout<<'-';
cout<<'x'<<((-1*v[i]*x1>0)?'+':'-')<<abs(v[i]*x1)<<
")(";
if (abs(a/v[i])!=1) cout<<a/v[i];
else if(a/v[i]==-1) cout<<'-';
cout<<'x'<<((-1*a/v[i]*x2>0)?'+':'-')<<abs(a/v[i]*x2)<<")";
}
else
{cout<<'(';
if (abs(v[i])!=1) cout<<v[i] ;
else if (v[i]==-1) cout<<'-';
cout<<'x'<<((-1*v[i]*x2>0)?'+':'-')<<abs(v[i]*x2)<<
")(";
if (abs(a/v[i])!=1) cout<<a/v[i];
else if(a/v[i]==-1) cout<<'-';
cout<<'x'<<((-1*a/v[i]*x1>0)?'+':'-')<<abs(a/v[i]*x1)<<")";
}
else cout<<-1;
} }
return 0;
}