Go to the documentation of this file.
28 uintmax_t
min(uintmax_t a, uintmax_t b) {
29 return (a < b) ? a : b;
32 uintmax_t
max(uintmax_t a, uintmax_t b) {
33 return (a > b) ? a : b;
70 if (source % factor == 0) {
76 while (source % factor == 0) {
81 for (factor = 3; factor <= sqrt(source); factor += 2) {
83 if (source % factor == 0) {
89 while (source % factor == 0) {
109 uintmax_t* coefficients =
smart_alloc(n + 1,
sizeof(uintmax_t));
110 memset(coefficients, 0, (n + 1) *
sizeof(uintmax_t));
114 for (i = 1; i <= n; i++) {
115 for (j =
min(i, n); j > 0; j--) {
116 coefficients[j] = coefficients[j] + coefficients[j - 1];
124 uint8_t
addition(uintmax_t* result, uintmax_t a, uintmax_t b) {
142 uint8_t
int_power(uintmax_t* result, uintmax_t base, uintmax_t exponent) {
145 for ( ; exponent > 0; exponent--) *result *= base;
152 void int_root(uintmax_t* factor, uintmax_t* remainder, uintmax_t base, uintmax_t degree) {
155 uintmax_t temp_result;
163 *remainder /= temp_result;
uint8_t int_power(uintmax_t *result, uintmax_t base, uintmax_t exponent)
expression * prime_factors(uintmax_t source)
uintmax_t euclidean_gcd(uintmax_t a, uintmax_t b)
Computes the GCD of two integers.
union expression::@0 value
double uintmax_max_value(void)
void free_expression(expression *source, bool persistent)
uintmax_t * binomial_coefficients(uint8_t n)
void int_root(uintmax_t *factor, uintmax_t *remainder, uintmax_t base, uintmax_t degree)
uint8_t multiplication(uintmax_t *result, uintmax_t a, uintmax_t b)
uintmax_t max(uintmax_t a, uintmax_t b)
void append_child(expression *parent, expression *child)
Appends a child to an expression.
expression * new_expression(expression_type type, expression_identifier identifier, uint8_t child_count,...)
Allocates and initializes a new expression with the arguments provided.
uint8_t addition(uintmax_t *result, uintmax_t a, uintmax_t b)
uintmax_t min(uintmax_t a, uintmax_t b)
expression * new_literal(int8_t sign, uintmax_t numerator, uintmax_t denominator)
Allocates and initializes a new literal expression.
struct expression ** children
void * smart_alloc(uint8_t length, size_t size)
Allocates and keeps track of memory.