aboutsummaryrefslogtreecommitdiff
path: root/c/wip/053-combinatoric-selections.c
blob: 9006f5aa0c3784fa14a9b6e99d209c62bfe87f7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>


typedef long long unsigned int Natural;

Natural factorial(Natural n)
{
    if (n == 1 || n == 0) return 1;
    else return n * factorial(n - 1);
}

Natural combination(Natural n, Natural r)
{
    if (r > n) exit(1);
    Natural num = 0;
    /* for (Natural i = 0; i < r - 1; i++) */
    /*     num *= n - i; */
    /* return num / factorial(r); */
    /* if (factorial(r) * factorial(n - r) == 0) return 0; */
    return (factorial(n) / (factorial(r) * factorial(n - r)));
    /* return  (factorial(r) * factorial(n - r)); */
}

int main(void)
{
    printf("10! = %llu\n", factorial(10));
    printf("23! = %llu\n", factorial(23));
    printf("(23 - 10)! = %llu\n", factorial(23 - 10));
    int counter = 0;
    Natural comb = 0, n, r;
    /* for (n = 1; n <= 24; n++) */
    /*     for (r = 1; r <= n; r++) { */
    /*         comb = combination(n, r); */
    /*         if (comb > 1000000) { */
    /*             counter++; */
    /* comb = combination(23, 10); */
                printf("%llu C %llu = %llu\n", n, r, comb);
            /* } */
        /* } */
    printf("counter = %d", counter);
    return 0;
}