Pagini recente » Cod sursa (job #1903633) | Cod sursa (job #796433) | Cod sursa (job #2802916) | Cod sursa (job #1251568) | Cod sursa (job #112046)
Cod sursa(job #112046)
#include<stdio.h>
#include<math.h>
long A,B,C,la,lc,c,a,i,j,l=0,k,da1[1000],da2[1000],da12,dc1[1000],dc2[1000],dc12,num;
long int labs(long int x);
int cauta(long l)
{long i;
for(i=1;i<l;++i)if((da1[i]==da1[l])&&(da2[i]==da2[l])&&(dc1[i]==dc1[l])&&(dc2[i]==dc2[l])) return 1;
return 0;
}
int main()
{freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%ld %ld %ld %ld",&A,&B,&C,&k);
a=sqrt(labs(A));
if(A>0)
for(i=1;i<=a;++i)
{
if (A%i==0)
{
da1[++l]=-(A/i);
da2[l]=-i;
if (cauta(l)) --l;
da1[++l]=A/i;
da2[l]=i;
if (cauta(l)) --l;
if (A/i!=i)
{
da1[++l]=-i;
da2[l]=-(A/i);
if (cauta(l)) --l;
da1[++l]=i;
da2[l]=A/i;
if (cauta(l)) --l;
}
}
}
else
for(i=1;i<=a;++i)
if (A%i==0)
{
da1[++l]=A/i;
da2[l]=i;
if (cauta(l)) --l;
da1[++l]=labs(A/i);
da2[l]=-i;
if (cauta(l)) --l;
if (labs(A/i)!=i)
{
da1[++l]=-i;
da2[l]=labs(A/i);
if (cauta(l)) --l;
da1[++l]=i;
da2[l]=A/i;
if (cauta(l)) --l;
}
}
la=l;
for(i=1;i<=l-1;i++)
for(j=i+1;j<=l;j++) if(da1[i]>da1[j]) {da12=da1[i];da1[i]=da1[j];da1[j]=da12;da12=da2[i];da2[i]=da2[j];da2[j]=da12;}
l=0;
c=sqrt(labs(C));
if(C>0)
for(i=1;i<=c;++i)
{
if (C%i==0)
{
dc1[++l]=-(C/i);
dc2[l]=-i;
if (cauta(l)) --l;
dc1[++l]=C/i;
dc2[l]=i;
if (cauta(l)) --l;
if (C/i!=i)
{
dc1[++l]=-i;
dc2[l]=-(C/i);
if (cauta(l)) --l;
dc1[++l]=i;
dc2[l]=C/i;
if (cauta(l)) --l;
}
}
}
else
for(i=1;i<=c;++i)
if (C%i==0)
{
dc1[++l]=C/i;
dc2[l]=i;
if (cauta(l)) --l;
dc1[++l]=labs(C/i);
dc2[l]=-i;
if (cauta(l)) --l;
if (labs(C/i)!=i)
{
dc1[++l]=-i;
dc2[l]=labs(C/i);
if (cauta(l)) --l;
dc1[++l]=i;
dc2[l]=C/i;
if (cauta(l)) --l;
}
}
lc=l;
for(i=1;i<=l-1;i++)
for(j=i+1;j<=l;j++) if(dc1[i]>dc1[j]) {dc12=dc1[i];dc1[i]=dc1[j];dc1[j]=dc12;dc12=dc2[i];dc2[i]=dc2[j];dc2[j]=dc12;}
num=0;
for(i=1;i<=la;++i)
for(j=1;j<=lc;++j)
if(da1[i]*dc2[j]+da2[i]*dc1[j]==B)
{++num;
if(num==k)
{printf("(");
if(da1[i]==-1) printf("-");
else if(da1[i]!=1) printf("%ld",da1[i]);
printf("x");
if(dc2[j]>=0) printf("+");
printf("%ld)(",dc2[j]);
if(da2[i]==-1) printf("-");
else if(da2[i]!=1) printf("%ld",da2[i]);
printf("x");
if(dc1[j]>=0) printf("+");
printf("%ld)",dc1[j]);
return 0;
}
}
printf("-1");
fcloseall();
return 0;
}