home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- * CH05_12.C Calcul de C(n,m) *
- * *
- * nombre de combinaisons de n objets m α m *
- * ou: nombre de groupes de m objets diffΘrents qu'on peut *
- * former avec n objets sans tenir compte de l'ordre *
- * et sans rΘpΘtitions. *
- * *
- ** Written by Thad Smith III, Boulder County, CO. ********************
- * Released to the Public Domain 10/14/91. ( mois/jour/an) *
- * *
- * La prΘsentation est simplifiΘe pour tenir compte de notre niveau *
- * actuel de connaεssance. *
- * *
- * On suppose que n >= 0, 0 <= m <= n. *
- * Calculer un nombre de combinaisons pour des valeurs ΘlevΘes de n *
- * peut entrainer une sortie du domaine de dΘfinition. *
- * La premiΦre version n'entraεnera pas de sortie si: *
- * C(n, m) * (n- m+ 1) < ULONG_MAX = 4 294 967 295 *
- * La seconde version n'entraεnera pas de sortie si C(n,m)< ULONG_MAX *
- * mais elle est plus complexe. *
- *********************************************************************/
-
- #include<stdio.h>
-
- main( void)
- {
- unsigned long cnm = 1UL;
- int i, f, n, m;
-
- printf(" Entrez la valeur de n: ");
- scanf("%d", &n);
- while( getchar() != '\n');
-
- printf(" Entrez la valeur de m: ");
- scanf("%d", &m);
- while( getchar() != '\n');
-
-
- /* premiΦre version de Thad Smith. */
- /*
- if (m * 2 > n) m = n- m;
- for (i= 1 ; i <= m; n--, i++)
- cnm = cnm * n / i;
- */
-
- /* seconde version de Thad Smith. */
-
- if ( m* 2 > n) m= n- m;
- for (i= 1 ; i <= m; n--, i++)
- {
- if ((f= n) % i == 0)
- f /= i;
- else cnm /= i;
- cnm *= f;
- }
- printf(" C( %d, %d)= %lu", n, m, cnm);
- }
-
-