Вопрос состоял в том, чтобы вычислить количество биномиальных коэффициентов, не делящихся на заданное простое число. Например:
Для
num = 5
иprime = 5
вывод должен быть:countingBinomialCoefficient(num, prime) = 17 N = 0: [1] N = 1: [1, 1] N = 2: [1, 2, 1] N = 3: [1, 3, 3, 1] N = 4: [1, 4, 6, 4, 1] N = 5: [1, 5, 10, 10, 5, 1]
В приведенном выше примере только 5, 10, 10, 5 делятся только из 21 чисел. Таким образом, результат равен 17.
Код, который я написал, выглядит следующим образом:
long countingBinomialCoefficient(int num, int prime) {
long count = 0;
for (int i = 0; i <= num; i++) {
long nCk = 1;
for (int j = 0; j <= i; j++) {
if (nCk % prime != 0) count++;
nCk = nCk * (i - j) / (j + 1);
}
}
return count;
}
Правильный вывод для двух случаев:
1. countingBinomialCoefficient(5, 5) = 17
и
2.countingBinomialCoefficient(5, 7) = 21
Но он говорит, что лимит времени (= 3000 мс) превышен в случае
countingBinomialCoefficient(999999999, 7), и в этом случае вывод должен быть 2129970655314432
есть ли ошибка в моем коде? Есть ли другие более короткие методы для этого? Пожалуйста помоги. Заранее спасибо.
O(n^2)
code сn=1b
, это может занять некоторое время... - person Yossi Vainshtein   schedule 07.05.2017