Cod sursa(job #285954)
#include <algorithm>
#include <math.h>
using namespace std;
#define DIM 1000005
struct rez {int p1,p2,q1,q2;} sol[DIM];
int a,b,c,k,x1,x2,nr;
double delta;
void print (int val)
{
int i;
if (!val || val>nr)
printf ("-1");
else
{
printf ("(%dx",sol[val].p1);
if (sol[val].q1>0)
printf ("+%d)",sol[val].q1);
else
printf ("%d)",sol[val].q1);
printf ("(%dx",sol[val].p2);
if (sol[val].q2>0)
printf ("+%d)",sol[val].q2);
else
printf ("%d)",sol[val].q2);
}
exit (0);
}
void ecuatie ()
{
int d;
delta=sqrt (b*b-4*a*c);
if ((int)delta!=(float)delta)
print (0);
d=(int)delta;
x1=(-b-d)/(2*a);
x2=(-b+d)/(2*a);
}
void divizori ()
{
int d;
for (d=1; d*d<=a; ++d)
if (a%d==0)
{
sol[++nr].p1=d;
sol[nr].q1=a/d;
sol[nr].p2=-x1*d;
sol[nr].q2=-x2*(a/d);
sol[++nr].p1=-d;
sol[nr].q1=-a/d;
sol[nr].p2=x1*d;
sol[nr].q2=x2*(a/d);
sol[++nr].p1=a/d;
sol[nr].q1=d;
sol[nr].p2=-x1*(a/d);
sol[nr].q2=-x2*d;
sol[++nr].p1=-a/d;
sol[nr].q1=-d;
sol[nr].p2=x1*(a/d);
sol[nr].q2=x2*d;
sol[++nr].p1=d;
sol[nr].q1=a/d;
sol[nr].p2=-x2;
sol[nr].q2=-x1*(a/d);
sol[++nr].p1=-d;
sol[nr].q1=-a/d;
sol[nr].p2=x2*d;
sol[nr].q2=x1*(a/d);
sol[++nr].p1=a/d;
sol[nr].q1=d;
sol[nr].p2=-x2*(a/d);
sol[nr].q2=-x1*d;
sol[++nr].p1=-a/d;
sol[nr].q1=-d;
sol[nr].p2=x2*(a/d);
sol[nr].q2=x1*d;
}
/*if (d*d==a)
{
sol[++nr].p1=d;
sol[nr].q1=a/d;
sol[nr].p2=-x1*d;
sol[nr].q2=-x2*(a/d);
}*/
}
int cmp (rez a,rez b)
{
return a.p1<b.p1 || (a.p1==b.p1 && a.q1<a.q2);
}
void afis ()
{
int i;
for (i=1; i<=nr; ++i)
printf ("%d %d %d %d\n",sol[i].p1,sol[i].q1,sol[i].p2,sol[i].q2);
}
int main ()
{
freopen ("ecuatie.in","r",stdin);
freopen ("ecuatie.out","w",stdout);
scanf ("%d%d%d%d",&a,&b,&c,&k);
ecuatie ();
divizori ();
sort (sol+1,sol+nr+1,cmp);
// print (k);
afis ();
return 0;
}