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