p-adic learning note


[TOC]

关于p-adic的数学

写在最前

视频来源,建议配合视频食用。下面是对文案的摘抄翻译和一点点自己的理解。

a with the powers of b: a的b次幂

Intro

我们可能很熟悉2的高次幂,但是我们可能熟悉数位中的隐藏信息,因此我们将十个数字染成不同颜色,并且将2的n次幂形成的数右对齐。

然后我们把这样子的数字一行一行累成一个直角三角形,从远方看,这个三角形的颜色(数字)是没有规律的。

但是如果我们只看几行,比如第1,10,100,1000……行,并且观测更多位数的时候,事情变的奇怪了。实验表明,2^(10^(n+1))的最后几位与2^(10^(n))完全形同,而且随着n的增加,完全相同的位数不断增加。

这表明,当n变大的时候,2的大幂正在收敛到某个确定的东西。

当然当n趋近于无穷大的时候这个数字是会不断变大,不会收敛的,但是这数位较小的这部分相同的数字序列是什么呢?这就是一种新的,我们平时用不到的数字系统。这个新的数字系统提供了实数的替代方案,并且在某些情况下有实用性。


逃离实数域

就好像我们把很大的数字当成小的,小的数字当成大的(这段是感性的理解?)

在此之前,我们先思考一下为什么我们这么喜欢实数。首先实数可以轻松想象成数轴上的点。实数包含所有有理数、整数……支持四则运算,支持极限运算,即是稠密的。

但是实数也有一些缺点,比如实数并不包含-1的平方根。另外一方面,实数并不是唯一的数字系统,有一些系统拥有和实数相同的有用属性,在某些领域犹有过之,比如有些数字系统会包含-1的平方根。

这就是这次的主角,p进数系统。p是个质数

要理解p进数,先从10的幂而不是2的幂开始。

当10^n中的n不断变大的时候,所有数的n位以下的数字都会变成0,所以我们可以理解为这个数越来越接近于0,我们把它连接诶成一个越来越“小”的数。我们定义一个判断p进数位数的定义:(能整除p的最大次方数)分之一。

定义为:10-adic absolute value,下面假设这个词叫绝对值(大概不叫这个,但是我宁可说一个典型错的,也不要造一个可能是错的词语,不过也不一定,毕竟视频里面用的真的是绝对值的符号带上下标p)实际上表示的意义是这个p-adic数的大小。

例如:78000可以被1000整除但不能被10000整除,因此它的10进整数的“绝对值”是实数的1/1000。

同理10亿的绝对值是1/10^9

通常绝对值对应着数轴上的距离,给了我们一张定义数字大小的方法。定义中,大小接近于0的实数在该系统中是小的。当你取更大的n时,你会更加“接近”0,也就是说数字会更“小”。也就是说在10进整数中,10亿是一个很小的数字。虽然它实际上很大,但是我们正在改变对于大小的基本定义。

大小的概念本来与实数相关,因此我们如果选择不同的大小概念,那么大和小将会有完全不同的含义。实数的绝对值很好的对应了数轴上和0的距离,当两个数字的前几位相同的时候,说明两个数字很接近。

但是10进整数系统和数轴无关。在10进整数系统下,当两个数字的租后几位相同时,我们认为两个数字接近。比如10亿和0有9位数字是相同的,他们相当接近。

所以这让我们对10进数的理解成为可能,2^(10^n)不是趋近于无穷大的数,而是一个10进整数。我们可以近似的看成x=10的多项式,其中每一个参数 $a_i$ 都是0~9之间的数字。

例如,2^(10^n)的极限是6, 7, 3, 9, 0, 1等的10进数。我们可以用0来扩展更高位所以这个多项式可以一直往高位写,就像实数中对π或者e的无穷展开式一样。我们认为在10进制中,10的幂是发散的。但是在10进数中10的幂不断变小,收敛于0.如果还不能理解,我们可以把10的幂放在分母中,次数取相反数来形象的写成展开式的样子。为此分母变成了负指数。
$$
\lim_{n\to 0} 2^{10^n}=… + 1\times 10^5 + 0\times 10^4 + 3 \times 10^2 + 7 \times 10 + 6
$$
本质上10进数仍然是一个整数,但是你允许数字无限向左移动。现在我们来确认一下10进数有哪些性质,类比上文中实数所拥有的优良性质。首先10进数没有数轴,或者要构造一个不合常理的数轴,我们把1000放在接近0的位置,100,000放在更加接近0的位置,以此类推。但是我们需要注意不同10进整数可以具有相同的大小。比如,78000和35000的大小都是1/1000.由于没有相应的数轴,所以也就没有正负的概念。在几何意义上的缺失使得10进数有悖常理,所以我们要重建我们的直觉(这句话重复了好几遍了)。

所幸10进数有自己的加减法则。与整数中从左往右的加法方向相反,10进数的加法是从右往左的。(这句话暂时不知道怎么理解)

举例:99999+1=0,所以99999 = -1

也就是说我们可以证明10进整数包含所有负整数

同理10进数也有自己的乘法法则,比如$66667 \times 3 = 1$,也就是说$66667 = \frac{1}{3}$。 因此即使是一些有理数也包含在10进整数中。但不是所有的有理数都被包含在10进整数之中了。

我很遗憾之前似乎弄错了一个概念,在上面大部分对p进数的描述都是p进整数,事实上这个词确实存在,定义的是p进数的类实数展开中没有正次分母项的p进数。

比如$\frac{1}{300}$就可以分解成$ \frac{1}{300} = \frac{1}{3} \times frac{1}{10}^2$所以这个数可以写成这样:
$$
\frac{1}{300} = ….66667 \times \frac{1}{10}^2 = …. + \frac{6}{10^{-2}} + \frac{6}{10^{-1}} + \frac{6}{10^{0}} + \frac{6}{10^{1}} + \frac{7}{10^{2}}
$$
这样,我们可以用p进数(在这里p进整数扩大成了p进数)表示出所有的有理数。

最后我们希望完善除法,现在我们希望知道是不是所有的10进数都可以做除数(哪怕它们不是0),答案是确实不是所有的10进数都可以做除数。当然如果用质数代替10,这个问题会消失。

下面讲一下这个问题:我们假设$\lim_{n\to 0} 2^{10^n} = x_n$,则我们可以构造一个矛盾。

当n变大的时候$x_n \sim x_{n+1}$

也就是说$x^10 = x $

但是经过验证我们可以发现$x^2 = x$这说明$x \times (x - 1) = 0$但事实上x和x-1都不是0.

这里可以构造出矛盾:如果x可以作为除数,则应有$\frac{x}{x} = 1$但是两边如果同乘以x-1,则左边变成0,右边变成x-1 ,这与事实不符。

至于为什么质数p可以避开这个问题视频避开不谈,我更不可能会。而且从2到p-1的数字完美配对,能得到不重不漏的数字,它们的积除以p的余数是1。

综上所述,p进数和实数相比,它没有数轴,也没有bestname(?)。但是它包含所有整数,支持四则运算,也包含所有有理数。和实数一样稠密,只要位数足够多,每个数字都是确定的,因此p进数有极限。


负数的平方根

如果我们令p等于5,我们应当将各个幂用5进制表示。

同样设$\lim_{n\to 0} 2^{5^n} = x_n $

由极限的性质可以知道$x^5 = x $

经计算可以发现$x^2 = -1 $

这个形式很像虚数,这与实数系统完全不同。因为在实数中没有数是-1的平凡根,但是在5进数系统中有。

我们还可以经过计算证明:由$x^5 = x$可以因式分解得到:
$$
( x - 1 ) \times x \times ( x + 1 ) \times ( x^2 + 1 ) = 0
$$
由于x-1,x,x+1均不为0且除法在5进数中是合法的,因此至少有一个因子是0,由此可以知道$ x^2 = -1 $


斐波那契的收敛

我们考察斐波那契数列的第$2^n$项。这个2进数下本身是不收敛的,但是如果我们隔行检查,会发现两部分分别收敛了。所以两个极限分别是某负数的一个平方根。

设$\lim_{n\to 0} 2^n = x_n $


$$
5 \times x_n^2 + 3 = 0
\
5 \times x_{n+1}^2 + 3 = 0
$$
那么这为我们讨论在2-adic中-1的平方根提供了思路。

-1=1111111…11所以我们希望得到的乘积是全部数位为1的数。讨论个位,只有$1 \times 1 = 1$才能满足要求,不能为0.

讨论第二位,如果为0,则$1 \times 0 + 0 \times 1 = 0$不是我们想要的,所以不能是0。如果是1,则$1 \times 1 + 1 \times 1 = 2$即得到0并且进位,均不满足,因此在2-adic系统中没有-1的平方根。

我们可以再考察一下p=3,发现也没有解。但是p=5是有解的。我们可以自己尝试一下p=7或者11等等的情况。(问就是我也没试过)


p-adic的应用

有一种数学问题,我们希望知道当n等于多少的时候$n^2 + 7 = k \times 2^a$?其中n为遍历的值,从1到正无穷。即想知道n等于多少时左边的算式可以有2的高次幂因子。

思考:如果我们希望一个数能被2的高次幂整除,那么我们希望它在2-adic表示下的末尾有很多0.

换言之我们希望$n^2 + 7$在2-adic下趋近于0.

解方程可以得到$x = \sqrt{-7}$。但是实际上2-adic数中是否包含-7的平方根是不确定的,但我们可以用牛顿二分法解出近似值。
$$
Newton’s method : f(x_0) = 0 \Rightarrow f’(x) \times (x - x_0) = f(x) - f(x_0)\
f(x) = x^2 + 7\
x \rightarrow x - \frac{f(x)}{f’(x)} \rightarrow x - \frac{x^2 + 7}{2x}
$$
随机选择x计算结果,然后把结果赋给x,如此迭代。

在实数系统中这个x的数列其实并不收敛,因为它的意义是一个负数的平方根,在实数范围内并不存在。

但是由于2-adic支持除法,这些有理数也是2-adic数,而且这个数列确实2-adic收敛。我们可以得到一个数列,随机选取一个检验,发现确实是可以被2的高次幂整除。


End

这就是padic数系统的优良性质。我们可以利用padic将有理数域扩大,使得极限、连续性和导数等性质适用。

似乎懂了很多东西,又似乎啥都没懂。如果要应用的话,我会把月赛的adic写成这个形式,但是没成功

#leak = pow(g, bytes_to_long(s2), p^666)
import os
from Crypto.Util.number import *
g = 60481606253840272416608492349866939317114665311741132450767745324720776050313

p = 101202160159081561029549739902097099275439197324107563340103725793005952286427
leak = 145972266267791686179516124755817543157252531682841625188366147962557620888751774946595024341751964959462958637767740704050244362462152985298520424383526767163551224157590915649119200665530313855664952686307449662172370551149990816419830543846482044067265040771901318870183546946146219298391300820462051282373217785253431638121086472971289720408927151817897449462090890251179280480230373328534001543369190131288103562274541350897182767547823147275658888378937219551483798886910544206256059282007692413052313308365775280836853691587002021245596869690862710792943150639579857827476757040925500986579393015097135370165674076183065740304622248610264332433079686102010507097696989490836119160927677050600307632804808447640091896112394175372685600622832176387657563647906559626078916220112440773376174070472427267413961491962165537921020950064597215478141922538688697023822004830143232989117059109816484411634879350432345718326280888823826057933629431908548868141018133049003118157238322705222190268998578433884753861658902122142793522686705532385373491383803678615460043492064486310923028100211725909525402495825195887188666432487777352366744033309984028020546170961556181639843415511925839862886125074836964378956047437392995812275873733035379563915628485583919645335853290282995566170790841857247410369941506695809606517570313118453938641615352719028160233600328396754699345704440586646443238405250007230586660062678387944465925320942173853492470884752834808232370250897288080216571109837283960780388512850810964311712073042618017829841674005097024903601671412905941484573676554048715237366622776807994804294245663036300925951849343216728622545034529016418814467401290947389791948339286841135084569734843876081258814444016456592160139685879656940405782304683739961705616586620479846924885540398746126706262740872325876035673602250544090075925468342975771433811802770146398491554595764123313486258053368931636076846775273969976210894965752772729236323916991244872828669056126970049019264022789729980157553183009073813760555471330254491599179620297760418772856446971234087470906020265221639137564833943241638187580239564688312181754734664000096358837330815528627799916409150307850892186372923709297621790324564014350340069455918723822002194932383932203435024989583984308636685129613601422996215531245639166509209314738422281264189551784012360811059579056212611438674767937225829320656353825254201593445639649664411566642114684974223727052348357871695719967561320406172942370767697124011839237666661357072998064089942217458531184388666915335082081043580298419852375051861701785002287940932464108088727429891790928267681616640945027668822571872968502553615560973217353887687456309881761581247121757090814045986615581750870175586667232279078108918181384361653427432835678954367041131293541414792943770870306559294460567263113714455769891182122689472450481425408655576399168481332088378121515424389135601030696334473369047509736543127254169309488060818490981116662282364504242842834023187847737943645004805971196238521540912305892222075738949390779773913536173647021329598752819801024011611075988378433544052817604005780007691239658659142202008104483639598212824607676392319509524304015689199590840360935394715622549840659258612542604632767015683496212791517888339558051155905156139662255513137159644660698093536329509658919003107594011288687349020163862421706792765534566239974274807284601013694029080417898941778597173068349267393995066532749984229507402126613374698708727904110966005845247628337292735517320390037216665026655975221911628898955521771674590504473832146253451551847098346667244580334794935708356193512101650272557185477390246394228048930322920483369169948292685915605781423105725365673819817623583297870474109991013880828630917270188346390389037521027321532886625949428099226389768542732211251864755424890249697466616071674820522342573513918814094241459748284805587845279099040791458974251930994027546034915099409261841429590053143013411418520623709914531626469956398926878171425159980043695094366452705468912970922263058193775157549682475151061687220313007394427987859554607937287817136373840613465673254181970633078587765613458407044215228502245167349637834547505808422873572007311476894678553045111888841465443177801298150689092977439131045365993330080932093291500711742975737671187690362671918201439029864241218521183333832756987322547355250514019591102355640610527841996758345669616167496429513313358385353278355979691560450946030145099137883447938817139212647478850226203989420109723414945098583601359111221637535182490459650161170266372385743339753608434066864846123186458393221314441469086623508927332363572122656722599330458503637334224933267853882434377604317872265620024898412737258331243783160315766285225724401089124965104899001622016601488502861580378555176703696134802643881551703171460405160547821246337523117559430538094191647413936331356989357233921407669140696561941813069169913440714152254956459349057799804025487148521065017039337249519032215189499262192217735160498774186713322969757781186187939968259851917680927765751638244420878298051513824139991067276456855952330507373814549559516538396768287805295404418356828190448332991348001719253484541335337215260871810102818235605713777380395135272455189264749449969067448774449689238202271814472407368261264378795101268498250563287412348015628351182761248449154371885869900979841476945364859796683771715132004784325927301377114428388457504970453994997182450052343135614013280086163391160020954543482543926170341023638025006190286291799020923159903755556904281169202802115293888069779628350231426912935696848077215694290008070108932995571394114813541088336511064486428085041332624371820537873032539295571183990436680563683365172442144266058207004979384862293969193501731778646750283111203559317034373355258273972745150149152655994976721673481521386872914167418880428193175585682383840772948686879085557071383690874172096917319681398340963733927611298025817798055453786542840939489411238411507426840380779110866819791009285431149722925738041087805289122919353060171399397907316211262891839057476297698045552529408608175118027017195254913559555031830515428962910704405653149861904765995299449359084007727374434920579920907817021610456555045410614771575219841633911850087605617880252253660133001485767666999902633174503521484340826194735437680514288398076853396852474065074883062548772277475021946512920385039010273314328952918301033864817773514484154064793825727929479311398354643415588305815179283155711640418181263657997884050105075196698607875821168925698646811650122180689409920284663003840114185969587703909764263807282159633864006571223575641892619612147472351277688488701153708845722760522835486870040360828423730107073229164350989786067630856308135522366430879403004951209650102084297856306376229442231027599890706635509988778401431188788598459434493762214627652051897524259158391423180908744961051559824825145037392441197606861300161137804093543056163102237756955626455823447214625012705491015017398899285639938396487164514194337568202038398274685326211462820284635260066348697890009550776982675770564538347083806757018978592358530146465797249257050337311566180182653951217893751124926500988779498313761821179753107067108986478615471956789877975328245719989304394639263860209220608832280307174451220501106466677767790927177674629170134615210845474617382124059872241578736272455426019541113703078041390609263142896663841565972878868035108497860648416418161299885929707635146552580877469486473056809346690911679211029089502391477426640615027248347825299396722032269048338386174993157952928376276818032109250001017874988192053121063291866491302767727597139629217821335265918229634235691009986375216997655933317029389180900089596901818423717377592942738253357268955050233490736252417742024258837339106770969469931400002111339761422223585593536249453712695113093734372513729533340678276370648947814345448608600848927754737297213172983950274464418998533468698518413061993555580882263880059565430293600281816175511348268965101266443562030207704165324930287589019719188149032857711984361221654251239170897818635068961031602622833405884419612615417542810048644599135103962795899429576220362673434022098617329098639246051412012606896457438002979884611654172746190869230600465560683627866779202860143846180780148209959577075346546811551700064676001273388599331527156363614690146069518695203224591229988644852338193851461933514499789553186622179951581909967434992633872810742614890163465731747087157077958948122704945141986378340536671179768450465458997638248280349371704666454186479510771925073358413809581828069448281974763064714729804663900937489411102891197473658245560064712413911479690082709749157474554317831364194118147658812358236282438660352737794286909677322998635875872042780737318418519790399640451424043040014503742374603399868703099608154272430903640449307070486279687082371681798723613296790521886301717472856332181285966862337126494311743703268979167390448564812789262191530039908008611608871698027617115536538261468172088895217419971363794539148054681889381285510213703887246728000197276852810944228512878186874934382181172599032334926463313886491957819586440151712708976584565041098702870717250127974050344564054455232688258123620998991312164154469003147819836513192496421801675801363117256262044020081440687195477263996435840508455079346704507881717044786239344955120172275947745533774853721851179121580003705055459867289980958589022745974963296572759463236189669131097922295484093691053157951669379216269176202269953008168810314149715561933158120825819775247483872173105706380977299156323854037753653222885476000146939884922047855442593186893633819840143883181139439051746415805903096151318977090063704684682355173668347814491441381933523044334545644535366031086988329490477891735576907568291049550488401268908820276091488457571081888434410402689756865055276858712231100640538609025423286186727225988785929416030037475982174192269540114966749392741628044681316446729217848323693119850493727223893284684319622032229249960980055354581716738702325601552146399016197413298758843336683496464503786185192126413000168154841633583235198482728733380695320915476319219415211621048743908321315072801934352203193892897038228503585785898568297456843098793312448687878520159326905148421451462023773185304889333316119954120097726700945183450530203982476091093643334704289934522837213681285662113366600446424850496607720096020174934718229310597102457952768235563698443318039393867215336866697851867655784960868720487749107271503279518797964009116258504497891767854948438826493162057796652175322368401286565231046067298070067098185377522359333434831475230303604532842606821275771217665001879512285493299602430160405540992120837093345338167406114139932436001622435461702210047499965202581807802632992951086847238855139131591066134076913891502575337845004503126904914899876109284944193898653768234928470681541614394882372706136840488781866092950361223575680142060481981338325888568062432101128501653001135607393074804819144175419425574343912916893217081241717644676565370495454212667540913966958568847284490571527797653366806483585874481796625738647972599673740332347255533356366734918967564919277460443458892033945417010656646449336981643935483900592324413715724370671608286873434517504499466387209971354334590652732220829158068575196388571817688716446914054348081609027578703931954037216269432762123027387423139556628728221134496272259343235658330300711470587394970858369780453476039847683568705270133531328869668857954975699506850558897139261455075682493136620643398413502854848229366162181072301544302861050912484372441410723482478215521816458945927137884471074080524872854714176336538521549170891297114217058768985598292394917030367898231467946709684453433140657024552778032862587949650075770255783849075270943507463440262661503203094064336228024925935725562126130657186355723377493022720102591967450878921252587704354870543578887664137515014277590414329804361644023953560248839896987665672519989039028301945038064931520912339155313918056031160580233131080266136615097729205641156813646947139489169419395378687914866365869502318142341676749355892886717872186285885472842977917572625343432584162417219711388811080551604083019505940067362334831475733765010811927340413931676653166112368018102786866538431249583099240486408211724408171841240021713213812859098817764852871329901044368798395349662948038372455148619244246124908392826050966254441036852493935078583333058784698587432193128222156931998561292040251925499170366087087276863160912979885982260685178622934889972050567483364398563983834103300489152170067858880969273307350468714431651678105405609405328861730950814174789366879244372266323905977151033537821593393333621911016958832712384805826574648981284104742194377599642331832821418283146989871257298721667793826808871284220254580075386677223796677444330029431443302615564118316739687072427282548060316863506296622044292628130854430195945436232000583774892564769598251953308274024895708126917807940541754277791260618739269641868604801494095360727375178231981266088222491875049723681796469917370633983386730282797365364369938931572281489783337948889266805208100551790002655438144564766353570321104554924151036323310094122926555960896059332057839609980558394704252453306530749635009582767721644336209300886297578995694796267615541558035692323628380136621110847315978775419535850772143636646786561377852604668426818658633588731533541369806078502348317171187621927139392249508770201427246321815349477866696148349008819651768146218345035120038498774383151138184567901619457056437827945845463666006431568250129762109408608880040554815489496017295404970790895832489416117696334919190671259097697020126199911854614070237679133569907704181274697163407937494916226746734321490870794501264251187098442502815509343794931529793649999105037020425896667557743839741263902207803745079871768219102841385928073199200325482498225260574163131435898929888040045451717845901317854249657064141631897268604636520592822924189865534915552345797853254164596878875630109521656013520624477268569841616025766264397532416435363483778528624528192269388516835829653872227090311688463315782469805119300178915512648462194487388058651000333155244476315715458645112238742653210009231663840945557055780463762333129018242539711140099325937010871170961029540817825745779019614499475836053327055484276839517215293384170242182982933237946077356613672358324458424438881906669627492225666234425677938548263272302877621848598154905670447847396088179401878597197809525562394870563871762001679117536197604514644392889210375987887126826063034387510715169259552128100788547515612364283587288565113897859260708169980004739184320345520343606491162487179443872253760279371575804590741830631468519042342969804948570581118828172830231364164459377191065037312387119097753602176854348398657509695542724925347807466491808810431186583587477595318573854332819238100981654810880796036119724386416844308197831728879551119602228098697379081453239190880087487592878767154735207452949444693039899028286921141636966740449971887859602958395172915012081662070387598862619409700648857897903118726663944564643058826317335057784936948094605377973171664324464156910637617971940767870800726399291618889043330178253429677990785089699230754281384205794624600200189089438604314389317841274031289357963573450905898286488234925724252128780396843528758934432283407486127320797560289945700835183080568786244507494868291367957441967477831422494313586053643619345936507854409862683155399293719635096965129325143036806936655880892101033337125100080523591382833137007566241325352929661765999453625555216270556806058511415118852244316895287862153727010128350731002568669954714445273516825576746484719547518944378406019493267409804361146134132985884938721856904465818484719912022463720489944248226753743152340125404989030844144878170682767477249480700440304482692875790375063785587018209004589053213304672426745701455757794763409507253170626638436219754972202552998576551307184474840925263478903420034769744124893635988044854816837959915972855747976106199012289590534650221400157133784975118533282112477440115853611282098102175136201232467907991096965055817766670841714906557418125584910876352308432772117196649748788873468624485618832193123353069728341947718143492107609007336232235422558077411335229608193801852071424170730287424928952420565035960991458680724187560302268348842151429123609604741659015149571609770018209015347951306547812553449725703695477528117129800362680651548615415099543654255900283456266917938534661744217713412885284551959308277885398846103148937548146507077892604432095043073235111595392844145588827283596508811960917363531025281854940108620355159539369474275611315474997307037160306512786657720092026899005597354148983835398338322062784849981322300897780119364983578531545688826691152644912041778898476900209946841863805064728698127481090280715718701276074832951099985800237967187047950095083636601999387639967740623380720877884500297770546768925724891896701700503114520709644970144823922114115995295701697810589754497163839255669245174882215251744011386821154572379990603645555673148634176824599986734594743578623707158013919281460503544253543557594939545146120340831004100441580263336514791000063433168691759004557547639055510604941883841880146434962525733721228149743581133326961402296694326760644851588391953503038873098848885768213008848300036110605167551392731983585601949027600458697550355001858625921149892407976923896658536076800146951986880713124715838077389214642143975691981517407158802423211069984547366168728068000676003864950861516202547936856368308794921670490799288278762060141186247476669437842478051624979824290483049509516700674551704242010019226480469068476366667627773883304054304424225144770670498507939244393179979760029086206487597789667960854043357994241536806141594791150903264441977771550863318692276703896193540676954460941795927029191354781631111057249602643256672704328011169824126645112923819473787007727673746633675131174493586104901238705776962997492487544514921108601478174687355841581278687592453020579908673661754365848296798718034345883404840752100325493138033064027109098468043121166416737113433415916662203243172696416051673235979056774730073810901660877258574830673144916627180449584185204018336129395770262421006582262098001425033653749695249102798884216414042846712741073123795021536181837363813705073330795402799864590371632363170736074731124012957126123898410604368224927325247151673314167078084849742084046683402120587234450986073758414132831750670842821032670141255889117250549458930986491263714473058223587958876037352949527153119622080954623062403381236382073596620940132145271824916022199670892818091445585453163089635442444040651911824007155260698619023626155221727982348660001483059348749943279398952245976562184969708241772328356369962090394890799104891274252343685700093979651191182866361420960235782822943114250359267092464720443427577259644674040034198857009162310563992885799412696267891256850407804960062588782150469064640730095490151900548976130116311404619112159582787861996841559842588401045155151142781239033472657886070174000396141915349608838654695163309358383959270754899057097727822141811540791520208782247691598045377349567364061001574193014426344133378575509189889669833333161827030187483121591653105605907696527482893735971702015782144058723951699044411142188635827339575963519354895356158413715105253199553355994606966017304616062613921631457149216208297367138030193191279438512429347346545773607390391990993100437772774192282203265580890186228909551684498670240194462944601771122296174118678205174937650439282832813569249262829574756117992062384912758232127849529957076110218654698838744110462394091942464491991164963261039054797688670573576776886160091160580995641918673879742216156005682516695209567421088867669710276371366974362432905840440593819718941481211253930636844099358753459089693210855584103553180866013514440669634303581173183083525831938882570672834047235221811856824714757583464919454047378600671164894335083167585279419035398063120152757390899704258690691139259924741057025356802797672413902382820005523364969802061465394132806651079322097821273670599536409019997832752575573035365207768481786579745682830789922560595599073714364741602078828499627924990546935793169923313360477467065362724919478715123415193162107513921497908434790728681176414285779929926443016864774322183411862071655204967693276147560065600859917080917074523218897545310026824293103040715901310580999372294785370970631048585625844947625471166070461105108382104834577868604285270262951615983099814551796806287731239847766115443121378599152134385618044375011947160147226593776025560201539931990398711953362408823431135662364873483584056234671087917673879657942689484188231052248520234440572023273121102603543763119983160306638594665160331015590456804682273847739229695830790882038841759370658533089323429567639816341648364974995770370554968094246213185648445068878944732745689846886198216629249297367680165556104484319246067602338687066981449098090402626565700902002165233538170661468523737445576488380951955179869719400584835602086807245230061751335139514075642826093747984819067652601484057240759273679143274640052877616273541591630746619218591037587808184652330678032475070790430375233869931575334090438558455986596758377454832789852257746868130603132029749559998240376590631133208765326934113201029975436638663147466937547969099768989864917605179374950508086542722995884073156452830414892537427441925641012748676307994440135365625624127110116978163042687649813392605984042671680262970131440671754593486006625178224664300759779021315648537845395874048215251159017826514879653616372637083814259885545464827060807618130312417223811387938828876304710719726177786212895967293418227594026881368567135074771748439047742784274741042416588523066932169775286297780338217143399743440072968675502844146347706323258740607525032212356859835090247691151961172567432485033243916540452194189534078000396625704366844697589614461954808665096286697945259618385653793815752140142918137020154002491741842051123240183844824879665652943927103121154409153018343519440162421143464457506438827946870340008697689928465616466939783793649764636176816452546246915726209150392123767418035972796664408928501722941062955849137048372127077593804684536854038999020304588069236814128755147548611913496102202412656438351579447238659635758198248366163545803602340333471648795588676031566819451153180078730757724718283813303843390559301343300017640795260870837867481896569618046842280722172634057788465384473431464203405888947816545373447587119998854406257058041467773018903144903692236645088468645103273618427197669105120740006361089493270375391614282484191247919692371084724954398396566118786352947945157379641084578988747630465728613770801103457934215911771191634525994532454590729175253129785313969584283081923103810053287367213270617481125185317545194712917564186534043670605576381773570273398873653518585615191380285286361763038774109831928597701739670454500136227154373419215046550346839224595938254317623037337311522445565994165208704621982245749889619940477447430477050990070423463813182194884743383957592215639220141439489986860625540716934575653734135326307124611938485356810972083293731763805823395593174240885011600497654088905284797499063646089592334547709449990697282096472034500296677417356542091860111361200519544562850604724428058621982290787802055125455747971282994631439801457311353090312645419957113291098557223490385539187591387505345741636025271050992622750728292536504532556812940046753410631861655810557796975626107707128189689389295603786204275786025639186322081147964074361703925047029214624259970665272009230790362212732996150868109693087739123432888198063848509843274205738637084129869315842025754267297746467383399136040281875338625888561455602216538346476569827027048906347662298224584848510324829362803438716303232645115316956832329103685424067453663530365754618622578538919291253173126617426249013857237714027195159034039569903684034637737133083766132390189528539753849599498813899734906207410055011873172979568466272238198321799166634183307491321280146535415964427415655468323383766224653327947555857228362525701167755195322479432151118666409938866287102086048212139835833937316711028840933343158475794856857153899014619427718801318777984204355190989846487285490825942245850575786873135964821007422640805593496690588745142044705561569532948130421122298452914843644068424775397021736748661732506521614629043835677793791229204062537604402337476814745587836628486688197935969862181520784127726770279183452144855519904368473078596179108867807115837597373921683203370185661193751680183170010029991047180395957118520652981354705078105712085596377962172011287374152122397149913382939473188193652204618087440823731242811272698684840230313054636950755220245944368974314004139093610484141819014875330234116318618970166584935937887963850812671951549699063925638525019964639475517923323112720791420916371140509941161208425643947813530698132681955911613946400153420672470736197133271657746163303436778249056170723687883024213323553107514412036099026004751498933866090790955058462689761046411380015536942030439986906262614679063081168545223728112076397266739387063520468203442050647563322415687771901505778710302946356342395805960911163560152994082555311380108406157229602392613114939496653821751941788138926396949419947020032148196715608208172111126588026224803976707174392265489276992733717641511620346900242414506948556813628364152385225458185794770202706422089031441463868305248324246061699337286040838070718894346050519821012606919485155216812102877165050349513907796442448239446277955060247345854299099296997355165440929491295187502084813061264123723980420064299642073145498062764837511041308388712114383821366829997752339045195669022503993041455235204386683682124287816435053680620791448935743441599005515073825597480314494028141285767594336867080012120497223618873057741428990292081817039868287342930346406470694401771178224709947634974262784802860787926130215036047788521993340087062541926110960935437946888050138739983075569817694866896272974999427462056526499549905101104093137058752142093165474927745940778600794405491616300325466342260026617632755509230263723410182363748273336374971452165266841852789349327214634503448809436837426821385386376896966464259073624524564824150071325859639153881086836332354272282182911345751824506583419641839042078256266143246026061610247901088667218572234014911354454036447407295872170560292307950391107497422642179747860872712008565985731419748008763271234659357430551581446325193893848745929021752081426554760163613007414788657843754261998013969068146116384471766451125657807563869791253394092115380643688635382169975269816962820395801092497241054608013272523465764285224979548701182257273215924474388898491786393194566459348990152524391950527792260945204618929709383349124769852232298974937447479091761225768124777260266467906511746115280166714029717431775614537384647943967775721029968705181544494510549554629170123233690703139744053861776049684526428353243080783412614749379940111839601870224871239482643349678335499143494229364448169050627719330060715292488077173796234222867200904652124489500701581649954654459111010566075800072498019835767668587112334490058323289356808751537158625020426136729076385704570903441810339807088845749510672496730112726369846386119541370403918603446887785640313665187085627474274830843096638450911539455651816275279979597091171404060815932590504954645062533013658722544318030866887809801102413785910870504190654612221203938621592926015349220063634091029830233375312986713327984004883068981142487849561975110768482789649721072663667675879331411731841504178817659282723720532062191915294420227843719512446801692373956960736902946847551639583122348360401168527522543105352463240454221213265799035026079012763833275140655345575609391874379843704177825973981202428623700108017459670127693687153012913379868723050153378259319501071758437184476508021635616633159954107185257050957871547149075062017765467538022415464781782601615548376990182640252768036985165016800035897588873183954172948298941196384240342266548320371893871892639973021619599128483259592995056351004855348392395526419771714648982011874624024585501049165101766861102269682437277895554266744778966717855095652630491983928970681331473404930997242415458693315237082546891182692284024275037606374772879805390151418591019934337157207274246136357790959839925651971869267952322332032890450989862570309411689258107581498239710649800159742755128600806901598259149629045228348841195846814833752269094198442718626597941978414009594030158136906874274194236889544882745882495512484090034365151173494296114552048528252688121043468146891181274128219149259018764753642302325587750709111231009188063437052557502478224123201250395800365951217934047880845896309733035056673463762021682965417748007828179914918106348406709591186644906340778795329233275527224127172063094297258235285541455064214859940462213186924333362291401434855592518315453368484607235539825944342305220569231785861510080362493691730634181079196843733540975830242374124310865109412244818246373344121946893416241786640995735791781006181249070233895820205463886218487112273404243144447369563873164073291195665379555673863945521784310681441405179138211408525286545810770584745917196585138930988470736385623700149148462338813011058833255618119004902402467817436662369430656696870514019631313646141976036381440891851411391830032623005896529694805020607200254295327084672775638602016433939592071631322965040427258256136741016133688798198966249757989254381082577627992490157387198938214331724671553562712002805647892248182206596031011065320044933655500708035317388546938016998553943519312241185410162328129150060423387133939825508405792936468892202397548197259652981145428458279787897150845461935549412922289997126102814969930973588455769693463653500516944702196289663634753790385721506992170478302649633811751947533255325467786753421262981140130582101437796995611930721289355814299393270408384952559468959329225351893778420612567197191551843014046874208468886828178302562021890518468272129555069369906814301531936916372783989952452748523936728463647996652621642320878687102878675779856843947225817869931447172431423665129809330327132567578562383399596596285874268627029957103926823744379276689504542330971619467631417828735309089623777016875341604957448326989932156534262754784185876345500691225389188741777846888046924326540410159773024980261667266801102798078176832426156086957409938846874489885094116135321202603789919295921040735599278115325922355785051924396933245678888212654184141603394376219765590262071570561481440971936908138349639190009238500141809354539631995844325541332302224670456800952235902925519884166128123831204223681830222246370906368348000499505211200397533830325537905059062044020524439751888450314626655860133186622271192091271482938759812524533593222009917301284147983778854692985162755046026765023818119011366350715524439030963809161613894101316558661931324381677086760937185425806167898489359133787557334250348442532947975952555793157182644340845928791364996155594890188150227407447892584860901021677492219137416188184697636321049280086228460996057607304768702876300839494225741924057614632199014694561502903911110417057112592782819037616572387319176714938846136472418643313201695149576052901837152095867047652539393452227300410534431716480634358152049081591707933933926228476767719714465256621074090228645117078253087159066054789797207032012928131624339385756739230180976399188148875547380264815083641418634234865968243550376232364266157768147156903483934595858839239021501246715502812019162959855872287074656815652620928983056523367496813848194982742159779538447896541069577041274311366401776708352404945369257210674644994230963289409467418680145676337205061395869235172019637818764329373909946723520054100617697575642505500858575256072085814949240196555879279199007629120051744185962114892565718382793497419579945611131175229338779369647744818633202588148457503825343364498389585343604378723638020375412327609638120342184480165630049310958521728548006246180483056587890287041787753648875833059125340811073801261300467591786267576292918509526601257329850346066731774461672885472755462630025394262545757349100476430864553020031439793695592048857039506318596722321324297735274081138179524505342520448178755959952688097838572146841384524190971804267502472921425766916440166707630308246356341496828054409161083320531291719749004622133765554318185147960732966399015520319678140660742983051106646072048707022190389157790761228895772966419849220347546472856682878439113693693347938730272318569546485846182699500012527086279162091834159586763169424015125404823518100294883528412106454746891384649486476657834060776189696002459702817687911840473855950159269887784988710959179547877773590206421276000011257834219536908959289504482154415576636192220174657708998486398574383455115848317168352031079373738108263729899055888293497469878808592416111146255200522860225219472387399608486710314704649578227859812872970210862123625551365790930936850487474704726185884768025113472919252602949916912284122535576519543778433751713985242063734838510099667759674130968295903862841172867846204070363535667463808150481334852874914180998916853545560432903078216092298136361469930302627204226391930968665095029576671642570606544670700684664781365873487321392163332856939420230894852607240344403186080554411724936229768481884635984284444740888168994258180641653008243479923128423039564763998375509802532550750947410170264623059084717152663013155112650022442250228507816014284731796341284906377339447089872479560124608889022848519879892366362736906174139298360082756011452035548607637503877325867330339302549427916732825571762169580331084519647731494591865837639328853398799566315869748576097967255560148061096265218076496338080123941576472388281087101363634086214797059508939277778433697676450540359928279591553966336689264325141582384157688442742185237607349045565353177096298357603846485587706054185027425847556738059182678237495745611224340234848376648037510891489117642978046462212516018116376749556530145589911620597186418453973133621993391384479717697920966227915772137296715312590706261785009469818189676640992824375064250022612710767677308928072270900185884148081757270164490681583488199035272432410758498655526269283162374189204953144818024873305887181215383234224865263181990610789206960449348045716648854120623514079306627753146013840092672080905756601573783923464101139218956109078271284274106462511503237074320364915307771700748610422403368264728141631960444834838323292796356538541128636779452686789023817893353476903599547926916447500346189071836526813023448814790026358748369753630085741469813217544758045784078041945683420218126623482839861979003099488320759558964770333697121045561706221548766583172205875152417448727183303114776800648789174705354546565814052976888743849179809540162965674074729968173421959509203582331694386206621710812508274732612594601416259952574878517583612822166758161927512769753581062588403436910289181098144568752889928946769904902606358222277292185012556825857404831311685752841064254772103978008729845407229176977850915772904412059262468202251194867119866108799837697605749201902758603218864282104335399413241557897170812829087080746300485585819803829935176734779989562533258336789177975206120282906657743970240092028722830435925114194236095236253561019239885169931623433003599472617101823543042797043542030039259394696740266084200528213888584566852103447234412247329222346282911877510906161370054165660670920683385957868904484439105357446515472129427947168320373691472136483395321531641354629745115763379307697226087399359515019187431709214323509499407594619009320631457553060634573162228532465864935239231906848936542565646036407799820301930099139016731825447642564226850237229281502795410079164946168484867350258097388122029680120595596963183699598705957061787565747422928130586932885518166331801496538381761249886138078115981446383225640774586681359811205700578540659396753049090779062738113243528147517299964294750881457279849348115850897146637009095249971060412897171211942723845954174789949137662513683644940289097066376407115759810932072042093426969207024580477953105853089373014945365904784802960043324646587321163517564255763669788434127079336234899965003791214398250208115380258173420035189609233911539839154399636932534070253080181330094648192568783364787547849720989814270646845026753658151478494984059156033740963109109306004882524752416987942591240068154260140337320115406270222709262625198002984725812358483081101129032667434989750711851616540305076745656103059721361747732389291303350344378586641735102281513165082030454148949038079529645718100580666965122277453399806921539844193620817998161312738324735597169148039308154910534438000848529184419632373785133725807744726118279218883768091502509224430562058409891356058652612278647655381238018606808235980382954928860716646414331016959513753089679575487214932235581849694290262175332184565464660024292405093155860310758312614360154626777975903235013365088292630047777381120044687179609024162459586657622694950794840649910351365967140238993483112872092638239464361601522106096613948471155779389355185459471195030068377608713927504586322194424797360475034958485527635978031627682851748106273389008116409809594187818152666210175349551391966308088768862192027554846569304934214919454770832326758037632636691794082181581194056841024254352796854760423418306022740721029032124432320285175747201987095088414743142021905176756386165204782665972022531020265070531614689569581055633974734300219162576036778534474502739456015625321964678890006128737402324429631080927856178750246364897874984082273619666472147296395946242503111046120615548350600174955829734394877678277788335660403701272009925568106059889680180576976098336735358623572252526400397687326712772757859457693777444302057380839111796930562913019442591197970196926823760908885429425077681659737714762635272994495846212853885506835652750221542319077670024933322319749266972229658058311570670650967903461142092156015063446979838243539815163228633601234119650740423462668497833406517201285398318448206634961511835242231877665802589349970979372600503549402129548218133444019823978504046366201355061092660217187204842900743936087231889951227767199987977474585678627372372404236064719405298299466946488772450975437202052193361902889562778895540258017415101779215521872149649548504117189703745441991108787884330617741015911094211321054765967755375962080148927803027376941958028875145587311126123645154045118717529653341706665714057114029159911607039681950647841872804065981557918003634703718997053834952172537925921347213008405614551197018010523933237869095069642279273332169713215165956080320263427994479170296724025262945879415030300261740576785808458770817258980685361735886446211141711801395256802014512043308430623040693521348142864616035172632595343031779773842311578443893906391289176385352826976314403816346133586110402555892830657953273074372310378920632092975498556209053458146218549866249395069014795865049626974866159604072625794920573411118834662183180888937501201218568715496146658966886949802169068855493962951827446363229982286671669190135407768779744031309342365973049865386986693626364106215523005507204651763429578217017700956896313410174807502088537409041448761169994509276760851692426271479785668694187450525333723100896247841113928562935256457581058620358518165454336206255936959887267468581099031889015424988714073166544514673871431804914525855404995213071132425061803284252644728994116196881133892927689879560189662894894150698532813711431443694020398110123578968749640562513939377654408397611243676072623517635708762079597546146105344825236971182519959668051096985578976933135525071347293338596734593815190474172083599585613170637212305437588431047167176677306205668146230706408599003441387728984130223315344445829212922026249348304555667985924218994102937976809264638271569348532859211074450933774508292891996349403672075399229952987665173941070415974706987123958134791178247807978932367096761681374841977939512241502503325278103832212630318323546138781143877933947941337571190040482096534607648112091235486555803536569112712243138345595019095767064628907320701059249422171789846340057248300616920234478808127372955839457925141635394570964871421524216033060271405591789145618247995788444442340931375068145246181034404483027636724805343321389338860338850905698268932970385621695100012868003680067487651096890085889356173987861224449428285013274182597087719943867561928512020611667611863033484929160537356008476568082679205124071962716577009487749768039925804174481236470006867626956611221732771436305347542099019333216730197952363333428872837291414722811083562915706436475976695667495718279147939247512493541876981725182888787905260325888401614464036076828505164619450222927620227224234626374865292203923973518098309326610760546527025353351664790424260611070134894149661858975731835900482067846084956499145171520300200384605056915047801070846003049567695723676986813865916853200666053430961519630053154369413214518191387771017231009130418271655162453217494466035528845757697174414743216827635276414960349041375480055447524117806583783485050321118612706127853320223458710126002926009663026789200523541115595463527655556851388029976840125326285826253318213497458542895248666085270925136392712858631680341837084977255388865843196843376568646237264567016112517261896045442530187614843705247940554676032650027049365367746637880148416859769835039246217764756502193314040061349230515871852315092941358546862115193402485551396888939512701842872912749107599381215789165847735810423497212020812717995868776244416338054925187874811779242198632167780296406868425407722474926691285809749531938759029034350084992896499798861754147664229863373350051642573299657974132717260032718673782603443284678089959457970663063646601908390147067256045833511109647657497253968895872322286731096209840267114842286842325945907517521779332529188789733738647848620646224442288403363431260791108069368224437677683301616233946309939849298678100558958083415398339804721078300402679212959829724748119800674784084489110137770040531037399707677067265376768915258077874371368072227015782616241575433003709351034351244501387518058358695638471205615542959356834461655139279872972759939223213909172214460768091558417669208481815687263101979919033287615690842503935300340615402792454173796742893960253501931230236659542634512766064500485558612169662113518971146537787795363131392673730207078428465029965226577698629195768275181605032571596750365130856780413785722540681898058486854186093976930649401940374955368267223608096290263023456348233384648019719243280250122938338699316847356946872131808502894256006302517586348628692913266297728029558286209270285222624295833483319224141592200229619249332020332576048848107388033125054063595372611264092399203932361696587694830704017017126252548978710811218521274153456006959616283868736000993073246234371376816778746095292443974980486981008250096665245524628953611904105703208686218856346547561665034678771939960130554467165937865515950161332277076937705385931898862651630642888360052102750430394788344400152639993354087323044589354511814071512710222769450102658343955877939148312841854689926734597866309876379376228359555408459652631896413142112045839398404072124818032979784691047504306171100606211901529085631029638921451760479109459293735847885385694249293542464726374011727622932217003067951001388776200290424598047440599220733755156462103111499651337433277489092073676557708849129676201771344497091560841451744971509135812274064044656741083653671489909887864242665242952361260788343941055243109676675832147080963549617853209013982574920821343669071497099532045543084048207574611077690637158902565686084355374220493937056576465325543800965795674425194300245708310660125950751030175507587355166860466091243150153479286211810689088431242172025221439689976392706190002772213674530479186958627465797251023263631875451854469040230107959904836209743804083896548035960324592215040869818767843030787609649736056798834943005509866004749045600931311057011900744082648279117919854211990562389165430930548283850883729039043274363074633289390623167780636349927900998717314522542104095741695951976702491636009555367436984242472810767832421486144637965612576033645253624204960348786760714305594673457864352689064684181475599695031087323966475529318191221943000102799324397632529882159713912682979478970585118440524460526877824151641470013051163211147047616629201661180406737353980512644318788803375566355004183084227894034268720277850484571004419581611195169311473297337513548789967905949193408211854023151064293621782507309191404256574212661968607790023947356550285185357269229747645722513076987574642426768729711583489005637046670885635945918010199832734106537624536479260429058489568549508981382537843613064118467544371269409868049710227846881174429608909204935712741352564061343730969592092817695135300721191341698909882718420829925835529172921057749152102915098573988117087409086722598863092573055478439068209083042807268719288225499028832102926427520844357270276788033966871113996225944080433078925021042483870043495687327808234357768011280111367827932484960590335565721329136762930869245587039804034286939935351133247421120304487680906370180647807647176385733739470620708036723328159895661950983574065306833973656630925340433516253761548195126973812833833572083238359695636454132879038698729145555307976191596809406094394047529991132258411427318781917442707247144965725871178095782970237726542239056981136637128881587689865857763271796104498960290508781120208409391374184074396096606389971204915748522565088089918854329373285525248155348922162502843956236173668286534448565014023281011596343164558496308132844387642365826741836083389207127908521602326011785405132114072120225351456037218655301466111931541559222536610580341012394786980028778112178669201657010507101735431757157486958728986862025920583943846625071465085458369122434256527654887453481800814332805986416897458497277871088298688870245511144080359289065049563839124409152571932976325302853194562816944924416924218740157531806375552543396290305105379932013372433798514739430827760898382475704833674008743029076662484329293865270708754690257730286566440134444219920005574909450278642762314644321581969574960329158171597115235127340820292392451779955545743290156196151914981617939880890368041919246056986825309032124027259739564984256624756519949286444834932493968940634081433301744071785872840634902574855735407605198056677270679053230507104712935430313181694976408344330877581393467358679861287036671587601171442997329349478911306836162111093126283460094588097912254379837430232874059137912832543522817096848508647044267409674011179485086149339728533386584032791893555379112684350053867419631313276034527130125915683854414791220582705764389230294709419200044878850585363725425329316931837438455836033808718410873769182716052732030624184468794322542451682322640368484371519222655767757398998663573452613762914919549761696631726537976829790118322031338451148687299007226817737164011494894488392066271262918638115762516772104266606821333477992394412368205869307312773575330587499803294410012246088323574949958111648174301424809134251618925702336209727658006171031286539902577106995661533173570677775037591764737454103572515183958126044193377724849142964638550517146801531035338101121966176261738939322211265381487226269487210106536265655579057121015631446789698396466917867431216655923096584102069620778446151683791876933599767805181447457849960904610035645992623730974250844505330104963817330359827132981700593756310708613909676335162659810694537247425933802591940464561788770532497176232254718873842709425109936900089758421042248480940023437152234749725432866337277725461167208699902189054701448023016990723889088983499964555585926406705062187657461541843823778857410157757996411555065241016002575733538661785954009298645577644894026918372854612189217983503119800353041924937788720458246484274257752851528060212936563459632303847216758304649107475877496311411531469029127846970533221415012076228793866495836707660215423097909561172392022474981541304814220485227557194083911140276758783744756214872695504932606169800515827091969156858413850167661012361661913712937311350496579370226155459027273355232649973212857964488482828333299192371529853935158010450431718875597394118608052263252840296915858001490021333798658838693068765033983299811163721399098093180335340212991992764318955551049460799951791652151507489570172120249192537872893398254343449120470978457479039747388744252450525620797135238985360902597613341367136527297813285730959748821667727907572470480343261947877887668465668992224956219710915643463960302648565085607934612239692170131909179992731663174505421239656294418353139244230843380204449702626259831671523156088063829410047019196031337302407476826645898140157676786966282899228098633410873628075474766050921722081367293926371938017107220033101711509062004321844714060905288330990025738386913568737379096721880169039165879819338847122950562720981400689545521788552894961788410162832209135981448297334111561970854843910916182260954852527361731473700085983929861924673722491478497982424903478275160211695113145126848398111832631866191439777678185464897079661042840468785780415200850188461792878850290179046718046589909673465963987459562196618885733046901878488538368381010926672158678548461010898738973984241971990487857791255679366205841508805176308647221374045104297679724917717008802500642184146208259620036068873894362709071768151386462419415837028516388447018010998752897749714256072903109932474679788958325796245918555660270640407238988932784644506353507077002797671995537501169080072234015611139175100353465677031159060087795984034001476760146615449493523351850217868465505549383165246353061547749027005411271264684315031472408773821805525739957275909262300420547625227151688388444311219221805745946986959756204440104736521593818110866426177218572663532326841214626734228481346192737570917085026164526693499162492146062225356857504191867514595530672014915183140428632309297586574134596846512445461116753259420446702502659817434294005517414361259229442037246742396241682762817696732115423573234982094769619681898134008730329212121953800500657535071621252699167142835224485711655129729044541799125678608919704114020545370515204424630991375865376509427575490270643816491624725324768699810032897336044088067427271992283235058079079939021810575401644746162578129204320858388123736263308144100874266173308270991597686496799683277631450126341723846326500902645684640316640475336178457541639106873324258170595265957302989271121170463717281506783509393029728274975127272673790420951003735772946215133488083240783527630215304403636378728210827714829063951979589495540947809667409438448390365888532846989170539875196303818135159954840697204962520123430228501562251403069743178928707285674779759405832930657566841071766603633696099148979338273471699896169292500868026242287858656760699128655888995908345408307524418431473174958052897413270496158314864027611274871613986883345861389886425009966914797014292351608156567840674832497295466843457464903736446682985210636236995491103604654974924933575
Qpp = Qp(p, prec=666)
s = 1
while True:
    s = ( Qpp(s) - ( pow(Qpp(g),Qpp(s)) - leak ) / Qpp(g).log() ).lift()
    print("[+]", s)
    if ( pow(Qpp(g), Qpp(s)) - Qpp(leak) ).lift() == 0:
        print( long_to_bytes(s) )
        quit()
#exponential does not converge
#It seems that the first s is too large.

在这里我们要解决的是一个离散对数的问题,由于数字非常的大,我觉得是这个原因导致二分法的不适用。但是解方程一定要用二分法吗?在这里我猜测.log()函数就是用于求数字在p-adic中的ln值,根据之前的我们试图用p进数表示有理数的操作来说这个似乎是可以逼近的。还有lift函数在这里应该是将p-adic转换成整型。那么契税这个对数的方程我们可以暂时不去看离散(因为我们用系数都是整数的p-adic表示了有理数,而且自带了范围)我们暂时只看对数,那么
$$
\log_a^b = \ln a/\ln b
$$
在p-adic中,这个数是是可以直接计算的。也就是说我们可以求出无限趋近于0的p-adic数,正巧这个数在666次内。

至于最后那个ecdlp,似乎还有一些别的东西混进去了……


文章作者: v
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 v !
  目录