Pagini recente » Cod sursa (job #2186283) | Cod sursa (job #2735538) | Cod sursa (job #341882) | Cod sursa (job #791170) | Cod sursa (job #995045)
Cod sursa(job #995045)
#include <cstdio>
#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;
freopen ("ecuatie.in","r",stdin);
scanf("%lld%lld%lld%lld", &A,&B,&C,&k);
delta=B*B-4*A*C;
for(D=0;D*D<delta;D++);
if(D*D!=delta)
ok=0;
}
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()
{
freopen ("ecuatie.out","w",stdout);
int d,p1,p2,q1,q2,i;
long long int val1,val2,val3,val;
if(!ok)
printf("-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());
printf("(");
if(sol[k].p1==-1)
printf("-");
else
if(sol[k].p1!=1)
printf("%d", sol[k].p1);
printf("x");
if(sol[k].q1!=0)
{
if(sol[k].q1>0)
scanf("+");
printf("%d", sol[k].q1);
}
printf(")(");
if(sol[k].p2==-1)
printf("-");
else
if(sol[k].p2!=1)
printf("%d", sol[k].p2);
printf("x");
if(sol[k].q2!=0)
{
if(sol[k].q2>0)
printf("+");
printf("%d", sol[k].q2);
}
printf(")\n");
}
else
printf("-1\n");
}
}
int main()
{
Read();
Solve();
return 0;
}