Pagini recente » Cod sursa (job #1402277) | Cod sursa (job #248100) | Cod sursa (job #2522865) | Cod sursa (job #2861160) | Cod sursa (job #175406)
Cod sursa(job #175406)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define inf 1000000000
#define sMax 35000
long long a,b,c,k,r,delta,l1,l2;
long long d1[sMax],d2[sMax];
long long q,x1,x2,i,sol=0,p1[sMax],p2[sMax],q1[sMax],q2[sMax],ind[sMax];
int comp(const void * n1,const void * n2){
if (p1[*((long*)n1)]<p1[*((long*)n2)])return -1;
else if (p1[*((long*)n1)]>p1[*((long*)n2)])return 1;
else if (q1[*((long*)n1)]<q1[*((long*)n2)]) return -1;
else return 1;
}
int main(){
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf ("%lld %lld %lld %lld",&a,&b,&c,&k);
delta=(long long)b*b-4*a*c;
r=sqrt((long double)delta);
if ((long long)r*r!=delta){printf("-1\n");return 0;}
x1=-b-r;
x2=-b+r;
r=sqrt(a);
q=0;
for (i=1;i<=r;i++)
if (a%i==0){d1[++q]=i;d2[r-q+1]=a/i;}
if (r*r==a){
for (i=r-q+2;i<=r;i++)d1[q+i-r+q-1]=d2[i];
q+=q-1;
}
else {for (i=r-q+1;i<=r;i++)d1[q+i-r+q]=d2[i];q+=q;}
for (i=1;i<=q;i++){
sol++;
p1[sol]=-d1[i];
q1[sol]=x1*d1[i]/(2*a);
p2[sol]=-a/d1[i];
q2[sol]=x2*a/d1[i]/(2*a);
sol++;
p1[sol]=-d1[i];
q1[sol]=x2*d1[i]/(2*a);
p2[sol]=-a/d1[i];
q2[sol]=x1*a/d1[i]/(2*a);
sol++;
p1[sol]=d1[i];
q1[sol]=-x1*d1[i]/(2*a);
p2[sol]=a/d1[i];
q2[sol]=-x2*a/d1[i]/(2*a);
sol++;
p1[sol]=d1[i];
q1[sol]=-x2*d1[i]/(2*a);
p2[sol]=a/d1[i];
q2[sol]=-x1*a/d1[i]/(2*a);
}
for (i=1;i<=sol;i++)ind[i]=i;
qsort(ind+1,sol,sizeof(long long),comp);
for (i=1;i<=sol;i++)
printf("%lld %lld %lld %lld\n",p1[ind[i]],q1[ind[i]],p2[ind[i]],q2[ind[i]]);
return 0;
}