#include <iostream>
#include <vector>
void findDivisors(int N, int M, std::vector<int>& current) {
// Если N == 1, значит мы нашли разбиение
if (N == 1) {
for (int i = 0; i < current.size(); i++) {
std::cout << current[i];
if (i < current.size() - 1) std::cout << " * ";
}
std::cout << std::endl;
return;
}
// Проходим по делителям, начиная с M
for (int i = M; i <= N; i++) {
if (N % i == 0) { // Проверка, что i является делителем N
current.push_back(i);
findDivisors(N / i, i, current); // Рекурсивно разбиваем N / i
current.pop_back();
}
}
}
int main() {
int N, M;
std::cout << "Введите число N: ";
std::cin >> N;
std::cout << "Введите минимальный делитель M: ";
std::cin >> M;
std::vector<int> current;
findDivisors(N, M, current);
return 0;
}
#include <iostream>
#include <vector>
void findPartitions(int n, int M, std::vector<int>& current) {
if (n == 0) {
for (size_t i = 0; i < current.size(); ++i) {
std::cout << current[i];
if (i != current.size() - 1)
std::cout << " + ";
}
std::cout << std::endl;
return;
}
for (int i = M; i <= n; ++i) {
current.push_back(i);
findPartitions(n - i, i, current);
current.pop_back();
}
}
int main() {
int N, M;
std::cout << "Введите N и M: ";
std::cin >> N >> M;
if (N <= 0 || M <= 0 || M > N) {
std::cout << "Некорректные значения N и M." << std::endl;
return 1;
}
std::cout << "Разбиения числа " << N << " на числа не меньшие " << M << ":" << std::endl;
std::vector<int> currentPartition;
findPartitions(N, M, currentPartition);
return 0;
}