Pagini recente » Cod sursa (job #881851) | Cod sursa (job #2531663) | Cod sursa (job #3183469) | Cod sursa (job #308250) | Cod sursa (job #1462352)
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
long long a, b, c, k, i, nr, delta, nr1;
double X1, X2;
struct res{
int p1;
int q1;
int p2;
int q2;
};
res sol[10000];
void f(int d){
long long P1, P2;
double Q1, Q2;
P1 = d;
P2 = a / d;
Q1 = -X1 * d;
Q2 = -X2 * (a / d);
if(Q1 == (int) Q1 && Q2 == (int) Q2){
nr++;
sol[nr].p1 = P1;
sol[nr].q1 = Q1;
sol[nr].p2 = P2;
sol[nr].q2 = Q2;
}
Q1 = -X2 * d;
Q2 = -X1 * (a / d);
if(Q1 == (int) Q1 && Q2 == (int) Q2){
nr++;
sol[nr].p1 = P1;
sol[nr].q1 = Q1;
sol[nr].p2 = P2;
sol[nr].q2 = Q2;
}
}
ifstream fin("ecuatie.in");
ofstream fout("ecuatie.out");
long long modul(long long x){
if(x >= 0){
return x;
}
return -x;
}
int cmp(res a, res b){
if(a.p1 == b.p1){
return a.q1 < b.q1;
}
return a.p1 < b.p1;
}
char semn(int &x){
if(x > 0){
return '+';
}
x = -x;
return '-';
}
int main(){
fin>> a >> b >> c >> k;
delta = b * b - 4 * a * c;
if(sqrt(delta * 1.0) != (int) sqrt(delta * 1.0)){
fout<<"-1\n";
return 0;
}
delta = sqrt(delta * 1.0);
X1 = (- b - delta) * 1.0 / (2 * a);
X2 = (- b + delta) * 1.0 / (2 * a);
for(i = 1; i * i <= modul(a); i++){
if(a % i == 0){
f(i);
f(-i);
f(a / i);
f(-a / i);
}
}
sort(sol + 1, sol + nr + 1, cmp);
for(i = 1; i <= nr; i++){
if(!(sol[i].p1 == sol[i - 1].p1 && sol[i].q1 == sol[i-1].q1)){
nr1++;
}
if(nr1 == k){
if(sol[i].p1 == 1){
fout<<"(x";
}
else{
if(sol[i].p1 == -1){
fout<<"(-x";
}
else{
fout<<"("<<sol[i].p1 <<"x";
}
}
//fout<<"("<<sol[i].p1 <<"x";
if(sol[i].q1 >= 0){
fout<<"+";
}
fout<< sol[i].q1 <<")(";
if(sol[i].p2 == 1){
fout<<"x";
}
else{
if(sol[i].p2 == -1){
fout<<"-x";
}
else{
fout<<sol[i].p2 <<"x";
}
}
if(sol[i].q2 >= 0){
fout<<"+";
}
fout<< sol[i].q2 <<")\n";
return 0;
}
}
if(nr1 < k){
fout<<"-1\n";
}
return 0;
}