Pagini recente » Cod sursa (job #884777) | Cod sursa (job #3249921) | Cod sursa (job #995547) | Cod sursa (job #575104) | Cod sursa (job #1965054)
#include<fstream>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std;
ifstream fin("ecuatie.in");
ofstream fout("ecuatie.out");
long long a,b,c,k,d,x,q,p,aux, an,am, imp, nn, mm;
long long i, aux1;
long long m,n,el;
vector <pair<long long, long long> > v;
long long cmmdc(long long n, long long m)
{
long long r;
while(m>0)
{
r=n%m;
n=m;
m=r;
}
return n;
}
void afis(long long p, long long q)
{
if(p==1)
fout<<"("<<"x";
else
if(p==-1)
fout<<"("<<"-x";
else
fout<<"("<<p<<"x";
if(q<0)
fout<<"-"<<-q<<")";
else
fout<<"+"<<q<<")";
}
int main()
{
fin>>a>>b>>c>>k;
d=b*b-4*a*c;
n=-b-sqrt(d);
m=-b+sqrt(d);
if(n<0)
nn=-n;
else
nn=n;
if(m<0)
mm=-m;
else
mm=m;
imp=a*2;
if(imp<0)
imp=-imp;
an=2*a/cmmdc(nn , imp);
am=2*a/cmmdc(mm , imp);
imp=2*a;
if(a<0)
{
aux=a;
a=-a;
}
else
aux=a;
for(i=1;i*i<=a;i++)
if(a%i==0)
{
if(i%an==0&&(a/i)%am==0)
{
v.push_back(make_pair(i, n*i/imp));
v.push_back(make_pair(-i, -n*i/imp));
}
if(i%am==0&&m!=n&&(a/i)%an==0)
{
v.push_back(make_pair(i, m*i/imp));
v.push_back(make_pair(-i, -m*i/imp));
}
if(i!=a/i)
{
if((a/i)%an==0&&i%am==0)
{
v.push_back(make_pair(a/i, n*a/i/imp));
v.push_back(make_pair(-a/i, -n*a/i/imp));
}
if((a/i)%am==0&&m!=n&&i%an==0)
{
v.push_back(make_pair(a/i, m*a/i/imp));
v.push_back(make_pair(-a/i, -m*a/i/imp));
}
}
}
a=aux;
if(k==0||k>v.size())
{
fout<<-1;
return 0;
}
sort(v.begin(), v.end());
p=v[k-1].first;
q=v[k-1].second;
afis(p, q);
if(q/p*imp==n)
el=m;
else
el=n;
p=a/p;
q=el*p/imp;
afis(p, q);
fin.close();
fout.close();
return 0;
}