Pagini recente » Cod sursa (job #227404) | Cod sursa (job #465543) | Cod sursa (job #3265441) | Cod sursa (job #1391401) | Cod sursa (job #325179)
Cod sursa(job #325179)
#include <stdio.h>
#include <math.h>
struct ec{
long p1,p2;
float q1,q2;
};
long A,B,C,P1,P2;
float x1,x2,Q1,Q2;
long d,k,z,ok,i,nr;
ec a[1000000];
int ecuatie(long A,long B,long C){
long delta;
delta = B*B -4*A*C;
if( sqrt(delta) * sqrt(delta) - delta >0) return -1;
x1 = (-B + sqrt(delta) ) / (2*A);
x2 = (-B - sqrt(delta) ) / (2*A);
return 1;
}
void vezid(long d){
P1 = d;
Q1 = (-x1)*d ;
P2 = A/d;
Q2 = (-x2)*(A/d);
if( floor(Q1) == Q1 && floor(Q2) == Q2){// dc sunt intregi
a[++z].p1=P1; a[z].p2=P2;
a[z].q1=Q1; a[z].q2=Q2;
}
P1 = d;
Q1 = -x2 *d;
P2 = A/d;
Q2 = -x1*(A/d);
if( floor(Q1) == Q1 && floor(Q2) == Q2){// dc sunt intregi
a[++z].p1=P1; a[z].p2=P2;
a[z].q1=Q1; a[z].q2=Q2;
}
}
long abs(long x){
if(x>0) return x;
else return -x;
}
void work(){
for(d=1; d<= sqrt(abs(A));++d){
vezid(d);
vezid(-d);
vezid(A/d);
vezid(-A/d);
}
}
void sort(long l,long r){
long i,j,xp1,xq1,y;
float fy;
i=l; j=r; xp1=a[l+(r-l)/2].p1; xq1=a[l+(r-l)/2].q1;
do {
while(a[i].p1 < xp1 || (a[i].p1==xp1 && a[i].q1<xq1)) ++i;
while( xp1 < a[j].p1 ||(a[j].p1==xp1 && xq1<a[j].q1)) --j;
if(i<=j){
y=a[i].p1; a[i].p1=a[j].p1; a[j].p1=y;
y=a[i].p2; a[i].p2=a[j].p2; a[j].p2=y;
fy=a[i].q1; a[i].q1=a[j].q1; a[j].q1=fy;
fy=a[i].q2; a[i].q2=a[j].q2; a[j].q2=fy;
++i; --j;
}
} while(i<=j);
if(i<r) sort(i,r);
if(l<j) sort(l,j);
}
void scrie(long p1, float q1){
printf("(");
if(p1==1);
else if(p1==-1)printf("-");
else printf("%d",p1);
printf("x");
if(q1<0)printf("%.0f",q1);
else printf("+%.0f",q1);
printf(")");
}
int main(){
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%ld%ld%ld%ld",&A,&B,&C,&k);
ok=ecuatie(A,B,C);
if(ok==-1) printf("-1\n");
else work();
sort(1,z);
i=2; nr=1;
while(i<=z && nr<k){
if(a[i].p1==a[i-1].p1 && a[i].p2==a[i-1].p2 && a[i].q1==a[i-1].q1&&
a[i].q2==a[i-1].q2) ;
else nr++;
i++;
}
i--;
if(nr==k && i<=z){
scrie(a[i].p1,a[i].q1);
scrie(a[i].p2,a[i].q2);
printf("\n");
}
fclose(stdin); fclose(stdout);
return 0;
}