Pagini recente » Cod sursa (job #2323773) | Cod sursa (job #109886)
Cod sursa(job #109886)
#include<stdio.h>
#include<math.h>
long ok1,l,j,p1,p2,q1,q2,ok,aux,i,a,b,c,k,lima,limc,d,diva[1000],divc[1000],solp1[1000],solp2[1000],solq1[1000],solq2[1000];
int main()
{
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%ld %ld %ld %ld",&a,&b,&c,&k);
if(a<0)
{a=0-a; lima=sqrt(a);}
else
lima=sqrt(a);
if(c<0)
{ c=0-c; limc=sqrt(c);}
else
limc=sqrt(c);
for(i=1;i<limc;i++)
if(c%i==0)
{
divc[++divc[0]]=i; divc[++divc[0]]=0-i;
divc[++divc[0]]=c/i; divc[++divc[0]]=0-(c/i);
}
if(c%limc==0&&limc*limc==c)
{divc[++divc[0]]=limc; divc[++divc[0]]=0-limc;}
else
if(c%limc==0)
{
divc[++divc[0]]=limc; divc[++divc[0]]=0-limc;
divc[++divc[0]]=c/limc; divc[++divc[0]]=0-(c/limc);
}
for(i=1;i<lima;i++)
if(a%i==0)
{
diva[++diva[0]]=i; diva[++diva[0]]=0-i;
diva[++diva[0]]=a/i; diva[++diva[0]]=0-(a/i);
}
if(a%lima==0&&lima*lima==a)
{diva[++diva[0]]=lima; diva[++diva[0]]=0-lima;}
else
if(a%lima==0)
{
diva[++diva[0]]=lima; diva[++diva[0]]=0-lima;
diva[++diva[0]]=a/lima; diva[++diva[0]]=0-(a/lima);
}
/*divc[++divc[0]]=c; divc[++divc[0]]=0-c;
diva[++diva[0]]=a; diva[++diva[0]]=0-a;
*/
for(i=1;i<=divc[0];i++)
for(j=1;j<=diva[0];j++)
{
p1=diva[j];
p2=a/p1;
q1=divc[i];
q2=c/q1;
if(p1*q2+q1*p2==b)
{
solp1[++solp1[0]]=p1;
solp2[++solp2[0]]=p2;
solq1[++solq1[0]]=q1;
solq2[++solq2[0]]=q2;
}
}
if(solp1[0]*2<k)
printf("-1");
else
{
ok=0;
do
{
ok=1;
for(i=1;i<solp1[0];i++)
{
if(solp1[i]>solp1[i+1])
{
aux=solp1[i];
solp1[i]=solp1[i+1];
solp1[i+1]=aux;
aux=solp2[i];
solp2[i]=solp2[i+1];
solp2[i+1]=aux;
aux=solq1[i];
solq1[i]=solq1[i+1];
solq1[i+1]=aux;
aux=solq2[i];
solq2[i]=solq2[i+1];
solq2[i+1]=aux;
ok=0;
}
else
{
if(solp1[i]==solp1[i+1]&&solq1[i]>solq1[i+1])
{
aux=solp1[i];
solp1[i]=solp1[i+1];
solp1[i+1]=aux;
aux=solp2[i];
solp2[i]=solp2[i+1];
solp2[i+1]=aux;
aux=solq1[i];
solq1[i]=solq1[i+1];
solq1[i+1]=aux;
aux=solq2[i];
solq2[i]=solq2[i+1];
solq2[i+1]=aux;
ok=0;
}
}
}
}while(ok==0);
printf("(");
/*if(solp1[k]==1 && solp2[k]==1) printf("x");
else
if(solp1[k]==1) printf("%ldx",solp2[k]);
else
if(solp2[k]==1) printf("%ldx",solp1[k]);
else
if(solp1[k]==-1 && solp2[k]==-1) printf("x");
else
if(solp1[k]==-1 || solp2[k]==-1) printf("-x");*/
if(solp1[k]==1) printf("x");
else
if(solp1[k]==-1) printf("-x");
else printf("%ldx",solp1[k]);
if(solq1[k]<0) printf("-%ld",solq1[k]);
else printf("+%ld",solq1[k]);
printf(") (");
if(solp2[k]==1) printf("x");
else
if(solp2[k]==-1) printf("-x");
else printf("%ldx",solp2[k]);
if(solq2[k]<0) printf("-%ld",solq2[k]);
else printf("+%ld",solq2[k]);
printf(")");
}
fcloseall();
return 0;
}