Pagini recente » Cod sursa (job #2620518) | Cod sursa (job #1610796) | Cod sursa (job #1418119) | Cod sursa (job #1660332) | Cod sursa (job #3138671)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("calorifer.in");
ofstream cout("calorifer.out");
struct ura{
int exp2, exp3, val;
};
ura v[100000 + 5];
bool cmp( ura a, ura b)
{
if ( a.exp3 < b.exp3 )
return true;
if ( a.exp3 == b.exp3 )
if ( a.exp2 > b.exp2 )
return true;
return false;
}
int cmmdc( int a, int b )
{
int rest;
rest = a % b;
while ( rest != 0 )
{
rest = a % b;
a = b;
b = rest;
}
return a;
}
int main()
{
int i, k, radacina, ant, ok = 1;
cin >> k;
for ( i = 1; i <= k; ++i )
{
cin >> v[i].val;
radacina = v[i].val;
while ( radacina % 2 == 0 || radacina % 3 == 0 )
{
if ( radacina % 2 == 0 )
radacina /= 2, ++v[i].exp2;
if ( radacina % 3 == 0 )
radacina /= 3, ++v[i].exp3;
}
if ( i > 1 )
{
if ( radacina != ant )
ok = 0;
}
ant = radacina;
}
int a, b;
b = v[1].val;
for ( i = 2; i <= k; ++i )
{
a = v[i].val;
b = cmmdc(a, b);
}
if ( b == 1 )
ok = 0;
if ( ok == 0 )
cout << -1 << '\n';
if ( ok == 1 )
{
sort(v + 1, v+ k + 1, cmp);
for ( i = 1; i <= k; ++i )
cout << v[i].val << " ";
}
return 0;
}