Pagini recente » Cod sursa (job #816313) | Cod sursa (job #780085) | Cod sursa (job #87282) | Cod sursa (job #938108) | Cod sursa (job #237200)
Cod sursa(job #237200)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
long a, b, c, k, delta, x1, x2, aux, i, v[1024], p, m[1024][9], o, y[1024][9], r;
int cmp(const void *a, const void *b) {
long *c = (long *)a;
long *d = (long *)b;
if (c[1] == d[1]) {
return c[2] - d[2];
} else {
return c[1] - d[1];
}
}
void elimin() {
++r;
for (long j = 1; j <= 4; ++j) {
y[r][j] = m[1][j];
}
for (long i = 2; i <= o; ++i) {
if (m[i][1] != m[i - 1][1] || m[i][2] != m[i - 1][2] || m[i][3] != m[i - 1][3] || m[i][4] != m[i - 1][4]) {
++r;
for (long j = 1; j <= 4; ++j) {
y[r][j] = m[i][j];
}
}
}
o = r;
for (long i = 1; i <= o; ++i) {
for (long j = 1; j <= 4; ++j) {
m[i][j] = y[i][j];
}
}
}
int main() {
freopen("ecuatie.in", "r", stdin);
freopen("ecuatie.out", "w", stdout);
scanf("%ld%ld%ld%ld", &a, &b, &c, &k);
delta = b * b - 4 * a * c;
if (sqrt(delta) * sqrt(delta) != delta) {
printf("-1");
return 0;
}
x1 = (-b - sqrt(delta)) / (2 * a);
x2 = (-b + sqrt(delta)) / (2 * a);
aux = sqrt(abs(a));
for (i = 1; i <= aux; ++i) {
if (a % i == 0) {
v[++p] = i;
v[++p] = -i;
v[++p] = a / i;
v[++p] = a / (-i);
}
}
for (i = 1; i <= p; ++i) {
m[++o][1] = v[i];
m[o][3] = a / v[i];
m[o][2] = -x1 * m[o][1];
m[o][4] = -x2 * m[o][3];
m[++o][1] = v[i];
m[o][3] = a / v[i];
m[o][2] = -x2 * m[o][1];
m[o][4] = -x1 * m[o][3];
}
qsort(m + 1, o, sizeof(m[0]), cmp);
elimin();
if (k <= o) {
printf("(");
if (m[i][1] == 1) {
printf("x");
} else {
if (m[i][1] == -1) {
printf("-x");
} else {
printf("%ldx", m[i][1]);
}
}
if (m[i][2] > 0) {
printf("+%ld)", m[i][2]);
} else {
printf("%ld)", m[i][2]);
}
printf("(");
if (m[i][3] == 1) {
printf("x");
} else {
if (m[i][3] == -1) {
printf("-x");
} else {
printf("%ldx", m[i][3]);
}
}
if (m[i][4] > 0) {
printf("+%ld)", m[i][4]);
} else {
printf("%ld)", m[i][4]);
}
printf("\n");
}
if (k > o) {
printf("-1");
return 0;
}
return 0;
}