Cerinţa
Să se determine toate submulţimile cu m
elemente ale mulţimii divizorilor unui număr natural x
dat.
Date de intrare
Fişierul de intrare submdiv.in
conţine pe prima linie numerele x
şi m
,cu semnificaţia din enunţ.
Date de ieşire
Fişierul de ieşire submdiv.out
va conţine pe fiecare linie câte o submulţime determinată. Aceste submulţimi for fi afişate în ordine lexicografică. Pentru fiecare submulţime se vor afişa elementele în ordine crescătoare, separate printr-un spaţiu.
Restricţii şi precizări
1 ≤ m ≤ 6
1 ≤ x ≤ 1000
- dacă nu există soluţie, pe prima linie a fişierului
submdiv.out
se va afişa mesajulfara solutie
Exemplu
submdiv.in
45 4
submdiv.out
1 3 5 9 1 3 5 15 1 3 5 45 1 3 9 15 1 3 9 45 1 3 15 45 1 5 9 15 1 5 9 45 1 5 15 45 1 9 15 45 3 5 9 15 3 5 9 45 3 5 15 45 3 9 15 45 5 9 15 45
#include <bits/stdc++.h> using namespace std; ifstream cin("submdiv.in"); ofstream cout("submdiv.out"); int n , m , x[20] , a[20] , p , cnt; void afisare() { for(int i = 1 ; i <= m ; i++) cout << a[x[i]] << " "; cout << '\n'; cnt++; } void back(int k) { for(int i = x[k - 1] + 1 ; i <= p ; i++)///se iau de la anterior + 1 { x[k] = i; if(k == m) afisare();///daca s au pus m else back(k + 1); } } int main() { cin >> n >> m; for(int i = 1 ; i <= n ; i++) if(n % i == 0) a[++p] = i; back(1); if(cnt == 0) cout << "fara solutie"; return 0; }