Cod sursa(job #3138671)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 21 iunie 2023 10:48:46
Problema Litere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#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;
}