#include <iostream>
using namespace std;
void loadNumbers(int v_how_many, int *numbers);
void setLargestCommonDivisors(int v_how_many, int *numbers, int *largest_common_divisors, int *basic_number_divisors);
void sortDivisors(int *largest_common_divisors, int how_many, int *numbers);
void showNumbers(int *numbers, int v_how_many);
int main()
{
int basic_number_divisors[36] = {1, 2, 3, 4, 5, 6, 7, 9, 10, 12, 14, 15, 18, 20, 21, 28, 30, 35, 36, 42, 45, 60, 63, 70, 84, 90, 105, 126, 140, 180, 210, 252, 315, 420, 630, 1260};
int how_many{0};
cin >> how_many;
int *numbers = new int[how_many];
int *largest_common_divisors = new int[how_many];
loadNumbers(how_many, numbers);
setLargestCommonDivisors(how_many, numbers, largest_common_divisors, basic_number_divisors);
sortDivisors(largest_common_divisors, how_many, numbers);
delete [] largest_common_divisors;
showNumbers(numbers, how_many);
delete [] numbers;
return 0;
}
void loadNumbers(int v_how_many, int *numbers)
{
for (int i = 0; i < v_how_many; i++)
{
cin >> *numbers;
numbers++;
}
}
void setLargestCommonDivisors(int v_how_many, int *numbers, int *largest_common_divisors, int *basic_number_divisors)
{
int counter{0};
for (int i = 0; i < v_how_many; i++)
{
counter=0;
for (int j = 1; j <= 36; j++)
{
if (*numbers == *basic_number_divisors)
{
*largest_common_divisors = *basic_number_divisors;
break;
}
else if (*numbers < *basic_number_divisors)
{
break;
}
else if (*numbers % *basic_number_divisors == 0)
{
*largest_common_divisors = *basic_number_divisors;
}
basic_number_divisors++;
counter++;
}
basic_number_divisors-=counter;
numbers++;
largest_common_divisors++;
}
}
void sortDivisors(int *largest_common_divisors, int how_many, int *numbers)
{
int temp{0};
int temp_number{0};
for (int i = 1; i <= (how_many); i++)
{
for (int j = 1; j <= (how_many - 1); j++)
{
largest_common_divisors = largest_common_divisors + j;
numbers = numbers + j;
if (*(largest_common_divisors - 1) < *largest_common_divisors)
{
temp = *(largest_common_divisors - 1);
*(largest_common_divisors - 1) = *largest_common_divisors;
*largest_common_divisors = temp;
temp_number = *(numbers - 1);
*(numbers - 1) = *numbers;
*numbers = temp_number;
}
else if (*(largest_common_divisors - 1) == *largest_common_divisors)
{
if (*(numbers - 1) > *numbers)
{
temp_number = *(numbers - 1);
*(numbers - 1) = *numbers;
*numbers = temp_number;
}
}
largest_common_divisors = largest_common_divisors - j;
numbers = numbers - j;
}
}
}
void showNumbers(int *numbers, int v_how_many)
{
for (int i = 0; i < v_how_many; i++)
{
cout << *numbers << " ";
numbers++;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgbG9hZE51bWJlcnMoaW50IHZfaG93X21hbnksIGludCAqbnVtYmVycyk7CnZvaWQgc2V0TGFyZ2VzdENvbW1vbkRpdmlzb3JzKGludCB2X2hvd19tYW55LCBpbnQgKm51bWJlcnMsIGludCAqbGFyZ2VzdF9jb21tb25fZGl2aXNvcnMsIGludCAqYmFzaWNfbnVtYmVyX2Rpdmlzb3JzKTsKdm9pZCBzb3J0RGl2aXNvcnMoaW50ICpsYXJnZXN0X2NvbW1vbl9kaXZpc29ycywgaW50IGhvd19tYW55LCBpbnQgKm51bWJlcnMpOwp2b2lkIHNob3dOdW1iZXJzKGludCAqbnVtYmVycywgaW50IHZfaG93X21hbnkpOwoKaW50IG1haW4oKQp7CiAgICBpbnQgYmFzaWNfbnVtYmVyX2Rpdmlzb3JzWzM2XSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA5LCAxMCwgMTIsIDE0LCAxNSwgMTgsIDIwLCAyMSwgMjgsIDMwLCAzNSwgMzYsIDQyLCA0NSwgNjAsIDYzLCA3MCwgODQsIDkwLCAxMDUsIDEyNiwgMTQwLCAxODAsIDIxMCwgMjUyLCAzMTUsIDQyMCwgNjMwLCAxMjYwfTsKICAgIGludCBob3dfbWFueXswfTsKCiAgICBjaW4gPj4gaG93X21hbnk7CgogICAgaW50ICpudW1iZXJzID0gbmV3IGludFtob3dfbWFueV07CiAgICBpbnQgKmxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzID0gbmV3IGludFtob3dfbWFueV07CgoKICAgIGxvYWROdW1iZXJzKGhvd19tYW55LCBudW1iZXJzKTsKICAgIHNldExhcmdlc3RDb21tb25EaXZpc29ycyhob3dfbWFueSwgbnVtYmVycywgbGFyZ2VzdF9jb21tb25fZGl2aXNvcnMsIGJhc2ljX251bWJlcl9kaXZpc29ycyk7CiAgICBzb3J0RGl2aXNvcnMobGFyZ2VzdF9jb21tb25fZGl2aXNvcnMsIGhvd19tYW55LCBudW1iZXJzKTsKICAgIGRlbGV0ZSBbXSBsYXJnZXN0X2NvbW1vbl9kaXZpc29yczsKICAgIAogICAgc2hvd051bWJlcnMobnVtYmVycywgaG93X21hbnkpOwogICAgZGVsZXRlIFtdIG51bWJlcnM7CgoKICAgIHJldHVybiAwOwp9Cgp2b2lkIGxvYWROdW1iZXJzKGludCB2X2hvd19tYW55LCBpbnQgKm51bWJlcnMpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdl9ob3dfbWFueTsgaSsrKQogICAgewogICAgICAgIGNpbiA+PiAqbnVtYmVyczsKICAgICAgICBudW1iZXJzKys7CiAgICB9Cn0KCnZvaWQgc2V0TGFyZ2VzdENvbW1vbkRpdmlzb3JzKGludCB2X2hvd19tYW55LCBpbnQgKm51bWJlcnMsIGludCAqbGFyZ2VzdF9jb21tb25fZGl2aXNvcnMsIGludCAqYmFzaWNfbnVtYmVyX2Rpdmlzb3JzKQp7CiAgICBpbnQgY291bnRlcnswfTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZfaG93X21hbnk7IGkrKykKICAgIHsKICAgICAgICBjb3VudGVyPTA7CgogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IDM2OyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoKm51bWJlcnMgPT0gKmJhc2ljX251bWJlcl9kaXZpc29ycykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKmxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzID0gKmJhc2ljX251bWJlcl9kaXZpc29yczsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCpudW1iZXJzIDwgKmJhc2ljX251bWJlcl9kaXZpc29ycykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoKm51bWJlcnMgJSAqYmFzaWNfbnVtYmVyX2Rpdmlzb3JzID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICpsYXJnZXN0X2NvbW1vbl9kaXZpc29ycyA9ICpiYXNpY19udW1iZXJfZGl2aXNvcnM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJhc2ljX251bWJlcl9kaXZpc29ycysrOwogICAgICAgICAgICBjb3VudGVyKys7CiAgICAgICAgfQoKICAgICAgICBiYXNpY19udW1iZXJfZGl2aXNvcnMtPWNvdW50ZXI7CiAgICAgICAgbnVtYmVycysrOwogICAgICAgIGxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzKys7CiAgICB9Cn0KCnZvaWQgc29ydERpdmlzb3JzKGludCAqbGFyZ2VzdF9jb21tb25fZGl2aXNvcnMsIGludCBob3dfbWFueSwgaW50ICpudW1iZXJzKQp7CiAgICBpbnQgdGVtcHswfTsKICAgIGludCB0ZW1wX251bWJlcnswfTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSAoaG93X21hbnkpOyBpKyspCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gKGhvd19tYW55IC0gMSk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzID0gbGFyZ2VzdF9jb21tb25fZGl2aXNvcnMgKyBqOwogICAgICAgICAgICBudW1iZXJzID0gbnVtYmVycyArIGo7CgogICAgICAgICAgICBpZiAoKihsYXJnZXN0X2NvbW1vbl9kaXZpc29ycyAtIDEpIDwgKmxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ZW1wID0gKihsYXJnZXN0X2NvbW1vbl9kaXZpc29ycyAtIDEpOwogICAgICAgICAgICAgICAgKihsYXJnZXN0X2NvbW1vbl9kaXZpc29ycyAtIDEpID0gKmxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzOwogICAgICAgICAgICAgICAgKmxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzID0gdGVtcDsKCiAgICAgICAgICAgICAgICB0ZW1wX251bWJlciA9ICoobnVtYmVycyAtIDEpOwogICAgICAgICAgICAgICAgKihudW1iZXJzIC0gMSkgPSAqbnVtYmVyczsKICAgICAgICAgICAgICAgICpudW1iZXJzID0gdGVtcF9udW1iZXI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKCoobGFyZ2VzdF9jb21tb25fZGl2aXNvcnMgLSAxKSA9PSAqbGFyZ2VzdF9jb21tb25fZGl2aXNvcnMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICgqKG51bWJlcnMgLSAxKSA+ICpudW1iZXJzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRlbXBfbnVtYmVyID0gKihudW1iZXJzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgKihudW1iZXJzIC0gMSkgPSAqbnVtYmVyczsKICAgICAgICAgICAgICAgICAgICAqbnVtYmVycyA9IHRlbXBfbnVtYmVyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBsYXJnZXN0X2NvbW1vbl9kaXZpc29ycyA9IGxhcmdlc3RfY29tbW9uX2Rpdmlzb3JzIC0gajsKICAgICAgICAgICAgbnVtYmVycyA9IG51bWJlcnMgLSBqOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzaG93TnVtYmVycyhpbnQgKm51bWJlcnMsIGludCB2X2hvd19tYW55KQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZfaG93X21hbnk7IGkrKykKICAgIHsKICAgICAgICBjb3V0IDw8ICpudW1iZXJzIDw8ICIgIjsKICAgICAgICBudW1iZXJzKys7CiAgICB9Cn0=