Учитывая три числа n, r и p, вычислим значение n C r mod p. Здесь p — простое число, большее n. Здесь n C r — биномиальный коэффициент .
Пример:
Input: n = 10, r = 2, p = 13 Output: 6 Explanation: 10C2 is 45 and 45 % 13 is 6. Input: n = 6, r = 2, p = 13 Output: 2
Мы обсудили следующие методы в предыдущих постах.
Вычислить n C r % p | Комплект 1 (Введение и решение для динамического программирования)
Вычислить n C r % p | Набор 2 (теорема Лукаса)
В этом посте обсуждается решение на основе теоремы Ферма.
Фон:
Маленькая теорема Ферма и модульное обратное
Маленькая теорема Ферма утверждает, что если p простое число, то для любого целого числа a число a p — a кратно p. В обозначениях модульной арифметики это выражается как:
а р = а (мод р)
Например, если a = 2 и p = 7, 2 7 = 128 и 128 — 2 = 7 × 18 — это целое число, кратное 7.
Если a не делится на p, маленькая теорема Ферма эквивалентна утверждению a p — 1 — 1 — целое число, кратное p, т.е.
а р-1 = 1 (мод р)
Если мы умножим обе стороны на -1 , мы получим.
а р-2 = а -1 (мод р)
Таким образом, мы можем найти модульную инверсию как p-2 .
Исчисление:
We know the formula for nCrnCr = fact(n) / (fact(r) x fact(n-r)) Here fact() means factorial. nCr % p = (fac[n]* modIverse(fac[r]) % p * modIverse(fac[n-r]) % p) % p; Here modIverse() means modular inverse under modulo p.
Ниже приведена реализация вышеуказанного алгоритма. В следующей реализации массив fac [] используется для хранения всех вычисленных факторных значений.
|
Джава
|
python3
|
C #
|
PHP
|
Выход:
Value of nCr % p is 6
Улучшения:
В конкурентном программировании мы можем предварительно вычислить fac [] для данного верхнего предела, чтобы нам не приходилось вычислять его для каждого тестового случая. Мы также можем везде использовать unsigned long long int, чтобы избежать переполнения.
Эта статья предоставлена Nikhil Papisetty . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Последняя теорема Ферма
- Маленькая теорема Ферма
- Вычислить nCr% p | Набор 2 (теорема Лукаса)
- Программа для поиска первых N номеров Ферма
- Проверьте, является ли число Fermat Pseudoprime
- Тест на первичность | Набор 2 (метод Ферма)
- Теорема Никомаху
- Теорема Вильсона
- Теорема Дилворта
- Теорема Миди
- Теорема Россера
- Расширенная теорема Миди
- Теорема Евклида Эйлера
- Теорема Харди-Рамануджана
- Теорема Лагранжа о четырех квадратах
0.00 (0%) 0 votes