nCr com Fatoriais Pré-calculados
Conte combinações módulo um primo.
nCr com Fatoriais Pré-calculados é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.
Contagem de combinações
Muitos problemas perguntam de quantas maneiras é possível escolher r itens de n, escrito como nCr. As competições pedem essa contagem sob um módulo primo. 🧮
A fórmula do fatorial
A fórmula clássica é nCr igual a n fatorial dividido por r fatorial vezes n menos r fatorial. O problema é que a divisão sob um módulo não é direta.
# nCr = n! / (r! * (n-r)!)Os fatoriais crescem demais
Um único fatorial cresce astronomicamente, portanto calcule cada um módulo p. Isso mantém todos os valores pequenos, enquanto a fórmula continua exata sob o módulo.
Pré-calcule todos os fatoriais
Construa uma matriz de fatoriais uma única vez, até o maior n de que você precisa. Cada entrada é a anterior multiplicada pelo índice, calculada módulo p à medida que você avança.
fact[i] = fact[i-1] * i % MODA divisão precisa de inversos
A fórmula divide por dois fatoriais, portanto você precisa dos inversos modulares deles. Lembre-se: o inverso transforma a divisão em uma multiplicação simples.
Calcule o inverso do maior fatorial
Calcule o inverso do maior fatorial apenas uma vez usando Fermat, com pow e o expoente p menos 2. Essa única chamada inicia o restante do processo.
inv_fact[n] = pow(fact[n], MOD - 2, MOD)Calcule os inversos de trás para frente
Obtenha os outros inversos de fatoriais em uma única passagem para trás, cada um a partir do próximo multiplicado pelo índice. Não são necessárias chamadas adicionais a pow.
inv_fact[i] = inv_fact[i+1] * (i+1) % MODMonte nCr
Agora, nCr é simplesmente fact[n] multiplicado por inv_fact[r] e por inv_fact[n menos r], tudo módulo p. São três consultas e duas multiplicações por consulta.
C = fact[n] * inv_fact[r] % MOD * inv_fact[n-r] % MODCada consulta é instantânea
Depois do pré-cálculo, cada resposta de combinação é obtida em O(1). É por isso que esse padrão é excelente quando um problema pede milhares de valores de nCr.
Trate os casos extremos
Se r for negativo ou maior que n, a resposta será 0. Verifique esse limite primeiro para nunca acessar uma posição fora das suas matrizes de fatoriais.
if r < 0 or r > n: return 0Dimensione as matrizes com folga
Defina o tamanho da matriz como o maior n entre todas as consultas, mais uma pequena margem. Um limite pequeno demais é uma causa comum de erros de índice aqui.
N = 200005Verificação rápida
Depois do pré-cálculo, qual é a velocidade de uma consulta nCr?
Revisão
Você pré-calcula os fatoriais e seus inversos uma vez e, depois, responde a cada nCr em O(1) com três consultas. Verifique os limites de r e dimensione as matrizes com tamanho suficiente. 🏆
Perguntas Frequentes
A aula “nCr com Fatoriais Pré-calculados” é grátis?
Sim — o texto completo de “nCr com Fatoriais Pré-calculados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.
O que vou aprender em “nCr com Fatoriais Pré-calculados”?
Conte combinações módulo um primo. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Coding Interview Prep?
Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “nCr com Fatoriais Pré-calculados”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Coding Interview Prep?
Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Trabalhando Módulo um Primo
- exponenciação Modular Rápida
- Inverso Modular por Fermat
- nCr com Fatoriais Pré-calculados