Требуется получить и вывести на экран количество всех возможных различных способов представления этого числа в виде суммы натуральных чисел

то есть, 1 + 2 и 2 + 1 – это один и тот же способ разложения числа Пример:
Введите натуральное число: 4 Количество разложений: 4


Ответы (1 шт):

Автор решения: Harry
unsigned long long p(int n)
{
    if (n < 0) return 0;
    if (n <= 1) return 1;
    unsigned long long sum = 0;
    for(int k = 1, s = 1; (3*k-1)*k/2 <= n; ++k)
    {
        int l = (3*k+1)*k/2;
        int m = (3*k-1)*k/2;
        sum += s*(p(n-l)+p(n-m));
        s = -s;
    }
    return sum;
}

Это - если включать в количество само число (сумма из одного слагаемого). Если не включать - ну, после вычисления вычтите единицу.

Подсказка: Кнут, "Искусство программирования", том 4А.

→ Ссылка