ну факториал можно упростить в синтаксисе до
result *= i;
или до макаронины вида
for (int i = n; i > 0; result *= i--);
далее у вас не совсем правильный prime - 25 является простым? (i == 4)
еслиб все было так легко - не былоб так трудно их считать
но вообще праймы то как раз и можно опустить и расчитывать их надо один раз, а не при каждом вызове decomp (ile или ress?). просто создайте где-то функцию-инициализатор массива праймов со 110 макаронинами и вызовите её один раз допустим в main или как-то ещё если не надо всегда но надо при использовании хотябы раз
а да и ещё зачем у вас деления в обоих if в decomp? если нет остатка значит одна ветка ИНАЧЕ другая, не надо дважды одно и тоже проверять