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.
6const POW5_1: [u64; 1] = [5];
7const POW5_2: [u64; 1] = [25];
8const POW5_3: [u64; 1] = [625];
9const POW5_4: [u64; 1] = [390625];
10const POW5_5: [u64; 1] = [152587890625];
11const POW5_6: [u64; 2] = [3273344365508751233, 1262];
12const POW5_7: [u64; 3] = [7942358959831785217, 16807427164405733357, 1593091];
13const POW5_8: [u64; 5] = [
14 279109966635548161,
15 2554917779393558781,
16 14124656261812188652,
17 11976055582626787546,
18 2537941837315,
19];
20const 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];
32const 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];
53const 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];
93const 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];
170const 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];
321const 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
622pub(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