Pagini recente » Cod sursa (job #387020) | Cod sursa (job #667184) | Cod sursa (job #3256620) | Cod sursa (job #1008415) | Cod sursa (job #430115)
Cod sursa(job #430115)
#include<cstdio>
#include<math.h>
long long l,x,x1s,x1j,x2s,x2j,A,B,C,k,auxp1,auxp2,auxq1,auxq2,m[100000][5];
long long modul(long long x)
{
return x<0?(-x):x;
}
void getsol(long long d)
{
long long p1,p2,q1,q2;
p1=d;
q1=-x1s*d/x1j;
p2=A/d;
q2=-x2s*A/(d*x2j);
if(p1*p2==A && q1*q2==C && p1*q2+p2*q1==B)
{
bool ok=true;
for(long long i=1;i<=l;i++)
if(m[i][1]==p1 && m[i][2]==q1 && m[i][3]==p2 && m[i][4]==q2)
{
ok=false;
break;
}
if(ok==true)
{
++l;
m[l][1]=p1;
m[l][2]=q1;
m[l][3]=p2;
m[l][4]=q2;
}
}
p1=d;
q1=-x2s*d/x2j;
p2=A/d;
q2=-x1s*A/(d*x1j);
if(p1*p2==A && q1*q2==C && p1*q2+p2*q1==B)
{
bool ok=true;
for(long long i=1;i<=l;i++)
if(m[i][1]==p1 && m[i][2]==q1 && m[i][3]==p2 && m[i][4]==q2)
{
ok=false;
break;
}
if(ok==true)
{
++l;
m[l][1]=p1;
m[l][2]=q1;
m[l][3]=p2;
m[l][4]=q2;
}
}
}
long long getx1x2()
{
long long delta=B*B-4*A*C;
if((long long)sqrt(delta)*sqrt(delta)!=sqrt(delta)*sqrt(delta))
return 0;
x1s=-B-(long long)sqrt(delta);
x1j=2*A;
x2s=-B+(long long)sqrt(delta);
x2j=2*A;
return 1;
}
int main()
{
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%lld%lld%lld%lld",&A,&B,&C,&k);
if(!getx1x2())
{
printf("-1");
return 0;
}
x=(long long)sqrt(modul(A));
for(long long i=1;i<=x;i++)
if(A%i==0)
getsol(i), getsol(-i), getsol(A/i), getsol(-A/i);
for(long long i=1;i<l;i++)
for(long long j=i+1;j<=l;j++)
if(m[i][1]>m[j][1])
{
auxp1=m[i][1];
auxq1=m[i][2];
auxp2=m[i][3];
auxq2=m[i][4];
m[i][1]=m[j][1];
m[i][2]=m[j][2];
m[i][3]=m[j][3];
m[i][4]=m[j][4];
m[j][1]=auxp1;
m[j][2]=auxq1;
m[j][3]=auxp2;
m[j][4]=auxq2;
}
else if(m[i][1]==m[j][1] && m[i][2]>m[j][2])
{
auxp1=m[i][1];
auxq1=m[i][2];
auxp2=m[i][3];
auxq2=m[i][4];
m[i][1]=m[j][1];
m[i][2]=m[j][2];
m[i][3]=m[j][3];
m[i][4]=m[j][4];
m[j][1]=auxp1;
m[j][2]=auxq1;
m[j][3]=auxp2;
m[j][4]=auxq2;
}
printf("(");
if(m[k][1]==-1) printf("-");
else if(m[k][1]!=1) printf("%lld",m[k][1]);
printf("x");
if(m[k][2]<0) printf("%lld",m[k][2]);
else printf("+%lld",m[k][2]);
printf(")(");
if(m[k][3]==-1) printf("-");
else if(m[k][3]!=1) printf("%lld",m[k][1]);
printf("x");
if(m[k][4]<0) printf("%lld",m[k][4]);
else printf("+%lld",m[k][4]);
printf(")");
/* for(long long i=1;i<=l;i++)
{
for(long long j=1;j<=4;j++)
prlong longf("%lld ",m[i][j]);
prlong longf("\n");
}*/
return 0;
}