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 % MODLa 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) % MODAssembler 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] % MODChaque 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 0Pré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 = 200005Vé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
- Calculer modulo un nombre premier
- Exponentiation modulaire rapide
- Inverse modulaire par Fermat
- nCr avec des factorielles précalculées