У меня была попытка сделать это с помощью комбинаторики т.е. вычисляем кол-во способов разложить на сумму потом используя это делать разложение на множители т.е. тупо проверять делиться ли число если да то на сколько слагаемых можно разложить делители и так далее в цикле, но проблема возникает ещё на уровне подсчёта слагаемых. Я пытался реализовать рекурсивный алгоритм, но что-то в нем не так, или я просто не догоняю.
Код:
unsigned long sumNum(unsigned int n)
{
int i;
unsigned long count=1;
if (n==2) return 1;
for (i=1; i<n; ++i)
count+=sumNum(n-i)+sumNum(i);
return count;
}
А может сам подход ошибочний.
Буду рад любым идеям.