355
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 ≤ 61 ≤ x ≤ 1000- dacă nu există soluţie, pe prima linie a fişierului
submdiv.outse 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;
}
Comentarii