Pagini recente » Cod sursa (job #1161962) | Cod sursa (job #410427) | Cod sursa (job #772317) | Cod sursa (job #1467203) | Cod sursa (job #605995)
Cod sursa(job #605995)
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
long long a,b,c,d,k;
vector <pair <long long,long long> > v;
inline void add(long long x)
{
long long p1=x,p2=a/x;
if ((b+(long long)d)%(2*p2)==0&&c%((b+(long long)d)/(2*p2))==0)
v.push_back(make_pair(p1,(b+d)/(2*p2)));
if (d&&(b-(long long)d)%(2*p2)==0&&c%((b-(long long)d)/(2*p2))==0)
v.push_back(make_pair(p1,(b-d)/(2*p2)));
}
inline void write_sol(long long p1,long long q1)
{
printf("(");
if (p1<0)
{
printf("-");
p1=-p1;
}
if (p1!=1)
printf("%lld",p1);
printf("x");
if (q1>=0)
printf("+");
printf("%lld)",q1);
}
int main()
{
long long i;
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","write_sol",stdout);
scanf("%lld %lld %lld %lld",&a,&b,&c,&k);
d=sqrt(b*b-4*a*c);
if (d<0||d*d!=b*b-4*a*c)
{
printf("-1\n");
return 0;
}
for (i=1;i*i<abs(a);++i)
if (a%i==0)
{
add(i);
add(a/i);
add(-i);
add(-a/i);
}
if (((long long)sqrt(abs(a)))*((long long)sqrt(abs(a)))==abs(a))
{
add(sqrt(abs(a)));
add(-sqrt(abs(a)));
}
sort(v.begin(),v.end());
if (k>v.size())
{
printf("-1\n");
return 0;
}
write_sol(v[k-1].first,v[k-1].second);
write_sol(a/v[k-1].first,c/v[k-1].second);
printf("\n");
return 0;
}