Я попытался с помощью функции NCM, чтобы найти все комбинации, но и для больших чисел он неНайти количество возможных триплетов (включая дубликаты) элементов массива в линейном времени?
int fact(int num)
{
if (num == 1 || num == 0)
return 1;
return num * fact(num-1);
}
int nCm(int num, int base)
{
int result;
return result = fact(num)/(fact(num - base)*fact(base));
}
где base = 3
и Num может быть что угодно, так что при больших пит это не удается. Я не могу использовать библиотеку BigInteger так, пожалуйста, помогите
Вы можете вычислить 'n!/(N-b)!' Без вычисления 'n!'. Кроме того, вы можете вычислять факториалы итеративно, а не рекурсивно. Наконец, если 'num' может быть * anything * (например, число Грэма), вы обречены на провал. – Beta
Если у вас действительно есть, вы можете создать свой собственный тип, имея возможность удерживать номер на сколько байтов вам нужно. Это зависит от вас. –