Pagini recente » Cod sursa (job #2791810) | Borderou de evaluare (job #771330) | Cod sursa (job #3266022) | Cod sursa (job #2651957) | Cod sursa (job #428275)
Cod sursa(job #428275)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#define MAX 1000000
int sol[MAX][4],sol2[MAX][4],ns=0,ns2=0;
long long a,b,c,k,c1,c2,dd;
long long d,i;
void printeq(int eq[]){
printf("(");
if(eq[0]!=1&&eq[0]!=-1){
printf("%d",eq[0]);
}else if(eq[0]==-1){
printf("-");
}
printf("x%c%u)(",(eq[1]>0)?'+':'-',(eq[1]>0)?eq[1]:-eq[1]);
if(eq[2]!=1&&eq[2]!=-1){
printf("%d",eq[2]);
}else if(eq[2]==-1){
printf("-");
}
printf("x%c%u)\n",(eq[3]>0)?'+':'-',(eq[3]>0)?eq[3]:-eq[3]);
}
bool isInt(float f){
return f==float(int(f));
}
void addSol(int s){
if((s*c1%dd==0)&&(c2*a)%(dd*s)==0){
sol[ns][0]=s;
sol[ns][1]=-c1*s/dd;
sol[ns][2]=a/s;
sol[ns][3]=-c2*a/(s*dd);
ns++;
}
if((s*c2%dd==0)&&(c1*a)%(dd*s)==0){
sol[ns][0]=s;
sol[ns][1]=-c2*s/dd;
sol[ns][2]=a/s;
sol[ns][3]=-c1*a/(s*dd);
ns++;
}
}
int comp(const void* p1,const void* p2){
int *v1=(int*)p1,*v2=(int*)p2;
if(v1[0]-v2[0]==0){
return v1[1]-v2[1];
}else{
return v1[0]-v2[0];
}
}
int main(){
FILE* fin=fopen("ecuatie.in","r");
freopen("ecuatie.out","wt",stdout);
fscanf(fin,"%lld %lld %lld %lld",&a,&b,&c,&k);
d=b*b-4*a*c;
i=(int)sqrt(abs(d));
if(i*i==d){
c1=-b-i,c2=-b+i,dd=2*a;
int l=sqrt(abs(a));
for(int i=1;i<=l;i++){
if(a%i==0){
addSol(i),addSol(-i);
addSol(a/i),addSol(-a/i);
}
}
qsort(sol,ns,16,comp);
for(int i=0;i<ns;i++){
memcpy(sol2[ns2++],sol[i],16);
// printeq(sol2[ns2-1]);
while(!memcmp(sol[i],sol[i+1],16)&&i<ns-1){
i++;
}
}
if(k<=ns2){
printeq(sol2[k-1]);
}else{
printf("-1");
return -1;
}
}else{
printf("-1");
}
return 0;
}