Pagini recente » Cod sursa (job #1518035) | Cod sursa (job #2153986) | Cod sursa (job #1624676) | Cod sursa (job #1700989) | Cod sursa (job #998246)
Cod sursa(job #998246)
#include<cmath>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int Nr,nr,i,A,B,C,auxC,Poz,sol[10];
vector < int > v;
vector < int >::iterator it;
void solveeq2(int A,int B,int C)
{
int dint,X1,X2;
double x1,x2,delta=B*B-4*A*C;
nr=0;
if(delta<0) return ;
delta=pow(delta,0.5);
dint=(int)delta;
if(dint*dint!=B*B-4*A*C) return ;
x1=(double)((double)-B-delta)/(2*A);X1=(int)x1;
x2=(double)((double)-B+delta)/(2*A);X2=(int)x2;
if(1LL*X1*X1*A+X1*B+C==0&&auxC%X1==0){nr++;sol[nr]=X1;}
if(1LL*X2*X2*A+X2*B+C==0&&auxC%X2==0){nr++;sol[nr]=X2;}
}
void afispar(int P1,int Q1)
{
printf("(");
if(P1==-1) printf("-x");
else
if(P1==1) printf("x");
else printf("%dx",P1);
if(Q1<0) printf("%d",Q1);
else printf("+%d",Q1);
printf(")");
}
void afis(int P1,int Q1)
{
int P2=A/P1,Q2=C/Q1;
afispar(P1,Q1);
afispar(P2,Q2);
}
int main()
{
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%d",&A);
scanf("%d",&B);
scanf("%d",&C);
auxC=C;
scanf("%d",&Poz);
for(i=1;i*i<A;i++)
if(A%i==0)
{
v.push_back(i);
v.push_back(A/i);
v.push_back(-i);
v.push_back(-A/i);
}
if(i*i==A){v.push_back(i);v.push_back(-i);}
sort(v.begin(),v.end());
Nr=0;
for(it=v.begin();it!=v.end();it++)
{
solveeq2(A/ *it,-B,*it*C);
Nr+=nr;
if(Nr>=Poz)
{
sort(sol+1,sol+nr+1);
if(Nr==Poz) afis(*it,sol[2]);
else afis(*it,sol[1]);
return 0;
}
}
printf("-1\n");
return 0;
}