1 | // Adapted from https://github.com/Alexhuszagh/rust-lexical. |
2 | |
3 | //! Precalculated large powers for 64-bit limbs. |
4 | |
5 | /// Large powers (&[u64]) for base5 operations. |
6 | const POW5_1: [u64; 1] = [5]; |
7 | const POW5_2: [u64; 1] = [25]; |
8 | const POW5_3: [u64; 1] = [625]; |
9 | const POW5_4: [u64; 1] = [390625]; |
10 | const POW5_5: [u64; 1] = [152587890625]; |
11 | const POW5_6: [u64; 2] = [3273344365508751233, 1262]; |
12 | const POW5_7: [u64; 3] = [7942358959831785217, 16807427164405733357, 1593091]; |
13 | const POW5_8: [u64; 5] = [ |
14 | 279109966635548161, |
15 | 2554917779393558781, |
16 | 14124656261812188652, |
17 | 11976055582626787546, |
18 | 2537941837315, |
19 | ]; |
20 | const POW5_9: [u64; 10] = [ |
21 | 13750482914757213185, |
22 | 1302999927698857842, |
23 | 14936872543252795590, |
24 | 2788415840139466767, |
25 | 2095640732773017264, |
26 | 7205570348933370714, |
27 | 7348167152523113408, |
28 | 9285516396840364274, |
29 | 6907659600622710236, |
30 | 349175, |
31 | ]; |
32 | const POW5_10: [u64; 19] = [ |
33 | 8643096425819600897, |
34 | 6743743997439985372, |
35 | 14059704609098336919, |
36 | 10729359125898331411, |
37 | 4933048501514368705, |
38 | 12258131603170554683, |
39 | 2172371001088594721, |
40 | 13569903330219142946, |
41 | 13809142207969578845, |
42 | 16716360519037769646, |
43 | 9631256923806107285, |
44 | 12866941232305103710, |
45 | 1397931361048440292, |
46 | 7619627737732970332, |
47 | 12725409486282665900, |
48 | 11703051443360963910, |
49 | 9947078370803086083, |
50 | 13966287901448440471, |
51 | 121923442132, |
52 | ]; |
53 | const POW5_11: [u64; 38] = [ |
54 | 17679772531488845825, |
55 | 2216509366347768155, |
56 | 1568689219195129479, |
57 | 5511594616325588277, |
58 | 1067709417009240089, |
59 | 9070650952098657518, |
60 | 11515285870634858015, |
61 | 2539561553659505564, |
62 | 17604889300961091799, |
63 | 14511540856854204724, |
64 | 12099083339557485471, |
65 | 7115240299237943815, |
66 | 313979240050606788, |
67 | 10004784664717172195, |
68 | 15570268847930131473, |
69 | 10359715202835930803, |
70 | 17685054012115162812, |
71 | 13183273382855797757, |
72 | 7743260039872919062, |
73 | 9284593436392572926, |
74 | 11105921222066415013, |
75 | 18198799323400703846, |
76 | 16314988383739458320, |
77 | 4387527177871570570, |
78 | 8476708682254672590, |
79 | 4925096874831034057, |
80 | 14075687868072027455, |
81 | 112866656203221926, |
82 | 9852830467773230418, |
83 | 25755239915196746, |
84 | 2201493076310172510, |
85 | 8342165458688466438, |
86 | 13954006576066379050, |
87 | 15193819059903295636, |
88 | 12565616718911389531, |
89 | 3815854855847885129, |
90 | 15696762163583540628, |
91 | 805, |
92 | ]; |
93 | const POW5_12: [u64; 75] = [ |
94 | 16359721904723189761, |
95 | 5323973632697650495, |
96 | 17187956456762001185, |
97 | 3930387638628283780, |
98 | 3374723710406992273, |
99 | 16884225088663222131, |
100 | 10967440051041439154, |
101 | 9686916182456720060, |
102 | 10554548046311730194, |
103 | 7390739362393647554, |
104 | 6316162333127736719, |
105 | 18122464886584070891, |
106 | 4044404959645932768, |
107 | 3801320885861987401, |
108 | 12080950653257274590, |
109 | 16414324262488991299, |
110 | 16395687498836410113, |
111 | 12173633940896186260, |
112 | 10843185433142632150, |
113 | 11048169832730399808, |
114 | 12674828934734683716, |
115 | 17370808310130582550, |
116 | 10500926985433408692, |
117 | 10252725158410704555, |
118 | 14170108270502067523, |
119 | 3698946465517688080, |
120 | 989984870770509463, |
121 | 10965601426733943069, |
122 | 11389898658438335655, |
123 | 6901098232861256586, |
124 | 1921335291173932590, |
125 | 7662788640922083388, |
126 | 9775023833308395430, |
127 | 4640401278902814207, |
128 | 14532050972198413359, |
129 | 8378549018693130223, |
130 | 11672322628395371653, |
131 | 8930704142764178555, |
132 | 6275193859483102017, |
133 | 15782593304269205087, |
134 | 8673060659034172558, |
135 | 8018354414354334043, |
136 | 1824896661540749038, |
137 | 11345563346725559868, |
138 | 14959216444480821949, |
139 | 970189517688324683, |
140 | 3338835207603007873, |
141 | 17684964260791738489, |
142 | 1436466329061721851, |
143 | 4554134986752476101, |
144 | 6398757850768963907, |
145 | 4709779218751158342, |
146 | 10033277748582410264, |
147 | 17932125878679265063, |
148 | 10004750887749091440, |
149 | 256584531835386932, |
150 | 14396282740722731628, |
151 | 3086085133731396950, |
152 | 17831272085689600064, |
153 | 10573926491412564693, |
154 | 14888061047859191737, |
155 | 4570995450261499817, |
156 | 10410165022312935266, |
157 | 5691078631447480790, |
158 | 8632710455805418155, |
159 | 790672778942823293, |
160 | 16505464105756800547, |
161 | 2092171438149740401, |
162 | 17505030673829275878, |
163 | 1291290830058928444, |
164 | 14856191690683232796, |
165 | 8916773426496500052, |
166 | 10152003807578858265, |
167 | 13104441193763861714, |
168 | 649395, |
169 | ]; |
170 | const POW5_13: [u64; 149] = [ |
171 | 15308384451594534913, |
172 | 17913664074042735335, |
173 | 6115977719198531863, |
174 | 5794980608663993169, |
175 | 16544350702855106930, |
176 | 9253787637781258566, |
177 | 4977988951675168190, |
178 | 9087837664087448770, |
179 | 2098480401110016986, |
180 | 15474332540882100712, |
181 | 14042133997396540944, |
182 | 1090855284423485362, |
183 | 12639956485351058381, |
184 | 1454115676006639319, |
185 | 3180465001342538023, |
186 | 14649076551958697729, |
187 | 9801292446545910916, |
188 | 13552201410826594004, |
189 | 6101141927469189381, |
190 | 1881431857880609316, |
191 | 4907847477899433595, |
192 | 8714572486973123228, |
193 | 3514969632331374520, |
194 | 11667642286891470094, |
195 | 2391499697425323350, |
196 | 17486585679659076043, |
197 | 18267223761882105642, |
198 | 2886610765822313148, |
199 | 9302834862968900288, |
200 | 15246507846733637044, |
201 | 15924227519624562840, |
202 | 9743741243284697760, |
203 | 3159780987244964246, |
204 | 7304816812369628428, |
205 | 17584602612559717809, |
206 | 4146812420657846766, |
207 | 14525415362681041515, |
208 | 8477630142371600195, |
209 | 4380695748062263745, |
210 | 12119915994367943173, |
211 | 16970630866565485122, |
212 | 4332724980155264503, |
213 | 8079943140620527639, |
214 | 1687908087554405626, |
215 | 17051081099834002166, |
216 | 12638146269730763230, |
217 | 11883749876933445771, |
218 | 4662462156371383785, |
219 | 4796962238316531176, |
220 | 3325504751659868927, |
221 | 6469595803187862550, |
222 | 5852556621152583005, |
223 | 9229334792448387881, |
224 | 17979733373938620709, |
225 | 13951623534175792756, |
226 | 17075879371091039277, |
227 | 14212246479457938037, |
228 | 4008999959804158260, |
229 | 2414266395366403722, |
230 | 3252733766253918247, |
231 | 6382678985007829216, |
232 | 2245927470982310841, |
233 | 13790724502051307301, |
234 | 13116936866733148041, |
235 | 9718402891306794538, |
236 | 13516274400356104875, |
237 | 17859223875778049403, |
238 | 4396895129099725471, |
239 | 3563053650368467915, |
240 | 12176845952536972668, |
241 | 3492050964335269015, |
242 | 2740656767075170753, |
243 | 4409704077614761919, |
244 | 10237775279597492710, |
245 | 3314206875098230827, |
246 | 16437361028114095448, |
247 | 12361736225407656572, |
248 | 16792510651790145480, |
249 | 11449053143229929935, |
250 | 18336641737580333136, |
251 | 6558939822118891088, |
252 | 4606255756908155300, |
253 | 2360792578991605004, |
254 | 160428430149144538, |
255 | 11644861220729221511, |
256 | 10785178451159739786, |
257 | 14923560618031934681, |
258 | 1902620814992781610, |
259 | 14064076995338910412, |
260 | 11547019064112212657, |
261 | 16847481479966225734, |
262 | 8331994491163145469, |
263 | 11739712981738851885, |
264 | 8008309968651120619, |
265 | 10266969595459035264, |
266 | 15175153381217702033, |
267 | 12208659352573720245, |
268 | 7714061140750342961, |
269 | 2892831567213510541, |
270 | 15453714249045017319, |
271 | 71020323573871677, |
272 | 15431137995750602633, |
273 | 5659146884637671933, |
274 | 5998809010488554503, |
275 | 16552192379299157850, |
276 | 1192197967194298797, |
277 | 16157555793424861524, |
278 | 10929371590994640255, |
279 | 3194469143425738352, |
280 | 6651586784672005225, |
281 | 11062427140788057791, |
282 | 6834443579468668318, |
283 | 16421563197797455922, |
284 | 6251046422506172884, |
285 | 13952303462156793860, |
286 | 16632486601871393224, |
287 | 11313454360291325172, |
288 | 5587835232504462834, |
289 | 3105197524618514637, |
290 | 18268568531031972989, |
291 | 2397205535804309313, |
292 | 59413027864729597, |
293 | 11869878125348715710, |
294 | 12592801707270523266, |
295 | 8070632061321113656, |
296 | 18403647807860650811, |
297 | 267109013517069093, |
298 | 6537214311028855260, |
299 | 5220826919973709902, |
300 | 3448740582779163661, |
301 | 16822239213112884941, |
302 | 5975299384311048185, |
303 | 10294433804430712138, |
304 | 4739856055412448774, |
305 | 12057273038326387897, |
306 | 13119002941950056609, |
307 | 3354445304051737058, |
308 | 13592813067499314594, |
309 | 3890182464434078629, |
310 | 17820384357466425060, |
311 | 9785228118969879380, |
312 | 1778431746734556271, |
313 | 10075313876350055029, |
314 | 13994048489400919028, |
315 | 17948287074199726448, |
316 | 2815088342305858722, |
317 | 2676626035777198370, |
318 | 1174257960026283968, |
319 | 421714788677, |
320 | ]; |
321 | const POW5_14: [u64; 298] = [ |
322 | 11471884475673051137, |
323 | 8902860357476377573, |
324 | 13350296775839230505, |
325 | 10609191786344608888, |
326 | 7261211985859587338, |
327 | 11439672689354862964, |
328 | 16789708072300570627, |
329 | 4607056528866348430, |
330 | 3202978990421512997, |
331 | 2024899620433984146, |
332 | 17666950207239811774, |
333 | 4233228489390288200, |
334 | 9137580478688460738, |
335 | 4060411066587388546, |
336 | 11119949806060600124, |
337 | 867715462473090103, |
338 | 14382394941384869610, |
339 | 4856042377419278489, |
340 | 8265605599571137921, |
341 | 538981667666252469, |
342 | 4270263388700786523, |
343 | 3281140600308898503, |
344 | 4121392524544394174, |
345 | 2077884106245940229, |
346 | 9773041957329767574, |
347 | 7550623316597646685, |
348 | 8611033926449791714, |
349 | 18137922955420802793, |
350 | 2796546741236224013, |
351 | 15477096484628446761, |
352 | 9517540128113714010, |
353 | 9471917970500821378, |
354 | 15938570248662483124, |
355 | 5228016831978462619, |
356 | 15720991252586974501, |
357 | 7662829825220776698, |
358 | 17328310068068434348, |
359 | 3371736428170309730, |
360 | 3803724952191098855, |
361 | 13115926536504376719, |
362 | 16752571196153442257, |
363 | 16540185467776259880, |
364 | 3432518182450051120, |
365 | 5880364967211798870, |
366 | 12355748840305392783, |
367 | 14196090758536469575, |
368 | 7370123524686686319, |
369 | 6819740424617592686, |
370 | 13037938013537368753, |
371 | 15029273671291927100, |
372 | 3671312928327205696, |
373 | 7473228676544792780, |
374 | 17234079691312938123, |
375 | 14164740848093544419, |
376 | 13169904779481875902, |
377 | 7179036968465894054, |
378 | 8244653688947194445, |
379 | 17179797746073799490, |
380 | 5591970751047577674, |
381 | 17530550506268329742, |
382 | 5965746721852312330, |
383 | 1604149463243472865, |
384 | 7734199791463116918, |
385 | 11305790396015856714, |
386 | 4441196105025505137, |
387 | 13046431581185664762, |
388 | 124776524294606713, |
389 | 1134521334706523966, |
390 | 11671728093344476434, |
391 | 14103440020972933148, |
392 | 3966727403013869059, |
393 | 9828094508409132821, |
394 | 4355682486381147287, |
395 | 10261407143988481234, |
396 | 3800455155249557199, |
397 | 12700901937937547500, |
398 | 18184475466894579360, |
399 | 13267691151779895412, |
400 | 4714157123477697445, |
401 | 10770360171308585263, |
402 | 9083344917597998040, |
403 | 12078649873810212155, |
404 | 18218989082046199377, |
405 | 4454285072780637351, |
406 | 5287307245618354742, |
407 | 16042289702059031730, |
408 | 4131926574212754010, |
409 | 217692071448455473, |
410 | 3624845916216282093, |
411 | 2901203491797614218, |
412 | 6679177724033967080, |
413 | 44561358851332790, |
414 | 9094639944041587162, |
415 | 13690915012276084311, |
416 | 1408896670826320686, |
417 | 5359130319612337580, |
418 | 6148412925099835601, |
419 | 5211368532286409612, |
420 | 11386360825549027374, |
421 | 16895182466965795071, |
422 | 3392940493846427241, |
423 | 438089879085393580, |
424 | 4783928372776399972, |
425 | 6278117363595909959, |
426 | 12569481049412674733, |
427 | 15648622492570893902, |
428 | 1966316336235305115, |
429 | 1603775390515993547, |
430 | 13576113010204316709, |
431 | 10821754650102840474, |
432 | 18198222517222903152, |
433 | 6966163076615302988, |
434 | 1373932372410129684, |
435 | 3285839581819684990, |
436 | 30177575069719475, |
437 | 16447047871247307061, |
438 | 11618654126674833808, |
439 | 990072222556306872, |
440 | 1260682336135768017, |
441 | 13862055046689532489, |
442 | 15668483092844698432, |
443 | 1879572630092764264, |
444 | 13912027797058626108, |
445 | 6231679788219816920, |
446 | 13857858054844167403, |
447 | 18101470072534728857, |
448 | 4144579812461609229, |
449 | 7048589655616599284, |
450 | 9946956499532694630, |
451 | 9771303850109874038, |
452 | 6477823708780339765, |
453 | 17526247621747041971, |
454 | 13525995675852669549, |
455 | 3928768291901239810, |
456 | 8094153383078124544, |
457 | 11214278667728965552, |
458 | 11251547162596832610, |
459 | 5964946855123292381, |
460 | 3622548288590237903, |
461 | 13469765967150053587, |
462 | 17798986288523466082, |
463 | 14684592818807932259, |
464 | 16724077276802963921, |
465 | 7119877993753121290, |
466 | 1864571304902781632, |
467 | 12871984921385213812, |
468 | 9065447042604670298, |
469 | 3987130777300360550, |
470 | 6890545752116901685, |
471 | 17275341711601865750, |
472 | 6296474927799264658, |
473 | 1257436973037243463, |
474 | 13854281781965301421, |
475 | 1657132483318662716, |
476 | 17309399540017292849, |
477 | 12808111630089217242, |
478 | 1098489625264462071, |
479 | 14010458905686364135, |
480 | 16134414519481621220, |
481 | 14288255900328821475, |
482 | 3469093466388187882, |
483 | 15982710881468295872, |
484 | 4056765540058056052, |
485 | 15945176389096104089, |
486 | 8625339365793505375, |
487 | 12316179968863788913, |
488 | 15334123773538054321, |
489 | 9536238824220581765, |
490 | 16080825720106203271, |
491 | 6235695225418121745, |
492 | 12035192956458019349, |
493 | 3235835166714703698, |
494 | 5348960676912581218, |
495 | 15315062772709464647, |
496 | 17335089708021308662, |
497 | 16855855317958414409, |
498 | 2369751139431140406, |
499 | 3693542588628609043, |
500 | 7350405893393987577, |
501 | 17402072586341663801, |
502 | 7007897690013647122, |
503 | 15671767872059304758, |
504 | 9259490518292347915, |
505 | 14836045474406130394, |
506 | 4654005815464502513, |
507 | 6487825998330548401, |
508 | 7013356660323385022, |
509 | 7136200343936679946, |
510 | 15341236858676437716, |
511 | 3657357368867197449, |
512 | 12621075530054608378, |
513 | 5603868621997066972, |
514 | 7683447656788439942, |
515 | 450883379216880060, |
516 | 14291494350184945047, |
517 | 5466258454997635048, |
518 | 14206933098432772126, |
519 | 4775870327277641692, |
520 | 1864430798867181939, |
521 | 13748978265070608793, |
522 | 12250822864261576589, |
523 | 12561896977498605296, |
524 | 16060949594257359328, |
525 | 17775189113543311529, |
526 | 11835965177892927035, |
527 | 4218664174878121437, |
528 | 3499000902478111683, |
529 | 15169853304359126294, |
530 | 7076121963053575143, |
531 | 832652347668916805, |
532 | 1292148207755194737, |
533 | 7556838978364207852, |
534 | 5904021986723518500, |
535 | 4610244652288570024, |
536 | 4526508363195533871, |
537 | 746120481022614726, |
538 | 737965197247830486, |
539 | 4006266184415762653, |
540 | 9272188239892688050, |
541 | 15346235246415709678, |
542 | 11850675997347533184, |
543 | 11181059668610842701, |
544 | 6687857983250662774, |
545 | 2908718488661492818, |
546 | 4828337780126983225, |
547 | 18071738646453002184, |
548 | 12790187227727197880, |
549 | 17602483480871623153, |
550 | 12523532189621855977, |
551 | 10598805712727696716, |
552 | 2179787555896149376, |
553 | 2242193929457337594, |
554 | 14908923241136742532, |
555 | 8369182018012550027, |
556 | 13385381554043022324, |
557 | 3332327430110633913, |
558 | 16138090784046208492, |
559 | 16172324607469047339, |
560 | 8279089815915615244, |
561 | 12872906602736235247, |
562 | 10894545290539475621, |
563 | 15428756545851905023, |
564 | 4155747980686992922, |
565 | 4074479178894544043, |
566 | 66083965608603584, |
567 | 13873786284662268377, |
568 | 8861183628277687555, |
569 | 12119497911296021430, |
570 | 2154012318305274287, |
571 | 15490706314503067312, |
572 | 13643145488710608367, |
573 | 672340241093017103, |
574 | 6039493278284091973, |
575 | 9679797700977436461, |
576 | 18070795828318171174, |
577 | 2188146431134935377, |
578 | 5247392385741514952, |
579 | 1852539214842869734, |
580 | 12235621681634112739, |
581 | 8812930319623534062, |
582 | 5585597406294108629, |
583 | 11312989214475901864, |
584 | 1547377291787797995, |
585 | 8641748937186208205, |
586 | 12518148659168623694, |
587 | 6611379197521520985, |
588 | 18096591571068008576, |
589 | 15087021227100112139, |
590 | 13058454842015958418, |
591 | 1473584652966833794, |
592 | 4387660670140018168, |
593 | 8452836916843525402, |
594 | 14376083294443363955, |
595 | 13998026203969090659, |
596 | 611968444648172645, |
597 | 990232438801273845, |
598 | 18001186324715561929, |
599 | 13470591857250177501, |
600 | 14881554140239420091, |
601 | 16696367836720124495, |
602 | 6328076032778459673, |
603 | 17027497695968504616, |
604 | 10192245646262428833, |
605 | 8282482589527318647, |
606 | 4319014353374321425, |
607 | 14134087271041670980, |
608 | 5060230880114618599, |
609 | 13179509240430058600, |
610 | 3903514232614801894, |
611 | 17774749744702165255, |
612 | 15448635507030969726, |
613 | 15983775238358480209, |
614 | 14542832143965487887, |
615 | 9385618098039514666, |
616 | 14431419612662304843, |
617 | 730863073501675978, |
618 | 16750118380379734815, |
619 | 9640, |
620 | ]; |
621 | |
622 | pub(crate) const POW5: [&[u64]; 14] = [ |
623 | &POW5_1, &POW5_2, &POW5_3, &POW5_4, &POW5_5, &POW5_6, &POW5_7, &POW5_8, &POW5_9, &POW5_10, |
624 | &POW5_11, &POW5_12, &POW5_13, &POW5_14, |
625 | ]; |
626 | |