summaryrefslogtreecommitdiff
path: root/common/utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/utils.h')
-rw-r--r--common/utils.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/common/utils.h b/common/utils.h
new file mode 100644
index 0000000..0d89d49
--- /dev/null
+++ b/common/utils.h
@@ -0,0 +1,42 @@
+#ifndef EULER_UTILS_H
+#define EULER_UTILS_H
+
+typedef struct list
+{
+ struct list *next;
+ void *value;
+} list_t;
+
+typedef void (*list_free_cb)(void *value);
+typedef int (*list_compare_cb)(void *a, void *b);
+
+list_t *list_append(list_t *list, void *value);
+list_t *list_append_int(list_t *list, int i);
+list_t *list_append_long(list_t *list, long l);
+
+int list_len(list_t *list);
+
+void *list_get_n(list_t *list, int n);
+
+void list_sort(list_t **list, list_compare_cb);
+
+void list_free_int(void *value);
+void list_free_long(void *value);
+
+void list_free(list_t *list, list_free_cb cb);
+
+long int fib(unsigned long int n);
+long int fac(unsigned long int n);
+
+list_t *prime_factors_naive(const long *prime_table, long prime_table_size,
+ long number);
+
+long int gcd(long int a, long int b);
+
+long int lcm(long int a, long int b);
+
+int is_coprime(long int a, long int b);
+
+int pythagorean_triplet(int p, int q, int *a, int *b, int *c);
+
+#endif // EULER_UTILS_H