Pagini recente » Cod sursa (job #1894097) | Cod sursa (job #592580) | Cod sursa (job #50498) | Cod sursa (job #2028862) | Cod sursa (job #995016)
Cod sursa(job #995016)
#include <fstream>
#include <algorithm>
using namespace std;
int len,v[500],A,B,C,k,nrsol,X1,X2,ok=1,D;
struct solutie
{
int p1,p2,q1,q2;
};
solutie sol[1000];
inline void Read()
{
int delta,d;
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();
}
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");
int d,p1,p2,q1,q2,i,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;
//for(i=1;i<=len;i++)
// fout<<v[i]<<" ";
//fout<<"\n";
for(i=1;i<=len;i++)
{
d=v[i];
if(((B+D)*d)%(2*A)==0 && (B-D)%(2*d)==0)
{
sol[++nrsol].p1=d;
sol[nrsol].p2=A/d;
sol[nrsol].q1=((B+D)*d)/(2*A);
sol[nrsol].q2=(B-D)/(2*d);
}
if(D!=0 && ((B-D)*d)%(2*A)==0 && (D+B)%(2*d)==0)
{ sol[++nrsol].p1=d;
sol[nrsol].p2=A/d;
sol[nrsol].q1=((B-D)*d)/(2*A);
sol[nrsol].q2=(D+B)/(2*d);
}
}
// for(i=1;i<=nrsol;i++)
// fout<<sol[i].p1<<" "<<sol[i].q1<<" "<<sol[i].p2<<" "<<sol[i].q2<<"\n";
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;
}