Pagini recente » Cod sursa (job #2668016) | Cod sursa (job #822554) | Cod sursa (job #2348962) | Cod sursa (job #918023) | Cod sursa (job #994999)
Cod sursa(job #994999)
#include <fstream>
#include <algorithm>
using namespace std;
int len,v[500],nrsol,ok=1;
long long X1,X2,A,B,C,k;
struct solutie
{
long long p1,p2,q1,q2;
};
solutie sol[1000];
inline void Read()
{
long long delta,d;
ifstream fin("ecuatie.in");
fin>>A>>B>>C>>k;
delta=B*B-4*A*C;
for(d=1;d*d<delta;d++);
if(d*d!=delta)
ok=0;
else
{
if((-B-d)%(2*A))
ok=0;
else
if((-B+d)%(2*A))
ok=0;
else
{
X1=(-B-d)/(2*A);
X2=(-B+d)/(2*A);
}
}
fin.close();
}
inline bool Cmp(const solutie A, const solutie B)
{
if(A.p1==B.p1)
return A.q1<B.q1;
return A.p1<B.p1;
}
inline void Solve()
{
ofstream fout("ecuatie.out");
long long d,p1,p2,i,j;
if(!ok)
fout<<"-1\n";
else
{
for(d=1;d*d<=A;d++)
if(A%d==0)
{
v[++len]=d;
v[++len]=-d;
v[++len]=A/d;
v[++len]=-(A/d);
}
if((d-1)*(d-1)==A)
len-=2;
for(i=1;i<=len;i++)
{
d=v[i];
sol[++nrsol].p1=d;
sol[nrsol].p2=A/d;
sol[nrsol].q1=(-1)*X1*d;
sol[nrsol].q2=(-1)*X2*(A/d);
if(X1!=X2)
{ sol[++nrsol].p1=d;
sol[nrsol].p2=A/d;
sol[nrsol].q1=(-1)*X2*d;
sol[nrsol].q2=(-1)*X1*(A/d);
}
}
if(nrsol>=k)
{
sort(sol+1,sol+nrsol+1,Cmp);
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;
}