annotate lib/gl_anyhash_primes.h @ 40057:b06060465f09

maint: Run 'make update-copyright'
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 01 Jan 2019 00:25:11 +0100
parents 9f23dbd05922
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39993
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Table of primes, for use by hash tables.
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 39993
diff changeset
2 Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc.
39993
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3 Written by Bruno Haible <bruno@clisp.org>, 2006.
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 This program is free software: you can redistribute it and/or modify
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 the Free Software Foundation; either version 3 of the License, or
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8 (at your option) any later version.
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13 GNU General Public License for more details.
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16 along with this program. If not, see <https://www.gnu.org/licenses/>. */
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18 /* Array of primes, approximately in steps of factor 1.2.
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 This table was computed by executing the Common Lisp expression
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20 (dotimes (i 244) (format t "nextprime(~D)~%" (ceiling (expt 1.2d0 i))))
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 and feeding the result to PARI/gp. */
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22 static const size_t primes[] =
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23 {
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 11, 13, 17, 19, 23, 29, 37, 41, 47, 59, 67, 83, 97, 127, 139, 167, 199,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 239, 293, 347, 419, 499, 593, 709, 853, 1021, 1229, 1471, 1777, 2129, 2543,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 3049, 3659, 4391, 5273, 6323, 7589, 9103, 10937, 13109, 15727, 18899,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 22651, 27179, 32609, 39133, 46957, 56359, 67619, 81157, 97369, 116849,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 140221, 168253, 201907, 242309, 290761, 348889, 418667, 502409, 602887,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 723467, 868151, 1041779, 1250141, 1500181, 1800191, 2160233, 2592277,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 3110741, 3732887, 4479463, 5375371, 6450413, 7740517, 9288589, 11146307,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31 13375573, 16050689, 19260817, 23112977, 27735583, 33282701, 39939233,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 47927081, 57512503, 69014987, 82818011, 99381577, 119257891, 143109469,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 171731387, 206077643, 247293161, 296751781, 356102141, 427322587,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 512787097, 615344489, 738413383, 886096061, 1063315271, 1275978331,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 1531174013, 1837408799, 2204890543UL, 2645868653UL, 3175042391UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36 3810050851UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 #if SIZE_MAX > 4294967295UL
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38 4572061027UL, 5486473229UL, 6583767889UL, 7900521449UL, 9480625733UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 11376750877UL, 13652101063UL, 16382521261UL, 19659025513UL, 23590830631UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 28308996763UL, 33970796089UL, 40764955463UL, 48917946377UL, 58701535657UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 70441842749UL, 84530211301UL, 101436253561UL, 121723504277UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 146068205131UL, 175281846149UL, 210338215379UL, 252405858521UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 302887030151UL, 363464436191UL, 436157323417UL, 523388788231UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 628066545713UL, 753679854847UL, 904415825857UL, 1085298991109UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 1302358789181UL, 1562830547009UL, 1875396656429UL, 2250475987709UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 2700571185239UL, 3240685422287UL, 3888822506759UL, 4666587008147UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 5599904409713UL, 6719885291641UL, 8063862349969UL, 9676634819959UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 11611961783951UL, 13934354140769UL, 16721224968907UL, 20065469962669UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 24078563955191UL, 28894276746229UL, 34673132095507UL, 41607758514593UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 49929310217531UL, 59915172260971UL, 71898206713183UL, 86277848055823UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 103533417666967UL, 124240101200359UL, 149088121440451UL, 178905745728529UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 214686894874223UL, 257624273849081UL, 309149128618903UL, 370978954342639UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 445174745211143UL, 534209694253381UL, 641051633104063UL, 769261959724877UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54 923114351670013UL, 1107737222003791UL, 1329284666404567UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 1595141599685509UL, 1914169919622551UL, 2297003903547091UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 2756404684256459UL, 3307685621107757UL, 3969222745329323UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 4763067294395177UL, 5715680753274209UL, 6858816903929113UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 8230580284714831UL, 9876696341657791UL, 11852035609989371UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 14222442731987227UL, 17066931278384657UL, 20480317534061597UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 24576381040873903UL, 29491657249048679UL, 35389988698858471UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 42467986438630267UL, 50961583726356109UL, 61153900471627387UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 73384680565952851UL, 88061616679143347UL, 105673940014972061UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 126808728017966413UL, 152170473621559703UL, 182604568345871671UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 219125482015045997UL, 262950578418055169UL, 315540694101666193UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 378648832921999397UL, 454378599506399233UL, 545254319407679131UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 654305183289214771UL, 785166219947057701UL, 942199463936469157UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 1130639356723763129UL, 1356767228068515623UL, 1628120673682218619UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 1953744808418662409UL, 2344493770102394881UL, 2813392524122873857UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 3376071028947448339UL, 4051285234736937517UL, 4861542281684325481UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 5833850738021191727UL, 7000620885625427969UL, 8400745062750513217UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 10080894075300616261UL, 12097072890360739951UL, 14516487468432885797UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 17419784962119465179UL,
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 #endif
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 SIZE_MAX /* sentinel, to ensure the search terminates */
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75 };
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 /* Return a suitable prime >= ESTIMATE. */
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 static size_t
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 next_prime (size_t estimate)
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 {
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 size_t i;
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83 for (i = 0; i < sizeof (primes) / sizeof (primes[0]); i++)
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84 if (primes[i] >= estimate)
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 return primes[i];
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
86 return SIZE_MAX; /* not a prime, but better than nothing */
9f23dbd05922 linkedhash-set: New module.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87 }