Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream fin("sirpie.in");
- ofstream fout("sirpie.out");
- int x[15], y[11], n;
- int cmmdc(int a, int b) {
- while (b != 0) {
- int r = a % b;
- a = b;
- b = r;
- }
- return a;
- }
- void afisare(int k) {
- for (int i = 1; i <= k; i++) {
- fout << y[x[i]] << " ";
- }
- fout << '\n';
- }
- int valid(int k) {
- for (int i = 1; i < k; i++) {
- if (x[i] == x[k]) {
- return 0;
- }
- }
- if (k > 1) {
- if (cmmdc(y[x[k]], y[x[k - 1]]) == 1) {
- return 1;
- } else {
- return 0;
- }
- }
- return 1;
- }
- void bkt() {
- int k = 1;
- x[k] = 0;
- while (k) {
- if (x[k] < n) {
- x[k]++;
- if (valid(k)) {
- if (k == n) {
- afisare(k);
- } else {
- x[++k] = 0;
- }
- }
- } else {
- k--;
- }
- }
- }
- int main() {
- fin >> n;
- for (int i = 1; i <= n; i++) {
- fin >> y[i];
- }
- for (int i = 1; i < n; i++) {
- for (int j = i + 1; j <= n; j++) {
- if (y[i] > y[j]) {
- swap(y[i], y[j]);
- }
- }
- }
- bkt();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement