Pagini recente » Cod sursa (job #1532770) | Cod sursa (job #67670) | Cod sursa (job #963361) | Cod sursa (job #708636) | Cod sursa (job #995037)
Cod sursa(job #995037)
#include <fstream>
#include <algorithm>
using namespace std;
int len,v[2000],nrsol,X1,X2,ok=1,D,k;
long long int A,B,C;
struct solutie
{
int p1,p2,q1,q2;
};
solutie sol[5000];
inline void Read()
{
int d;
long long int delta;
ifstream fin("ecuatie.in");
fin>>A>>B>>C>>k;
delta=B*B-4*A*C;
for(D=0;D*D<delta;D++);
if(D*D!=delta)
ok=0;
fin.close();
}
struct sorting
{
bool operator () (const solutie& lhs , const solutie& rhs)
{
if (lhs.p1 == rhs.p1)
return lhs.q1 < rhs.q1;
return lhs.p1 < rhs.p1;
}
};
inline void Solve()
{
ofstream fout("ecuatie.out");
int d,p1,p2,q1,q2,i;
long long int val1,val2,val3,val;
if(!ok)
fout<<"-1\n";
else
{
val=A;
if(A<0)
val=-A;
for(d=1;d*d<=val;d++)
if(A%d==0)
{
v[++len]=d;
v[++len]=-d;
v[++len]=A/d;
v[++len]=-(A/d);
}
if((d-1)*(d-1)==val)
len-=2;
val1=B+D;val2=B-D;val3=2*A;
for(i=1;i<=len;i++)
{
d=v[i];
if((val1*d)%(val3)==0 && val2%(2*d)==0)
{
sol[++nrsol].p1=d;
sol[nrsol].p2=A/d;
sol[nrsol].q1=(val1*d)/val3;
sol[nrsol].q2=val2/(2*d);
}
if(D!=0 && (val2*d)%val3==0 && val1%(2*d)==0)
{ sol[++nrsol].p1=d;
sol[nrsol].p2=A/d;
sol[nrsol].q1=(val2*d)/val3;
sol[nrsol].q2=val1/(2*d);
}
}
if(nrsol>=k)
{
sort(sol+1,sol+nrsol+1,sorting());
fout<<'(';
if(sol[k].p1==-1)
fout<<"-";
else
if(sol[k].p1!=1)
fout<<sol[k].p1;
fout<<'x';
if(sol[k].q1!=0)
{
if(sol[k].q1>0)
fout<<'+';
fout<<sol[k].q1;
}
fout<<")(";
if(sol[k].p2==-1)
fout<<"-";
else
if(sol[k].p2!=1)
fout<<sol[k].p2;
fout<<'x';
if(sol[k].q2!=0)
{
if(sol[k].q2>0)
fout<<'+';
fout<<sol[k].q2;
}
fout<<')'<<'\n';
}
else
fout<<"-1\n";
}
fout.close();
}
int main()
{
Read();
Solve();
return 0;
}