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