Pagini recente » Cod sursa (job #1533991) | Cod sursa (job #2137069) | Cod sursa (job #1653067) | Cod sursa (job #481305) | Cod sursa (job #404433)
Cod sursa(job #404433)
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <math.h>
#define ll long long
#define Ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
using namespace std;
ll a, b, c, k;
Ld delta;
vector <pair <ll, ll> > vctSol;
inline void test(ll x)
{
ll p1 = x, p2 = a / x;
if ((b + (ll) delta) % (2 * p2) == 0 && c % ((b + (ll) delta) / (2 * p2)) == 0)
vctSol.pb(mp(p1, (b + delta) / (2 * p2)));
if ((b - (ll) delta) % (2 * p2) == 0 && c % ((b - (ll) delta) / (2 * p2)) == 0)
vctSol.pb(mp(p1, (b - delta) / (2 * p2)));
}
inline void afis(ll p1, ll q1)
{
printf("(");
if (p1 <= 0)
printf("-"), p1 = -p1;
if (p1 != 1)
printf("%d", p1);
printf("x");
if (q1 >= 0)
printf("+");
printf("%d)", q1);
}
int main()
{
freopen("ecuatie.in", "r", stdin);
freopen("ecuatie.out", "w", stdout);
scanf("%lld %lld %lld %lld", &a, &b, &c, &k);
delta = (Ld) b * b - 4 * a * c;
if (delta < 0 || sqrt(delta) * sqrt(delta) != delta)
{
printf("-1\n");
return 0;
}
delta = sqrt(delta);
for (int i = 1; i < sqrt((Ld) a); i++)
if (a % i == 0)
{
test(i);
test(a / i);
test(-i);
test(-a / i);
}
if (sqrt((Ld) a) == (ll) sqrt((Ld) a))
{
test(sqrt((Ld) a));
test(-sqrt((Ld) a));
}
sort(vctSol.begin(), vctSol.end());
if (k > vctSol.size())
{
printf("-1\n");
return 0;
}
else afis(vctSol[k - 1].f, vctSol[k - 1].s), afis(a / vctSol[k - 1].f, c / vctSol[k - 1].s);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}