Pagini recente » Cod sursa (job #960716) | Cod sursa (job #1233279) | Cod sursa (job #934961) | Cod sursa (job #2224393) | Cod sursa (job #1533015)
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin( "ecuatie.in" ); ofstream fout( "ecuatie.out" );
int a, b, c, k;
void paranteza( int p1, int q1 ) {
fout << "(";
if ( p1 == 1 ) {
} else if ( p1 == -1 ) {
fout << "-";
} else {
fout << p1;
}
fout << "x";
if ( q1 < 0 ) {
fout << "-" << -q1;
} else {
fout << "+" << q1;
}
fout << ")";
}
void afis( int p1, int p2, int q1, int q2 ) {
paranteza( p1, q1 ); paranteza( p2, q2 );
fout << "\n";
}
void solve( int p1, int p2 ) {
double q1, q2;
if ( k == 0 ) return ;
double delta = 1.0 * ( b * b - 4 * p2 * c * p1 );
if ( delta < 0 ) return ;
delta = sqrt( delta );
if ( delta == 0 ) {
q1 = ( 1.0 * b ) / ( 2.0 * p2 );
q2 = ( 1.0 * c ) / q1;
if ( q1 == ( int )q1 && q2 == ( int )q2 ) {
-- k;
if ( k == 0 ) {
afis( p1, p2, ( int )q1, ( int )q2 );
}
}
} else {
q1 = ( 1.0 * b - delta ) / ( 2.0 * p2 );
q2 = ( 1.0 * c ) / q1;
if ( q1 == ( int )q1 && q2 == ( int )q2 ) {
-- k;
if ( k == 0 ) {
afis( p1, p2, ( int )q1, ( int )q2 );
}
}
q1 = ( 1.0 * b + delta ) / ( 2.0 * p2 );
q2 = ( 1.0 * c ) / q1;
if ( q1 == ( int )q1 && q2 == ( int )q2 ) {
-- k;
if ( k == 0 ) {
afis( p1, p2, ( int )q1, ( int )q2 );
}
}
}
}
int main() {
int x;
fin >> a >> b >> c >> k;
if ( a < 0 ) {
for( x = 1; x * x <= -a; ++ x ) {
if ( a % x == 0 ) {
solve( a / x, x );
}
}
for( x = 1; x * x <= -a; ++ x ) {
if ( a % x == 0 ) {
solve( -x, -a / x );
}
}
} else {
for( x = 1; x * x < a; ++ x ) {
if ( a % x == 0 )
solve( -a / x, -x );
}
if ( x * x == a ) {
solve( -x, -x );
++ x;
}
for( x = 1; x * x < a; ++ x ) {
if ( a % x == 0 )
solve( -x, -a / x );
}
for( x = 1; x * x < a; ++ x ) {
if ( a % x == 0 )
solve( x, a / x );
}
if ( x * x == a ) {
solve( x, x );
++ x;
}
for( x = 1; x * x < a; ++ x ) {
if ( a % x == 0 )
solve( a / x, x );
}
}
if ( k > 0 ) {
fout << "-1\n";
}
fin.close();
fout.close();
return 0;
}