summaryrefslogtreecommitdiff
path: root/libk/src/math/fact.c
blob: a146e4d682a36e296972646d5b644e2e3548f283 (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
#include <math.h>

static unsigned int FACT_TABLE[] = {
    1,          // 0
    1,          // 1
    2,          // 2
    6,          // 3
    24,         // 4
    120,        // 5
    720,        // 6
    5040,       // 7
    40320,      // 8
    362880,     // 9
    3628800,    // 10
    39916800,   // 11
    479001600,  // 12
};

unsigned long long fact(unsigned int num) {
    if (num < 13) {
        return FACT_TABLE[num];
    }
    unsigned long long l = FACT_TABLE[12];
    for (unsigned int i = 12; i < num;) {
        i++;
        l *= i;
    }
    return l;
}