/simpletypesystem/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk
150 by Gustav Hartvigsson
* Fixed the tests in the CMake file
1
#pragma once
2
3
#include "defs.h"
4
5
/**
6
 * @file
7
 * @addtogroup Definitions
8
 * @{
9
 * @defgroup Primes Primes
10
 * @addtogroup Primes
11
 *   @{
12
 * @brief List of prime numbers and prime number utinity functions.
13
 */
14
15
/**
16
 *
17
 * We skip the first 100 primes and then add 100 and see what prime is closest
18
 * in and add it. This will create a good distrobution of primes that can be
19
 * used in hash maps.
20
 *
21
 * The list goes up to 1999. (there are 20 elements in the list.)
22
 */
23
S_UNUSED
24
static suint SPrimeListGood [20] = {
25
  101,
26
  199,
27
  307,
28
  401,
29
  499,
30
  601,
31
  701,
32
  797,
33
  887,
34
  997,
35
  1103,
36
  1201,
37
  1301,
38
  1399,
39
  1499,
40
  1601,
41
  1699,
42
  1789,
43
  1901,
44
  1999
45
};
46
47
#define S_PRIME_LIST_GOOD_LEN 20
48
49
/**
50
 * A longer list of primes between 1 and 5000
51
 */
52
S_UNUSED
53
static suint SPrimeListLong[670] = {
54
  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
55
  73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
56
  157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
57
  239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
58
  331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
59
  421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
60
  509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
61
  613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
62
  709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
63
  821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
64
  919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,
65
  
66
  1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087,
67
  1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181,
68
  1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279,
69
  1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373,
70
  1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471,
71
  1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559,
72
  1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637,
73
  1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747,
74
  1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867,
75
  1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973,
76
  1979, 1987, 1993, 1997, 1999,
77
  
78
  2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089,
79
  2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207,
80
  2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297,
81
  2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389,
82
  2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503,
83
  2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621,
84
  2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707,
85
  2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797,
86
  2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903,
87
  2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,
88
  
89
  3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109,
90
  3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221,
91
  3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329,
92
  3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449,
93
  3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539,
94
  3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631,
95
  3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733,
96
  3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851,
97
  3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943,
98
  3947, 3967, 3989,
99
  
100
  4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091,
101
  4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211,
102
  4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289,
103
  4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423,
104
  4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523,
105
  4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649,
106
  4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759,
107
  4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889,
108
  4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987,
109
  4993, 4999
110
};
111
112
#define S_PRIME_LIST_LONG_LEN 669
113
114
115
/**
116
 * Sees wether n is a prime or not.
117
 *
118
 * @param n The number to check.
119
 *
120
 * @returns TRUE when n is a prime.
121
 * @returns FALSE when n is not otherwise.
122
 */
123
S_EXPORTED
124
sboolean
125
s_prime_is (suint n);
126
127
/**
128
 * Alias
129
 */
130
#define s_prime_is_prime(n) s_prime_is(n)
131
132
/**
133
 * Get a random prime from a list of primes.
134
 *
135
 * @returns a random prime from SPrimeListLong
136
 */
137
S_EXPORTED
138
suint
139
s_prime_random ();
140
141
142
143
/**
144
 * @}
145
 * @}
146
 */