# PBinfo #201 – SubmDiv – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

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 mesajul fara 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

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("submdiv.in");
ofstream fout("submdiv.out");
int n,X,x[100],v[100],m;
int nrsol;
void afis(int n){
	nrsol ++;
	for(int i=1;i<=n;++i)
		fout << v[x[i]] << " ";
	fout << "\n";
}
void back(int k){
	for(int i=x[k-1]+1;i<=n;++i){
		x[k] = i;
		if(k==m)
			afis(k);
		else
			back(k+1);
	}
}
int main(){
	fin >> X >> m;
	n = 0;
	for(int i=1;i<=X;++i)
		if(X%i==0)
			v[++n] = i;
	back(1);
	if(nrsol==0)
		fout << "fara solutie";
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/201)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/201/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-201/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
