0Pricing
Competitive Programming Academy · Leçon

nCr avec des factorielles précalculées

Compter les combinaisons modulo un nombre premier

nCr avec des factorielles précalculées est une leçon Competitive Programming Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Competitive Programming Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Competitive Programming Academy comprend 4 leçons au total.

Compter les combinaisons

De nombreux problèmes demandent combien de façons il existe de choisir r éléments parmi n, ce qui s’écrit nCr. Les concours demandent ce nombre avec un modulo premier. 🧮

La formule avec les factorielles

La formule classique est nCr égal à n factorielle divisé par r factorielle multiplié par n moins r factorielle. Le problème vient de la division avec un modulo.

# nCr = n! / (r! * (n-r)!)

Les factorielles explosent

Une seule factorielle augmente de façon astronomique : prenez donc chacune modulo p. Chaque valeur reste ainsi petite, tandis que la formule demeure exacte avec ce modulo.

Précalculer toutes les factorielles

Construisez une fois un tableau de factorielles jusqu’au plus grand n dont vous avez besoin. Chaque élément est le précédent multiplié par l’indice, puis réduit modulo p.

fact[i] = fact[i-1] * i % MOD

La division nécessite des inverses

La formule divise par deux factorielles : vous avez donc besoin de leurs inverses modulaires. Souvenez-vous que l’inverse transforme la division en une multiplication simple.

Inverser la plus grande factorielle

Calculez une seule fois l’inverse de la plus grande factorielle avec Fermat, en utilisant pow avec l’exposant p - 2. Cet unique appel permet d’obtenir tous les autres.

inv_fact[n] = pow(fact[n], MOD - 2, MOD)

Calculer les inverses en remontant

Obtenez les autres inverses de factorielles en un seul passage vers l’arrière, chacun à partir du suivant multiplié par l’indice. Aucun appel supplémentaire à pow n’est nécessaire.

inv_fact[i] = inv_fact[i+1] * (i+1) % MOD

Assembler nCr

À présent, nCr est simplement fact[n] multiplié par inv_fact[r], puis par inv_fact[n moins r], le tout modulo p. Trois accès et deux multiplications par requête.

C = fact[n] * inv_fact[r] % MOD * inv_fact[n-r] % MOD

Chaque requête est instantanée

Après le précalcul, chaque réponse de combinaison s’obtient en O(1). C’est pourquoi cette méthode est idéale lorsqu’un problème demande des milliers de valeurs nCr.

Gérer les cas particuliers

Si r est négatif ou supérieur à n, la réponse vaut 0. Vérifiez d’abord cette condition afin de ne jamais accéder à un indice en dehors de vos tableaux de factorielles.

if r < 0 or r > n: return 0

Prévoir des tableaux suffisamment grands

Définissez la taille de votre tableau comme le n maximal de toutes les requêtes, avec une petite marge. Une limite trop petite provoque souvent des erreurs d’indice ici.

N = 200005

Vérification rapide

Après le précalcul, quelle est la vitesse d’une requête nCr ?

Récapitulatif

Vous précalculez une fois les factorielles et leurs inverses, puis répondez à chaque requête nCr en O(1) avec trois accès. Vérifiez les limites de r et prévoyez des tableaux assez grands. 🏆

Questions Fréquemment Posées

La leçon « nCr avec des factorielles précalculées » est-elle gratuite ?

Oui — le texte complet de « nCr avec des factorielles précalculées » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Competitive Programming Academy, passe à CoddyKit PRO. Le cours Competitive Programming Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « nCr avec des factorielles précalculées » ?

Compter les combinaisons modulo un nombre premier Tu pratiques Competitive Programming Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Competitive Programming Academy ?

Aucune expérience préalable n'est requise. Competitive Programming Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « nCr avec des factorielles précalculées » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Competitive Programming Academy ?

Oui. Chaque leçon Competitive Programming Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Calculer modulo un nombre premier
  2. Exponentiation modulaire rapide
  3. Inverse modulaire par Fermat
  4. nCr avec des factorielles précalculées
← Retour à Competitive Programming Academy