Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / lang / LangSource / PyrMathSupport.cpp
blob96bf1c86a88be0c935db3704bee580bed02175dd
1 /*
2 SuperCollider real time audio synthesis system
3 Copyright (c) 2002 James McCartney. All rights reserved.
4 http://www.audiosynth.com
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "SCBase.h"
22 #include "SC_InlineUnaryOp.h"
23 #include "SC_InlineBinaryOp.h"
24 #include "MiscInlineMath.h"
25 #include "SC_RGen.h"
26 #include <stdlib.h>
27 #include <math.h>
29 #ifdef __FreeBSD__
30 # include <complex.h>
31 #endif
34 float centsRatio[128];
35 float semitoneFreq[128];
37 /* host function : (move to separate file) */
39 void pyrmath_init_globs();
40 void pyrmath_init_globs()
42 int i;
44 for (i=0; i<128; ++i) {
45 semitoneFreq[i] = 440. * pow(2., (i - 69)/12.);
46 centsRatio[i] = pow(2., i/(12. * 128.));
51 // 1/440 = 0.0022727272727 1/12 = 0.083333333333
53 // These are built in on OSX and Linux
54 #if !(SC_DARWIN || __linux__)
55 double log2(double x);
56 double log2(double x)
58 return log(x) * rlog2;
61 double hypot(double x, double y);
62 double hypot(double x, double y)
64 return sqrt(x*x + y*y);
66 #endif // !SC_DARWIN && !__linux__
68 #define SQRT2M1 0.41421356f
70 double hypotx(double x, double y);
71 double hypotx(double x, double y)
73 double minxy;
75 x = fabs(x);
76 y = fabs(y);
78 minxy = sc_min(x,y);
80 return x + y - SQRT2M1 * minxy;
86 unsigned short primeslist[NUMPRIMES] = {
88 2, 3, 5, 7, 11, 13, 17, 19,
89 23, 29, 31, 37, 41, 43, 47, 53,
90 59, 61, 67, 71, 73, 79, 83, 89,
91 97, 101, 103, 107, 109, 113, 127, 131,
92 137, 139, 149, 151, 157, 163, 167, 173,
93 179, 181, 191, 193, 197, 199, 211, 223,
94 227, 229, 233, 239, 241, 251, 257, 263,
95 269, 271, 277, 281, 283, 293, 307, 311,
96 313, 317, 331, 337, 347, 349, 353, 359,
97 367, 373, 379, 383, 389, 397, 401, 409,
98 419, 421, 431, 433, 439, 443, 449, 457,
99 461, 463, 467, 479, 487, 491, 499, 503,
100 509, 521, 523, 541, 547, 557, 563, 569,
101 571, 577, 587, 593, 599, 601, 607, 613,
102 617, 619, 631, 641, 643, 647, 653, 659,
103 661, 673, 677, 683, 691, 701, 709, 719,
104 727, 733, 739, 743, 751, 757, 761, 769,
105 773, 787, 797, 809, 811, 821, 823, 827,
106 829, 839, 853, 857, 859, 863, 877, 881,
107 883, 887, 907, 911, 919, 929, 937, 941,
108 947, 953, 967, 971, 977, 983, 991, 997,
109 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049,
110 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097,
111 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163,
112 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223,
113 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283,
114 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321,
115 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423,
116 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459,
117 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511,
118 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571,
119 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619,
120 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693,
121 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747,
122 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811,
123 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877,
124 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949,
125 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003,
126 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069,
127 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129,
128 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203,
129 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267,
130 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311,
131 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377,
132 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423,
133 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503,
134 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579,
135 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657,
136 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693,
137 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741,
138 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801,
139 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861,
140 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939,
141 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011,
142 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079,
143 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167,
144 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221,
145 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301,
146 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347,
147 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413,
148 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491,
149 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541,
150 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607,
151 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671,
152 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727,
153 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797,
154 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863,
155 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923,
156 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003,
157 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057,
158 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129,
159 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211,
160 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259,
161 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337,
162 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409,
163 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481,
164 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547,
165 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621,
166 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673,
167 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751,
168 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813,
169 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909,
170 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967,
171 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011,
172 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087,
173 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167,
174 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233,
175 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309,
176 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399,
177 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443,
178 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507,
179 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573,
180 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653,
181 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711,
182 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791,
183 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849,
184 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897,
185 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007,
186 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073,
187 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133,
188 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211,
189 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271,
190 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329,
191 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379,
192 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473,
193 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563,
194 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637,
195 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701,
196 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779,
197 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833,
198 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907,
199 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971,
200 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027,
201 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121,
202 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207,
203 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253,
204 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349,
205 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457,
206 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517,
207 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561,
208 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621,
209 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691,
210 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757,
211 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853,
212 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919,
213 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009,
214 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087,
215 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161,
216 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231,
217 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291,
218 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369,
219 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443,
220 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537,
221 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609,
222 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677,
223 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731,
224 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803,
225 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861,
226 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941,
227 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011,
228 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091,
229 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161,
230 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227,
231 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311,
232 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377,
233 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433,
234 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491,
235 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587,
236 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649,
237 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733,
238 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791,
239 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857,
240 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929,
241 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037,
242 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099,
243 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163,
244 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247,
245 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303,
246 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369,
247 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459,
248 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531,
249 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627,
250 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691,
251 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771,
252 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859,
253 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937,
254 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003,
255 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087,
256 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161,
257 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251,
258 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317,
259 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399,
260 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483,
261 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551,
262 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657,
263 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731,
264 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813,
265 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887,
266 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941,
267 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011,
268 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101,
269 12107, 12109, 12113, 12119, 12143, 12149, 12157, 12161,
270 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251,
271 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323,
272 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401,
273 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473,
274 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527,
275 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589,
276 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653,
277 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739,
278 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821,
279 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907,
280 12911, 12917, 12919, 12923, 12941, 12953, 12959, 12967,
281 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033,
282 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109,
283 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177,
284 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259,
285 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337,
286 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421,
287 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499,
288 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597,
289 13613, 13619, 13627, 13633, 13649, 13669, 13679, 13681,
290 13687, 13691, 13693, 13697, 13709, 13711, 13721, 13723,
291 13729, 13751, 13757, 13759, 13763, 13781, 13789, 13799,
292 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879,
293 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933,
294 13963, 13967, 13997, 13999, 14009, 14011, 14029, 14033,
295 14051, 14057, 14071, 14081, 14083, 14087, 14107, 14143,
296 14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221,
297 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323,
298 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407,
299 14411, 14419, 14423, 14431, 14437, 14447, 14449, 14461,
300 14479, 14489, 14503, 14519, 14533, 14537, 14543, 14549,
301 14551, 14557, 14561, 14563, 14591, 14593, 14621, 14627,
302 14629, 14633, 14639, 14653, 14657, 14669, 14683, 14699,
303 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753,
304 14759, 14767, 14771, 14779, 14783, 14797, 14813, 14821,
305 14827, 14831, 14843, 14851, 14867, 14869, 14879, 14887,
306 14891, 14897, 14923, 14929, 14939, 14947, 14951, 14957,
307 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073,
308 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137,
309 15139, 15149, 15161, 15173, 15187, 15193, 15199, 15217,
310 15227, 15233, 15241, 15259, 15263, 15269, 15271, 15277,
311 15287, 15289, 15299, 15307, 15313, 15319, 15329, 15331,
312 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401,
313 15413, 15427, 15439, 15443, 15451, 15461, 15467, 15473,
314 15493, 15497, 15511, 15527, 15541, 15551, 15559, 15569,
315 15581, 15583, 15601, 15607, 15619, 15629, 15641, 15643,
316 15647, 15649, 15661, 15667, 15671, 15679, 15683, 15727,
317 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773,
318 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859,
319 15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919,
320 15923, 15937, 15959, 15971, 15973, 15991, 16001, 16007,
321 16033, 16057, 16061, 16063, 16067, 16069, 16073, 16087,
322 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183,
323 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249,
324 16253, 16267, 16273, 16301, 16319, 16333, 16339, 16349,
325 16361, 16363, 16369, 16381, 16411, 16417, 16421, 16427,
326 16433, 16447, 16451, 16453, 16477, 16481, 16487, 16493,
327 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603,
328 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661,
329 16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747,
330 16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843,
331 16871, 16879, 16883, 16889, 16901, 16903, 16921, 16927,
332 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993,
333 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053,
334 17077, 17093, 17099, 17107, 17117, 17123, 17137, 17159,
335 17167, 17183, 17189, 17191, 17203, 17207, 17209, 17231,
336 17239, 17257, 17291, 17293, 17299, 17317, 17321, 17327,
337 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389,
338 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467,
339 17471, 17477, 17483, 17489, 17491, 17497, 17509, 17519,
340 17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599,
341 17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683,
342 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783,
343 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863,
344 17881, 17891, 17903, 17909, 17911, 17921, 17923, 17929,
345 17939, 17957, 17959, 17971, 17977, 17981, 17987, 17989,
346 18013, 18041, 18043, 18047, 18049, 18059, 18061, 18077,
347 18089, 18097, 18119, 18121, 18127, 18131, 18133, 18143,
348 18149, 18169, 18181, 18191, 18199, 18211, 18217, 18223,
349 18229, 18233, 18251, 18253, 18257, 18269, 18287, 18289,
350 18301, 18307, 18311, 18313, 18329, 18341, 18353, 18367,
351 18371, 18379, 18397, 18401, 18413, 18427, 18433, 18439,
352 18443, 18451, 18457, 18461, 18481, 18493, 18503, 18517,
353 18521, 18523, 18539, 18541, 18553, 18583, 18587, 18593,
354 18617, 18637, 18661, 18671, 18679, 18691, 18701, 18713,
355 18719, 18731, 18743, 18749, 18757, 18773, 18787, 18793,
356 18797, 18803, 18839, 18859, 18869, 18899, 18911, 18913,
357 18917, 18919, 18947, 18959, 18973, 18979, 19001, 19009,
358 19013, 19031, 19037, 19051, 19069, 19073, 19079, 19081,
359 19087, 19121, 19139, 19141, 19157, 19163, 19181, 19183,
360 19207, 19211, 19213, 19219, 19231, 19237, 19249, 19259,
361 19267, 19273, 19289, 19301, 19309, 19319, 19333, 19373,
362 19379, 19381, 19387, 19391, 19403, 19417, 19421, 19423,
363 19427, 19429, 19433, 19441, 19447, 19457, 19463, 19469,
364 19471, 19477, 19483, 19489, 19501, 19507, 19531, 19541,
365 19543, 19553, 19559, 19571, 19577, 19583, 19597, 19603,
366 19609, 19661, 19681, 19687, 19697, 19699, 19709, 19717,
367 19727, 19739, 19751, 19753, 19759, 19763, 19777, 19793,
368 19801, 19813, 19819, 19841, 19843, 19853, 19861, 19867,
369 19889, 19891, 19913, 19919, 19927, 19937, 19949, 19961,
370 19963, 19973, 19979, 19991, 19993, 19997, 20011, 20021,
371 20023, 20029, 20047, 20051, 20063, 20071, 20089, 20101,
372 20107, 20113, 20117, 20123, 20129, 20143, 20147, 20149,
373 20161, 20173, 20177, 20183, 20201, 20219, 20231, 20233,
374 20249, 20261, 20269, 20287, 20297, 20323, 20327, 20333,
375 20341, 20347, 20353, 20357, 20359, 20369, 20389, 20393,
376 20399, 20407, 20411, 20431, 20441, 20443, 20477, 20479,
377 20483, 20507, 20509, 20521, 20533, 20543, 20549, 20551,
378 20563, 20593, 20599, 20611, 20627, 20639, 20641, 20663,
379 20681, 20693, 20707, 20717, 20719, 20731, 20743, 20747,
380 20749, 20753, 20759, 20771, 20773, 20789, 20807, 20809,
381 20849, 20857, 20873, 20879, 20887, 20897, 20899, 20903,
382 20921, 20929, 20939, 20947, 20959, 20963, 20981, 20983,
383 21001, 21011, 21013, 21017, 21019, 21023, 21031, 21059,
384 21061, 21067, 21089, 21101, 21107, 21121, 21139, 21143,
385 21149, 21157, 21163, 21169, 21179, 21187, 21191, 21193,
386 21211, 21221, 21227, 21247, 21269, 21277, 21283, 21313,
387 21317, 21319, 21323, 21341, 21347, 21377, 21379, 21383,
388 21391, 21397, 21401, 21407, 21419, 21433, 21467, 21481,
389 21487, 21491, 21493, 21499, 21503, 21517, 21521, 21523,
390 21529, 21557, 21559, 21563, 21569, 21577, 21587, 21589,
391 21599, 21601, 21611, 21613, 21617, 21647, 21649, 21661,
392 21673, 21683, 21701, 21713, 21727, 21737, 21739, 21751,
393 21757, 21767, 21773, 21787, 21799, 21803, 21817, 21821,
394 21839, 21841, 21851, 21859, 21863, 21871, 21881, 21893,
395 21911, 21929, 21937, 21943, 21961, 21977, 21991, 21997,
396 22003, 22013, 22027, 22031, 22037, 22039, 22051, 22063,
397 22067, 22073, 22079, 22091, 22093, 22109, 22111, 22123,
398 22129, 22133, 22147, 22153, 22157, 22159, 22171, 22189,
399 22193, 22229, 22247, 22259, 22271, 22273, 22277, 22279,
400 22283, 22291, 22303, 22307, 22343, 22349, 22367, 22369,
401 22381, 22391, 22397, 22409, 22433, 22441, 22447, 22453,
402 22469, 22481, 22483, 22501, 22511, 22531, 22541, 22543,
403 22549, 22567, 22571, 22573, 22613, 22619, 22621, 22637,
404 22639, 22643, 22651, 22669, 22679, 22691, 22697, 22699,
405 22709, 22717, 22721, 22727, 22739, 22741, 22751, 22769,
406 22777, 22783, 22787, 22807, 22811, 22817, 22853, 22859,
407 22861, 22871, 22877, 22901, 22907, 22921, 22937, 22943,
408 22961, 22963, 22973, 22993, 23003, 23011, 23017, 23021,
409 23027, 23029, 23039, 23041, 23053, 23057, 23059, 23063,
410 23071, 23081, 23087, 23099, 23117, 23131, 23143, 23159,
411 23167, 23173, 23189, 23197, 23201, 23203, 23209, 23227,
412 23251, 23269, 23279, 23291, 23293, 23297, 23311, 23321,
413 23327, 23333, 23339, 23357, 23369, 23371, 23399, 23417,
414 23431, 23447, 23459, 23473, 23497, 23509, 23531, 23537,
415 23539, 23549, 23557, 23561, 23563, 23567, 23581, 23593,
416 23599, 23603, 23609, 23623, 23627, 23629, 23633, 23663,
417 23669, 23671, 23677, 23687, 23689, 23719, 23741, 23743,
418 23747, 23753, 23761, 23767, 23773, 23789, 23801, 23813,
419 23819, 23827, 23831, 23833, 23857, 23869, 23873, 23879,
420 23887, 23893, 23899, 23909, 23911, 23917, 23929, 23957,
421 23971, 23977, 23981, 23993, 24001, 24007, 24019, 24023,
422 24029, 24043, 24049, 24061, 24071, 24077, 24083, 24091,
423 24097, 24103, 24107, 24109, 24113, 24121, 24133, 24137,
424 24151, 24169, 24179, 24181, 24197, 24203, 24223, 24229,
425 24239, 24247, 24251, 24281, 24317, 24329, 24337, 24359,
426 24371, 24373, 24379, 24391, 24407, 24413, 24419, 24421,
427 24439, 24443, 24469, 24473, 24481, 24499, 24509, 24517,
428 24527, 24533, 24547, 24551, 24571, 24593, 24611, 24623,
429 24631, 24659, 24671, 24677, 24683, 24691, 24697, 24709,
430 24733, 24749, 24763, 24767, 24781, 24793, 24799, 24809,
431 24821, 24841, 24847, 24851, 24859, 24877, 24889, 24907,
432 24917, 24919, 24923, 24943, 24953, 24967, 24971, 24977,
433 24979, 24989, 25013, 25031, 25033, 25037, 25057, 25073,
434 25087, 25097, 25111, 25117, 25121, 25127, 25147, 25153,
435 25163, 25169, 25171, 25183, 25189, 25219, 25229, 25237,
436 25243, 25247, 25253, 25261, 25301, 25303, 25307, 25309,
437 25321, 25339, 25343, 25349, 25357, 25367, 25373, 25391,
438 25409, 25411, 25423, 25439, 25447, 25453, 25457, 25463,
439 25469, 25471, 25523, 25537, 25541, 25561, 25577, 25579,
440 25583, 25589, 25601, 25603, 25609, 25621, 25633, 25639,
441 25643, 25657, 25667, 25673, 25679, 25693, 25703, 25717,
442 25733, 25741, 25747, 25759, 25763, 25771, 25793, 25799,
443 25801, 25819, 25841, 25847, 25849, 25867, 25873, 25889,
444 25903, 25913, 25919, 25931, 25933, 25939, 25943, 25951,
445 25969, 25981, 25997, 25999, 26003, 26017, 26021, 26029,
446 26041, 26053, 26083, 26099, 26107, 26111, 26113, 26119,
447 26141, 26153, 26161, 26171, 26177, 26183, 26189, 26203,
448 26209, 26227, 26237, 26249, 26251, 26261, 26263, 26267,
449 26293, 26297, 26309, 26317, 26321, 26339, 26347, 26357,
450 26371, 26387, 26393, 26399, 26407, 26417, 26423, 26431,
451 26437, 26449, 26459, 26479, 26489, 26497, 26501, 26513,
452 26539, 26557, 26561, 26573, 26591, 26597, 26627, 26633,
453 26641, 26647, 26669, 26681, 26683, 26687, 26693, 26699,
454 26701, 26711, 26713, 26717, 26723, 26729, 26731, 26737,
455 26759, 26777, 26783, 26801, 26813, 26821, 26833, 26839,
456 26849, 26861, 26863, 26879, 26881, 26891, 26893, 26903,
457 26921, 26927, 26947, 26951, 26953, 26959, 26981, 26987,
458 26993, 27011, 27017, 27031, 27043, 27059, 27061, 27067,
459 27073, 27077, 27091, 27103, 27107, 27109, 27127, 27143,
460 27179, 27191, 27197, 27211, 27239, 27241, 27253, 27259,
461 27271, 27277, 27281, 27283, 27299, 27329, 27337, 27361,
462 27367, 27397, 27407, 27409, 27427, 27431, 27437, 27449,
463 27457, 27479, 27481, 27487, 27509, 27527, 27529, 27539,
464 27541, 27551, 27581, 27583, 27611, 27617, 27631, 27647,
465 27653, 27673, 27689, 27691, 27697, 27701, 27733, 27737,
466 27739, 27743, 27749, 27751, 27763, 27767, 27773, 27779,
467 27791, 27793, 27799, 27803, 27809, 27817, 27823, 27827,
468 27847, 27851, 27883, 27893, 27901, 27917, 27919, 27941,
469 27943, 27947, 27953, 27961, 27967, 27983, 27997, 28001,
470 28019, 28027, 28031, 28051, 28057, 28069, 28081, 28087,
471 28097, 28099, 28109, 28111, 28123, 28151, 28163, 28181,
472 28183, 28201, 28211, 28219, 28229, 28277, 28279, 28283,
473 28289, 28297, 28307, 28309, 28319, 28349, 28351, 28387,
474 28393, 28403, 28409, 28411, 28429, 28433, 28439, 28447,
475 28463, 28477, 28493, 28499, 28513, 28517, 28537, 28541,
476 28547, 28549, 28559, 28571, 28573, 28579, 28591, 28597,
477 28603, 28607, 28619, 28621, 28627, 28631, 28643, 28649,
478 28657, 28661, 28663, 28669, 28687, 28697, 28703, 28711,
479 28723, 28729, 28751, 28753, 28759, 28771, 28789, 28793,
480 28807, 28813, 28817, 28837, 28843, 28859, 28867, 28871,
481 28879, 28901, 28909, 28921, 28927, 28933, 28949, 28961,
482 28979, 29009, 29017, 29021, 29023, 29027, 29033, 29059,
483 29063, 29077, 29101, 29123, 29129, 29131, 29137, 29147,
484 29153, 29167, 29173, 29179, 29191, 29201, 29207, 29209,
485 29221, 29231, 29243, 29251, 29269, 29287, 29297, 29303,
486 29311, 29327, 29333, 29339, 29347, 29363, 29383, 29387,
487 29389, 29399, 29401, 29411, 29423, 29429, 29437, 29443,
488 29453, 29473, 29483, 29501, 29527, 29531, 29537, 29567,
489 29569, 29573, 29581, 29587, 29599, 29611, 29629, 29633,
490 29641, 29663, 29669, 29671, 29683, 29717, 29723, 29741,
491 29753, 29759, 29761, 29789, 29803, 29819, 29833, 29837,
492 29851, 29863, 29867, 29873, 29879, 29881, 29917, 29921,
493 29927, 29947, 29959, 29983, 29989, 30011, 30013, 30029,
494 30047, 30059, 30071, 30089, 30091, 30097, 30103, 30109,
495 30113, 30119, 30133, 30137, 30139, 30161, 30169, 30181,
496 30187, 30197, 30203, 30211, 30223, 30241, 30253, 30259,
497 30269, 30271, 30293, 30307, 30313, 30319, 30323, 30341,
498 30347, 30367, 30389, 30391, 30403, 30427, 30431, 30449,
499 30467, 30469, 30491, 30493, 30497, 30509, 30517, 30529,
500 30539, 30553, 30557, 30559, 30577, 30593, 30631, 30637,
501 30643, 30649, 30661, 30671, 30677, 30689, 30697, 30703,
502 30707, 30713, 30727, 30757, 30763, 30773, 30781, 30803,
503 30809, 30817, 30829, 30839, 30841, 30851, 30853, 30859,
504 30869, 30871, 30881, 30893, 30911, 30931, 30937, 30941,
505 30949, 30971, 30977, 30983, 31013, 31019, 31033, 31039,
506 31051, 31063, 31069, 31079, 31081, 31091, 31121, 31123,
507 31139, 31147, 31151, 31153, 31159, 31177, 31181, 31183,
508 31189, 31193, 31219, 31223, 31231, 31237, 31247, 31249,
509 31253, 31259, 31267, 31271, 31277, 31307, 31319, 31321,
510 31327, 31333, 31337, 31357, 31379, 31387, 31391, 31393,
511 31397, 31469, 31477, 31481, 31489, 31511, 31513, 31517,
512 31531, 31541, 31543, 31547, 31567, 31573, 31583, 31601,
513 31607, 31627, 31643, 31649, 31657, 31663, 31667, 31687,
514 31699, 31721, 31723, 31727, 31729, 31741, 31751, 31769,
515 31771, 31793, 31799, 31817, 31847, 31849, 31859, 31873,
516 31883, 31891, 31907, 31957, 31963, 31973, 31981, 31991,
517 32003, 32009, 32027, 32029, 32051, 32057, 32059, 32063,
518 32069, 32077, 32083, 32089, 32099, 32117, 32119, 32141,
519 32143, 32159, 32173, 32183, 32189, 32191, 32203, 32213,
520 32233, 32237, 32251, 32257, 32261, 32297, 32299, 32303,
521 32309, 32321, 32323, 32327, 32341, 32353, 32359, 32363,
522 32369, 32371, 32377, 32381, 32401, 32411, 32413, 32423,
523 32429, 32441, 32443, 32467, 32479, 32491, 32497, 32503,
524 32507, 32531, 32533, 32537, 32561, 32563, 32569, 32573,
525 32579, 32587, 32603, 32609, 32611, 32621, 32633, 32647,
526 32653, 32687, 32693, 32707, 32713, 32717, 32719, 32749,
527 32771, 32779, 32783, 32789, 32797, 32801, 32803, 32831,
528 32833, 32839, 32843, 32869, 32887, 32909, 32911, 32917,
529 32933, 32939, 32941, 32957, 32969, 32971, 32983, 32987,
530 32993, 32999, 33013, 33023, 33029, 33037, 33049, 33053,
531 33071, 33073, 33083, 33091, 33107, 33113, 33119, 33149,
532 33151, 33161, 33179, 33181, 33191, 33199, 33203, 33211,
533 33223, 33247, 33287, 33289, 33301, 33311, 33317, 33329,
534 33331, 33343, 33347, 33349, 33353, 33359, 33377, 33391,
535 33403, 33409, 33413, 33427, 33457, 33461, 33469, 33479,
536 33487, 33493, 33503, 33521, 33529, 33533, 33547, 33563,
537 33569, 33577, 33581, 33587, 33589, 33599, 33601, 33613,
538 33617, 33619, 33623, 33629, 33637, 33641, 33647, 33679,
539 33703, 33713, 33721, 33739, 33749, 33751, 33757, 33767,
540 33769, 33773, 33791, 33797, 33809, 33811, 33827, 33829,
541 33851, 33857, 33863, 33871, 33889, 33893, 33911, 33923,
542 33931, 33937, 33941, 33961, 33967, 33997, 34019, 34031,
543 34033, 34039, 34057, 34061, 34123, 34127, 34129, 34141,
544 34147, 34157, 34159, 34171, 34183, 34211, 34213, 34217,
545 34231, 34253, 34259, 34261, 34267, 34273, 34283, 34297,
546 34301, 34303, 34313, 34319, 34327, 34337, 34351, 34361,
547 34367, 34369, 34381, 34403, 34421, 34429, 34439, 34457,
548 34469, 34471, 34483, 34487, 34499, 34501, 34511, 34513,
549 34519, 34537, 34543, 34549, 34583, 34589, 34591, 34603,
550 34607, 34613, 34631, 34649, 34651, 34667, 34673, 34679,
551 34687, 34693, 34703, 34721, 34729, 34739, 34747, 34757,
552 34759, 34763, 34781, 34807, 34819, 34841, 34843, 34847,
553 34849, 34871, 34877, 34883, 34897, 34913, 34919, 34939,
554 34949, 34961, 34963, 34981, 35023, 35027, 35051, 35053,
555 35059, 35069, 35081, 35083, 35089, 35099, 35107, 35111,
556 35117, 35129, 35141, 35149, 35153, 35159, 35171, 35201,
557 35221, 35227, 35251, 35257, 35267, 35279, 35281, 35291,
558 35311, 35317, 35323, 35327, 35339, 35353, 35363, 35381,
559 35393, 35401, 35407, 35419, 35423, 35437, 35447, 35449,
560 35461, 35491, 35507, 35509, 35521, 35527, 35531, 35533,
561 35537, 35543, 35569, 35573, 35591, 35593, 35597, 35603,
562 35617, 35671, 35677, 35729, 35731, 35747, 35753, 35759,
563 35771, 35797, 35801, 35803, 35809, 35831, 35837, 35839,
564 35851, 35863, 35869, 35879, 35897, 35899, 35911, 35923,
565 35933, 35951, 35963, 35969, 35977, 35983, 35993, 35999,
566 36007, 36011, 36013, 36017, 36037, 36061, 36067, 36073,
567 36083, 36097, 36107, 36109, 36131, 36137, 36151, 36161,
568 36187, 36191, 36209, 36217, 36229, 36241, 36251, 36263,
569 36269, 36277, 36293, 36299, 36307, 36313, 36319, 36341,
570 36343, 36353, 36373, 36383, 36389, 36433, 36451, 36457,
571 36467, 36469, 36473, 36479, 36493, 36497, 36523, 36527,
572 36529, 36541, 36551, 36559, 36563, 36571, 36583, 36587,
573 36599, 36607, 36629, 36637, 36643, 36653, 36671, 36677,
574 36683, 36691, 36697, 36709, 36713, 36721, 36739, 36749,
575 36761, 36767, 36779, 36781, 36787, 36791, 36793, 36809,
576 36821, 36833, 36847, 36857, 36871, 36877, 36887, 36899,
577 36901, 36913, 36919, 36923, 36929, 36931, 36943, 36947,
578 36973, 36979, 36997, 37003, 37013, 37019, 37021, 37039,
579 37049, 37057, 37061, 37087, 37097, 37117, 37123, 37139,
580 37159, 37171, 37181, 37189, 37199, 37201, 37217, 37223,
581 37243, 37253, 37273, 37277, 37307, 37309, 37313, 37321,
582 37337, 37339, 37357, 37361, 37363, 37369, 37379, 37397,
583 37409, 37423, 37441, 37447, 37463, 37483, 37489, 37493,
584 37501, 37507, 37511, 37517, 37529, 37537, 37547, 37549,
585 37561, 37567, 37571, 37573, 37579, 37589, 37591, 37607,
586 37619, 37633, 37643, 37649, 37657, 37663, 37691, 37693,
587 37699, 37717, 37747, 37781, 37783, 37799, 37811, 37813,
588 37831, 37847, 37853, 37861, 37871, 37879, 37889, 37897,
589 37907, 37951, 37957, 37963, 37967, 37987, 37991, 37993,
590 37997, 38011, 38039, 38047, 38053, 38069, 38083, 38113,
591 38119, 38149, 38153, 38167, 38177, 38183, 38189, 38197,
592 38201, 38219, 38231, 38237, 38239, 38261, 38273, 38281,
593 38287, 38299, 38303, 38317, 38321, 38327, 38329, 38333,
594 38351, 38371, 38377, 38393, 38431, 38447, 38449, 38453,
595 38459, 38461, 38501, 38543, 38557, 38561, 38567, 38569,
596 38593, 38603, 38609, 38611, 38629, 38639, 38651, 38653,
597 38669, 38671, 38677, 38693, 38699, 38707, 38711, 38713,
598 38723, 38729, 38737, 38747, 38749, 38767, 38783, 38791,
599 38803, 38821, 38833, 38839, 38851, 38861, 38867, 38873,
600 38891, 38903, 38917, 38921, 38923, 38933, 38953, 38959,
601 38971, 38977, 38993, 39019, 39023, 39041, 39043, 39047,
602 39079, 39089, 39097, 39103, 39107, 39113, 39119, 39133,
603 39139, 39157, 39161, 39163, 39181, 39191, 39199, 39209,
604 39217, 39227, 39229, 39233, 39239, 39241, 39251, 39293,
605 39301, 39313, 39317, 39323, 39341, 39343, 39359, 39367,
606 39371, 39373, 39383, 39397, 39409, 39419, 39439, 39443,
607 39451, 39461, 39499, 39503, 39509, 39511, 39521, 39541,
608 39551, 39563, 39569, 39581, 39607, 39619, 39623, 39631,
609 39659, 39667, 39671, 39679, 39703, 39709, 39719, 39727,
610 39733, 39749, 39761, 39769, 39779, 39791, 39799, 39821,
611 39827, 39829, 39839, 39841, 39847, 39857, 39863, 39869,
612 39877, 39883, 39887, 39901, 39929, 39937, 39953, 39971,
613 39979, 39983, 39989, 40009, 40013, 40031, 40037, 40039,
614 40063, 40087, 40093, 40099, 40111, 40123, 40127, 40129,
615 40151, 40153, 40163, 40169, 40177, 40189, 40193, 40213,
616 40231, 40237, 40241, 40253, 40277, 40283, 40289, 40343,
617 40351, 40357, 40361, 40387, 40423, 40427, 40429, 40433,
618 40459, 40471, 40483, 40487, 40493, 40499, 40507, 40519,
619 40529, 40531, 40543, 40559, 40577, 40583, 40591, 40597,
620 40609, 40627, 40637, 40639, 40693, 40697, 40699, 40709,
621 40739, 40751, 40759, 40763, 40771, 40787, 40801, 40813,
622 40819, 40823, 40829, 40841, 40847, 40849, 40853, 40867,
623 40879, 40883, 40897, 40903, 40927, 40933, 40939, 40949,
624 40961, 40973, 40993, 41011, 41017, 41023, 41039, 41047,
625 41051, 41057, 41077, 41081, 41113, 41117, 41131, 41141,
626 41143, 41149, 41161, 41177, 41179, 41183, 41189, 41201,
627 41203, 41213, 41221, 41227, 41231, 41233, 41243, 41257,
628 41263, 41269, 41281, 41299, 41333, 41341, 41351, 41357,
629 41381, 41387, 41389, 41399, 41411, 41413, 41443, 41453,
630 41467, 41479, 41491, 41507, 41513, 41519, 41521, 41539,
631 41543, 41549, 41579, 41593, 41597, 41603, 41609, 41611,
632 41617, 41621, 41627, 41641, 41647, 41651, 41659, 41669,
633 41681, 41687, 41719, 41729, 41737, 41759, 41761, 41771,
634 41777, 41801, 41809, 41813, 41843, 41849, 41851, 41863,
635 41879, 41887, 41893, 41897, 41903, 41911, 41927, 41941,
636 41947, 41953, 41957, 41959, 41969, 41981, 41983, 41999,
637 42013, 42017, 42019, 42023, 42043, 42061, 42071, 42073,
638 42083, 42089, 42101, 42131, 42139, 42157, 42169, 42179,
639 42181, 42187, 42193, 42197, 42209, 42221, 42223, 42227,
640 42239, 42257, 42281, 42283, 42293, 42299, 42307, 42323,
641 42331, 42337, 42349, 42359, 42373, 42379, 42391, 42397,
642 42403, 42407, 42409, 42433, 42437, 42443, 42451, 42457,
643 42461, 42463, 42467, 42473, 42487, 42491, 42499, 42509,
644 42533, 42557, 42569, 42571, 42577, 42589, 42611, 42641,
645 42643, 42649, 42667, 42677, 42683, 42689, 42697, 42701,
646 42703, 42709, 42719, 42727, 42737, 42743, 42751, 42767,
647 42773, 42787, 42793, 42797, 42821, 42829, 42839, 42841,
648 42853, 42859, 42863, 42899, 42901, 42923, 42929, 42937,
649 42943, 42953, 42961, 42967, 42979, 42989, 43003, 43013,
650 43019, 43037, 43049, 43051, 43063, 43067, 43093, 43103,
651 43117, 43133, 43151, 43159, 43177, 43189, 43201, 43207,
652 43223, 43237, 43261, 43271, 43283, 43291, 43313, 43319,
653 43321, 43331, 43391, 43397, 43399, 43403, 43411, 43427,
654 43441, 43451, 43457, 43481, 43487, 43499, 43517, 43541,
655 43543, 43573, 43577, 43579, 43591, 43597, 43607, 43609,
656 43613, 43627, 43633, 43649, 43651, 43661, 43669, 43691,
657 43711, 43717, 43721, 43753, 43759, 43777, 43781, 43783,
658 43787, 43789, 43793, 43801, 43853, 43867, 43889, 43891,
659 43913, 43933, 43943, 43951, 43961, 43963, 43969, 43973,
660 43987, 43991, 43997, 44017, 44021, 44027, 44029, 44041,
661 44053, 44059, 44071, 44087, 44089, 44101, 44111, 44119,
662 44123, 44129, 44131, 44159, 44171, 44179, 44189, 44201,
663 44203, 44207, 44221, 44249, 44257, 44263, 44267, 44269,
664 44273, 44279, 44281, 44293, 44351, 44357, 44371, 44381,
665 44383, 44389, 44417, 44449, 44453, 44483, 44491, 44497,
666 44501, 44507, 44519, 44531, 44533, 44537, 44543, 44549,
667 44563, 44579, 44587, 44617, 44621, 44623, 44633, 44641,
668 44647, 44651, 44657, 44683, 44687, 44699, 44701, 44711,
669 44729, 44741, 44753, 44771, 44773, 44777, 44789, 44797,
670 44809, 44819, 44839, 44843, 44851, 44867, 44879, 44887,
671 44893, 44909, 44917, 44927, 44939, 44953, 44959, 44963,
672 44971, 44983, 44987, 45007, 45013, 45053, 45061, 45077,
673 45083, 45119, 45121, 45127, 45131, 45137, 45139, 45161,
674 45179, 45181, 45191, 45197, 45233, 45247, 45259, 45263,
675 45281, 45289, 45293, 45307, 45317, 45319, 45329, 45337,
676 45341, 45343, 45361, 45377, 45389, 45403, 45413, 45427,
677 45433, 45439, 45481, 45491, 45497, 45503, 45523, 45533,
678 45541, 45553, 45557, 45569, 45587, 45589, 45599, 45613,
679 45631, 45641, 45659, 45667, 45673, 45677, 45691, 45697,
680 45707, 45737, 45751, 45757, 45763, 45767, 45779, 45817,
681 45821, 45823, 45827, 45833, 45841, 45853, 45863, 45869,
682 45887, 45893, 45943, 45949, 45953, 45959, 45971, 45979,
683 45989, 46021, 46027, 46049, 46051, 46061, 46073, 46091,
684 46093, 46099, 46103, 46133, 46141, 46147, 46153, 46171,
685 46181, 46183, 46187, 46199, 46219, 46229, 46237, 46261,
686 46271, 46273, 46279, 46301, 46307, 46309, 46327, 46337,
687 46349, 46351, 46381, 46399, 46411, 46439, 46441, 46447,
688 46451, 46457, 46471, 46477, 46489, 46499, 46507, 46511,
689 46523, 46549, 46559, 46567, 46573, 46589, 46591, 46601,
690 46619, 46633, 46639, 46643, 46649, 46663, 46679, 46681,
691 46687, 46691, 46703, 46723, 46727, 46747, 46751, 46757,
692 46769, 46771, 46807, 46811, 46817, 46819, 46829, 46831,
693 46853, 46861, 46867, 46877, 46889, 46901, 46919, 46933,
694 46957, 46993, 46997, 47017, 47041, 47051, 47057, 47059,
695 47087, 47093, 47111, 47119, 47123, 47129, 47137, 47143,
696 47147, 47149, 47161, 47189, 47207, 47221, 47237, 47251,
697 47269, 47279, 47287, 47293, 47297, 47303, 47309, 47317,
698 47339, 47351, 47353, 47363, 47381, 47387, 47389, 47407,
699 47417, 47419, 47431, 47441, 47459, 47491, 47497, 47501,
700 47507, 47513, 47521, 47527, 47533, 47543, 47563, 47569,
701 47581, 47591, 47599, 47609, 47623, 47629, 47639, 47653,
702 47657, 47659, 47681, 47699, 47701, 47711, 47713, 47717,
703 47737, 47741, 47743, 47777, 47779, 47791, 47797, 47807,
704 47809, 47819, 47837, 47843, 47857, 47869, 47881, 47903,
705 47911, 47917, 47933, 47939, 47947, 47951, 47963, 47969,
706 47977, 47981, 48017, 48023, 48029, 48049, 48073, 48079,
707 48091, 48109, 48119, 48121, 48131, 48157, 48163, 48179,
708 48187, 48193, 48197, 48221, 48239, 48247, 48259, 48271,
709 48281, 48299, 48311, 48313, 48337, 48341, 48353, 48371,
710 48383, 48397, 48407, 48409, 48413, 48437, 48449, 48463,
711 48473, 48479, 48481, 48487, 48491, 48497, 48523, 48527,
712 48533, 48539, 48541, 48563, 48571, 48589, 48593, 48611,
713 48619, 48623, 48647, 48649, 48661, 48673, 48677, 48679,
714 48731, 48733, 48751, 48757, 48761, 48767, 48779, 48781,
715 48787, 48799, 48809, 48817, 48821, 48823, 48847, 48857,
716 48859, 48869, 48871, 48883, 48889, 48907, 48947, 48953,
717 48973, 48989, 48991, 49003, 49009, 49019, 49031, 49033,
718 49037, 49043, 49057, 49069, 49081, 49103, 49109, 49117,
719 49121, 49123, 49139, 49157, 49169, 49171, 49177, 49193,
720 49199, 49201, 49207, 49211, 49223, 49253, 49261, 49277,
721 49279, 49297, 49307, 49331, 49333, 49339, 49363, 49367,
722 49369, 49391, 49393, 49409, 49411, 49417, 49429, 49433,
723 49451, 49459, 49463, 49477, 49481, 49499, 49523, 49529,
724 49531, 49537, 49547, 49549, 49559, 49597, 49603, 49613,
725 49627, 49633, 49639, 49663, 49667, 49669, 49681, 49697,
726 49711, 49727, 49739, 49741, 49747, 49757, 49783, 49787,
727 49789, 49801, 49807, 49811, 49823, 49831, 49843, 49853,
728 49871, 49877, 49891, 49919, 49921, 49927, 49937, 49939,
729 49943, 49957, 49991, 49993, 49999, 50021, 50023, 50033,
730 50047, 50051, 50053, 50069, 50077, 50087, 50093, 50101,
731 50111, 50119, 50123, 50129, 50131, 50147, 50153, 50159,
732 50177, 50207, 50221, 50227, 50231, 50261, 50263, 50273,
733 50287, 50291, 50311, 50321, 50329, 50333, 50341, 50359,
734 50363, 50377, 50383, 50387, 50411, 50417, 50423, 50441,
735 50459, 50461, 50497, 50503, 50513, 50527, 50539, 50543,
736 50549, 50551, 50581, 50587, 50591, 50593, 50599, 50627,
737 50647, 50651, 50671, 50683, 50707, 50723, 50741, 50753,
738 50767, 50773, 50777, 50789, 50821, 50833, 50839, 50849,
739 50857, 50867, 50873, 50891, 50893, 50909, 50923, 50929,
740 50951, 50957, 50969, 50971, 50989, 50993, 51001, 51031,
741 51043, 51047, 51059, 51061, 51071, 51109, 51131, 51133,
742 51137, 51151, 51157, 51169, 51193, 51197, 51199, 51203,
743 51217, 51229, 51239, 51241, 51257, 51263, 51283, 51287,
744 51307, 51329, 51341, 51343, 51347, 51349, 51361, 51383,
745 51407, 51413, 51419, 51421, 51427, 51431, 51437, 51439,
746 51449, 51461, 51473, 51479, 51481, 51487, 51503, 51511,
747 51517, 51521, 51539, 51551, 51563, 51577, 51581, 51593,
748 51599, 51607, 51613, 51631, 51637, 51647, 51659, 51673,
749 51679, 51683, 51691, 51713, 51719, 51721, 51749, 51767,
750 51769, 51787, 51797, 51803, 51817, 51827, 51829, 51839,
751 51853, 51859, 51869, 51871, 51893, 51899, 51907, 51913,
752 51929, 51941, 51949, 51971, 51973, 51977, 51991, 52009,
753 52021, 52027, 52051, 52057, 52067, 52069, 52081, 52103,
754 52121, 52127, 52147, 52153, 52163, 52177, 52181, 52183,
755 52189, 52201, 52223, 52237, 52249, 52253, 52259, 52267,
756 52289, 52291, 52301, 52313, 52321, 52361, 52363, 52369,
757 52379, 52387, 52391, 52433, 52453, 52457, 52489, 52501,
758 52511, 52517, 52529, 52541, 52543, 52553, 52561, 52567,
759 52571, 52579, 52583, 52609, 52627, 52631, 52639, 52667,
760 52673, 52691, 52697, 52709, 52711, 52721, 52727, 52733,
761 52747, 52757, 52769, 52783, 52807, 52813, 52817, 52837,
762 52859, 52861, 52879, 52883, 52889, 52901, 52903, 52919,
763 52937, 52951, 52957, 52963, 52967, 52973, 52981, 52999,
764 53003, 53017, 53047, 53051, 53069, 53077, 53087, 53089,
765 53093, 53101, 53113, 53117, 53129, 53147, 53149, 53161,
766 53171, 53173, 53189, 53197, 53201, 53231, 53233, 53239,
767 53267, 53269, 53279, 53281, 53299, 53309, 53323, 53327,
768 53353, 53359, 53377, 53381, 53401, 53407, 53411, 53419,
769 53437, 53441, 53453, 53479, 53503, 53507, 53527, 53549,
770 53551, 53569, 53591, 53593, 53597, 53609, 53611, 53617,
771 53623, 53629, 53633, 53639, 53653, 53657, 53681, 53693,
772 53699, 53717, 53719, 53731, 53759, 53773, 53777, 53783,
773 53791, 53813, 53819, 53831, 53849, 53857, 53861, 53881,
774 53887, 53891, 53897, 53899, 53917, 53923, 53927, 53939,
775 53951, 53959, 53987, 53993, 54001, 54011, 54013, 54037,
776 54049, 54059, 54083, 54091, 54101, 54121, 54133, 54139,
777 54151, 54163, 54167, 54181, 54193, 54217, 54251, 54269,
778 54277, 54287, 54293, 54311, 54319, 54323, 54331, 54347,
779 54361, 54367, 54371, 54377, 54401, 54403, 54409, 54413,
780 54419, 54421, 54437, 54443, 54449, 54469, 54493, 54497,
781 54499, 54503, 54517, 54521, 54539, 54541, 54547, 54559,
782 54563, 54577, 54581, 54583, 54601, 54617, 54623, 54629,
783 54631, 54647, 54667, 54673, 54679, 54709, 54713, 54721,
784 54727, 54751, 54767, 54773, 54779, 54787, 54799, 54829,
785 54833, 54851, 54869, 54877, 54881, 54907, 54917, 54919,
786 54941, 54949, 54959, 54973, 54979, 54983, 55001, 55009,
787 55021, 55049, 55051, 55057, 55061, 55073, 55079, 55103,
788 55109, 55117, 55127, 55147, 55163, 55171, 55201, 55207,
789 55213, 55217, 55219, 55229, 55243, 55249, 55259, 55291,
790 55313, 55331, 55333, 55337, 55339, 55343, 55351, 55373,
791 55381, 55399, 55411, 55439, 55441, 55457, 55469, 55487,
792 55501, 55511, 55529, 55541, 55547, 55579, 55589, 55603,
793 55609, 55619, 55621, 55631, 55633, 55639, 55661, 55663,
794 55667, 55673, 55681, 55691, 55697, 55711, 55717, 55721,
795 55733, 55763, 55787, 55793, 55799, 55807, 55813, 55817,
796 55819, 55823, 55829, 55837, 55843, 55849, 55871, 55889,
797 55897, 55901, 55903, 55921, 55927, 55931, 55933, 55949,
798 55967, 55987, 55997, 56003, 56009, 56039, 56041, 56053,
799 56081, 56087, 56093, 56099, 56101, 56113, 56123, 56131,
800 56149, 56167, 56171, 56179, 56197, 56207, 56209, 56237,
801 56239, 56249, 56263, 56267, 56269, 56299, 56311, 56333,
802 56359, 56369, 56377, 56383, 56393, 56401, 56417, 56431,
803 56437, 56443, 56453, 56467, 56473, 56477, 56479, 56489,
804 56501, 56503, 56509, 56519, 56527, 56531, 56533, 56543,
805 56569, 56591, 56597, 56599, 56611, 56629, 56633, 56659,
806 56663, 56671, 56681, 56687, 56701, 56711, 56713, 56731,
807 56737, 56747, 56767, 56773, 56779, 56783, 56807, 56809,
808 56813, 56821, 56827, 56843, 56857, 56873, 56891, 56893,
809 56897, 56909, 56911, 56921, 56923, 56929, 56941, 56951,
810 56957, 56963, 56983, 56989, 56993, 56999, 57037, 57041,
811 57047, 57059, 57073, 57077, 57089, 57097, 57107, 57119,
812 57131, 57139, 57143, 57149, 57163, 57173, 57179, 57191,
813 57193, 57203, 57221, 57223, 57241, 57251, 57259, 57269,
814 57271, 57283, 57287, 57301, 57329, 57331, 57347, 57349,
815 57367, 57373, 57383, 57389, 57397, 57413, 57427, 57457,
816 57467, 57487, 57493, 57503, 57527, 57529, 57557, 57559,
817 57571, 57587, 57593, 57601, 57637, 57641, 57649, 57653,
818 57667, 57679, 57689, 57697, 57709, 57713, 57719, 57727,
819 57731, 57737, 57751, 57773, 57781, 57787, 57791, 57793,
820 57803, 57809, 57829, 57839, 57847, 57853, 57859, 57881,
821 57899, 57901, 57917, 57923, 57943, 57947, 57973, 57977,
822 57991, 58013, 58027, 58031, 58043, 58049, 58057, 58061,
823 58067, 58073, 58099, 58109, 58111, 58129, 58147, 58151,
824 58153, 58169, 58171, 58189, 58193, 58199, 58207, 58211,
825 58217, 58229, 58231, 58237, 58243, 58271, 58309, 58313,
826 58321, 58337, 58363, 58367, 58369, 58379, 58391, 58393,
827 58403, 58411, 58417, 58427, 58439, 58441, 58451, 58453,
828 58477, 58481, 58511, 58537, 58543, 58549, 58567, 58573,
829 58579, 58601, 58603, 58613, 58631, 58657, 58661, 58679,
830 58687, 58693, 58699, 58711, 58727, 58733, 58741, 58757,
831 58763, 58771, 58787, 58789, 58831, 58889, 58897, 58901,
832 58907, 58909, 58913, 58921, 58937, 58943, 58963, 58967,
833 58979, 58991, 58997, 59009, 59011, 59021, 59023, 59029,
834 59051, 59053, 59063, 59069, 59077, 59083, 59093, 59107,
835 59113, 59119, 59123, 59141, 59149, 59159, 59167, 59183,
836 59197, 59207, 59209, 59219, 59221, 59233, 59239, 59243,
837 59263, 59273, 59281, 59333, 59341, 59351, 59357, 59359,
838 59369, 59377, 59387, 59393, 59399, 59407, 59417, 59419,
839 59441, 59443, 59447, 59453, 59467, 59471, 59473, 59497,
840 59509, 59513, 59539, 59557, 59561, 59567, 59581, 59611,
841 59617, 59621, 59627, 59629, 59651, 59659, 59663, 59669,
842 59671, 59693, 59699, 59707, 59723, 59729, 59743, 59747,
843 59753, 59771, 59779, 59791, 59797, 59809, 59833, 59863,
844 59879, 59887, 59921, 59929, 59951, 59957, 59971, 59981,
845 59999, 60013, 60017, 60029, 60037, 60041, 60077, 60083,
846 60089, 60091, 60101, 60103, 60107, 60127, 60133, 60139,
847 60149, 60161, 60167, 60169, 60209, 60217, 60223, 60251,
848 60257, 60259, 60271, 60289, 60293, 60317, 60331, 60337,
849 60343, 60353, 60373, 60383, 60397, 60413, 60427, 60443,
850 60449, 60457, 60493, 60497, 60509, 60521, 60527, 60539,
851 60589, 60601, 60607, 60611, 60617, 60623, 60631, 60637,
852 60647, 60649, 60659, 60661, 60679, 60689, 60703, 60719,
853 60727, 60733, 60737, 60757, 60761, 60763, 60773, 60779,
854 60793, 60811, 60821, 60859, 60869, 60887, 60889, 60899,
855 60901, 60913, 60917, 60919, 60923, 60937, 60943, 60953,
856 60961, 61001, 61007, 61027, 61031, 61043, 61051, 61057,
857 61091, 61099, 61121, 61129, 61141, 61151, 61153, 61169,
858 61211, 61223, 61231, 61253, 61261, 61283, 61291, 61297,
859 61331, 61333, 61339, 61343, 61357, 61363, 61379, 61381,
860 61403, 61409, 61417, 61441, 61463, 61469, 61471, 61483,
861 61487, 61493, 61507, 61511, 61519, 61543, 61547, 61553,
862 61559, 61561, 61583, 61603, 61609, 61613, 61627, 61631,
863 61637, 61643, 61651, 61657, 61667, 61673, 61681, 61687,
864 61703, 61717, 61723, 61729, 61751, 61757, 61781, 61813,
865 61819, 61837, 61843, 61861, 61871, 61879, 61909, 61927,
866 61933, 61949, 61961, 61967, 61979, 61981, 61987, 61991,
867 62003, 62011, 62017, 62039, 62047, 62053, 62057, 62071,
868 62081, 62099, 62119, 62129, 62131, 62137, 62141, 62143,
869 62171, 62189, 62191, 62201, 62207, 62213, 62219, 62233,
870 62273, 62297, 62299, 62303, 62311, 62323, 62327, 62347,
871 62351, 62383, 62401, 62417, 62423, 62459, 62467, 62473,
872 62477, 62483, 62497, 62501, 62507, 62533, 62539, 62549,
873 62563, 62581, 62591, 62597, 62603, 62617, 62627, 62633,
874 62639, 62653, 62659, 62683, 62687, 62701, 62723, 62731,
875 62743, 62753, 62761, 62773, 62791, 62801, 62819, 62827,
876 62851, 62861, 62869, 62873, 62897, 62903, 62921, 62927,
877 62929, 62939, 62969, 62971, 62981, 62983, 62987, 62989,
878 63029, 63031, 63059, 63067, 63073, 63079, 63097, 63103,
879 63113, 63127, 63131, 63149, 63179, 63197, 63199, 63211,
880 63241, 63247, 63277, 63281, 63299, 63311, 63313, 63317,
881 63331, 63337, 63347, 63353, 63361, 63367, 63377, 63389,
882 63391, 63397, 63409, 63419, 63421, 63439, 63443, 63463,
883 63467, 63473, 63487, 63493, 63499, 63521, 63527, 63533,
884 63541, 63559, 63577, 63587, 63589, 63599, 63601, 63607,
885 63611, 63617, 63629, 63647, 63649, 63659, 63667, 63671,
886 63689, 63691, 63697, 63703, 63709, 63719, 63727, 63737,
887 63743, 63761, 63773, 63781, 63793, 63799, 63803, 63809,
888 63823, 63839, 63841, 63853, 63857, 63863, 63901, 63907,
889 63913, 63929, 63949, 63977, 63997, 64007, 64013, 64019,
890 64033, 64037, 64063, 64067, 64081, 64091, 64109, 64123,
891 64151, 64153, 64157, 64171, 64187, 64189, 64217, 64223,
892 64231, 64237, 64271, 64279, 64283, 64301, 64303, 64319,
893 64327, 64333, 64373, 64381, 64399, 64403, 64433, 64439,
894 64451, 64453, 64483, 64489, 64499, 64513, 64553, 64567,
895 64577, 64579, 64591, 64601, 64609, 64613, 64621, 64627,
896 64633, 64661, 64663, 64667, 64679, 64693, 64709, 64717,
897 64747, 64763, 64781, 64783, 64793, 64811, 64817, 64849,
898 64853, 64871, 64877, 64879, 64891, 64901, 64919, 64921,
899 64927, 64937, 64951, 64969, 64997, 65003, 65011, 65027,
900 65029, 65033, 65053, 65063, 65071, 65089, 65099, 65101,
901 65111, 65119, 65123, 65129, 65141, 65147, 65167, 65171,
902 65173, 65179, 65183, 65203, 65213, 65239, 65257, 65267,
903 65269, 65287, 65293, 65309, 65323, 65327, 65353, 65357,
904 65371, 65381, 65393, 65407, 65413, 65419, 65423, 65437,
905 65447, 65449, 65479, 65497, 65519, 65521
908 long nthPrime(int n)
910 if (n<0 || n>=NUMPRIMES) return 0;
911 return primeslist[n];
914 long findPrime(int n)
916 // binary search of primes table
917 int i, p, lo = 0, hi = NUMPRIMES-1;
918 while (hi>=lo) {
919 i = (lo + hi) >> 1;
920 p = nthPrime(i);
921 if (n==p) return i;
922 if (n<p) hi = i - 1;
923 else lo = i + 1;
925 return -1;
928 long prevPrime(int n)
930 // binary search of primes table
931 int i, p, lo = 0, hi = NUMPRIMES-1;
932 while (hi>=lo) {
933 i = (lo + hi) >> 1;
934 p = nthPrime(i);
935 if (n==p) return i;
936 if (n<p) hi = i - 1;
937 else lo = i + 1;
939 return sc_clip(hi, 0, NUMPRIMES-1);
942 long nextPrime(int n)
944 // binary search of primes table
945 int i, p, lo = 0, hi = NUMPRIMES-1;
946 while (hi>=lo) {
947 i = (lo + hi) >> 1;
948 p = nthPrime(i);
949 if (n==p) return i;
950 if (n<p) hi = i - 1;
951 else lo = i + 1;
953 return sc_clip(lo, 0, NUMPRIMES-1);