Pagini recente » Cod sursa (job #2427655) | Cod sursa (job #3198450) | Cod sursa (job #1086371) | Cod sursa (job #938219) | Cod sursa (job #1846506)
#include <fstream>
#include <cmath>
#include <algorithm>
#define nmax 10000
using namespace std;
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
struct solut{int p1,p2,q1,q2;};
solut v[nmax];
int n,sol;
int a,b,c,d,t,p,r[nmax];
int cmmdc(int a,int b)
{
if (b==0)
return a;
return cmmdc(b,a%b);
}
bool comp(const solut &a,const solut &b)
{
if (a.p1!=b.p1)
return a.p1<b.p1;
return a.q1<b.q1;
}
void adding(int p1,int p2)
{
int i,q1,q2;
for (i=1;i<=n;i++) {
q1=r[i];
q2=c/r[i];
if (p1*q2+p2*q1==b) {
sol++;
v[sol].p1=p1;
v[sol].p2=p2;
v[sol].q1=q1;
v[sol].q2=q2;
}
}
}
void write(int p,int q)
{
g<<'(';
if (p==-1)
g<<'-';
if (p!=1&p!=-1)
g<<p;
g<<'x';
if (q>=0)
g<<'+'<<q;
else
g<<'-'<<-q;
g<<')';
}
int main()
{
f>>a>>b>>c>>p;
d=b*b-4*a*c;
if (d<0||(abs(sqrt(double(d))*sqrt(double(d))-d)>0.000001)) {
g<<-1;
return 0;
}
int p1,p2,i=max(c,-c);
for (p1=1;p1*p1<=i;p1++)
if (c%p1==0) {
r[++n]=p1;
r[++n]=-p1;
if (p1!=i/p1) {
r[++n]=i/p1;
r[++n]=-i/p1;
}
}
for (p1=1;p1*p1<=a;p1++)
if (a%p1==0) {
p2=a/p1;
adding(p1,p2);
adding(-p1,-p2);
if (p1!=p2) {
adding(p2,p1);
adding(-p2,-p1);
}
}
sort(v+1,v+sol+1,comp);
if (p>sol) {
g<<-1;
return 0;
}
write(v[p].p1,v[p].q1);
write(v[p].p2,v[p].q2);
return 0;
}