Pagini recente » Cod sursa (job #2300977) | Cod sursa (job #2791214) | Cod sursa (job #1687772) | Cod sursa (job #2497583) | Cod sursa (job #361044)
Cod sursa(job #361044)
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define f first
#define s second
using namespace std;
ll a, b, c, k, x1, x2;
vector <ll> vctDiviz;
vector <pair <pair <ll, ll>, pair <ll, ll> > > vctSol;
inline ll llabs(ll x)
{
return (x < 0)? -x : x;
}
inline ll gcd(ll a, ll b)
{
if (!b)
return a;
return gcd(b, a % b);
}
inline void form(ll coef, ll af)
{
printf("(");
if (coef < 0 && coef == -1)
printf("-");
if (coef != 1 && coef != -1)
printf("%lld", coef);
printf("x");
if (af > 0)
printf("+");
printf("%lld)", af);
}
int main()
{
freopen("ecuatie.in", "r", stdin);
freopen("ecuatie.out", "w", stdout);
scanf("%lld %lld %lld %lld", &a, &b, &c, &k);
k--;
ll cmmdc = llabs(gcd(llabs(a), gcd(llabs(b), llabs(c))));
a /= cmmdc;
b /= cmmdc;
c /= cmmdc;
for (ll diviz = 1; diviz * diviz <= cmmdc; diviz++)
if (cmmdc % diviz == 0)
{
vctDiviz.pb(diviz);
vctDiviz.pb(-diviz);
if (diviz * diviz != cmmdc)
{
vctDiviz.pb(cmmdc / diviz);
vctDiviz.pb(-cmmdc / diviz);
}
}
ll q1 = -(-b - (ll) sqrt((long double) b * b - 4 * a * c));
ll q2 = -(-b + (ll) sqrt((long double) b * b - 4 * a * c));
ll p1 = 2 * a / gcd(2 * a, llabs(q1));
q1 /= gcd(2 * a, llabs(q1));
ll p2 = 2 * a / gcd(2 * a, llabs(q2));
q2 /= gcd(2 * a, llabs(q2));
for (int i = 0; i < vctDiviz.size(); i++)
{
ll div = vctDiviz[i];
vctSol.pb(mp(mp(p1 * div, q1 * div), mp(p2 * (cmmdc / div), q2 * (cmmdc / div))));
vctSol.pb(mp(mp(p2 * div, q2 * div), mp(p1 * (cmmdc / div), q1 * (cmmdc / div))));
}
sort(vctSol.begin(), vctSol.end());
if (k >= vctSol.size())
printf("-1\n");
else
{
form(vctSol[k].f.f, vctSol[k].f.s);
form(vctSol[k].s.f, vctSol[k].s.s);
printf("\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}