-rw-r--r-- 10975 high-ctidh-20210523/fp_sqrt511.c
// DO NOT EDIT! generated by ./autogen
#include "fp.h"
// 96 mults, 506 squarings
long long fp_sqrt(fp *x)
{
fp origx = *x;
fp r0;
r0 = *x; // 1
fp r1;
fp_sq2(&r1,&r0);
fp r2;
fp_mul3(&r2,&r0,&r1); // 3
fp r3;
fp_mul3(&r3,&r1,&r2); // 5
fp r4;
fp_mul3(&r4,&r1,&r3); // 7
fp r5;
fp_mul3(&r5,&r1,&r4); // 9
fp r6;
fp_mul3(&r6,&r1,&r5); // 11
fp r7;
fp_mul3(&r7,&r1,&r6); // 13
fp r8;
fp_mul3(&r8,&r1,&r7); // 15
fp r9;
fp_mul3(&r9,&r1,&r8); // 17
fp r10;
fp_mul3(&r10,&r1,&r9); // 19
fp r11;
fp_mul3(&r11,&r1,&r10); // 21
fp r12;
fp_mul3(&r12,&r1,&r11); // 23
fp r13;
fp_mul3(&r13,&r1,&r12); // 25
fp r14;
fp_mul3(&r14,&r1,&r13); // 27
fp r15;
fp_mul3(&r15,&r1,&r14); // 29
fp r16;
fp_mul3(&r16,&r1,&r15); // 31
fp_mul2(&r1,&r16); // 33
fp r17;
fp_sq2(&r17,&r13);
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r14); // 1627
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r5); // 52073
fp_sq1_rep(&r17,8);
fp_mul2(&r17,&r15); // 13330717
fp_sq1_rep(&r17,7);
fp_mul2(&r17,&r8); // 1706331791
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r15); // 109205234653
fp_sq1_rep(&r17,11);
fp_mul2(&r17,&r16); // 223652320569375
fp_sq1_rep(&r17,8);
fp_mul2(&r17,&r10); // 57254994065760019
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r16); // 3664319620208641247
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r16); // 117258227846676519935
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r13); // 3752263291093648637945
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r3); // 240144850629993512828485
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r6); // 7684635220159792410511531
fp_sq1_rep(&r17,8);
fp_mul2(&r17,&r7); // 1967266616360906857090951949
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r3); // 125905063447098038853820924741
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r8); // 4028962030307137243322269591727
fp_sq1_rep(&r17,8);
fp_mul2(&r17,&r16); // 1031414279758627134290501015482143
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r5); // 66010513904552136594592064990857161
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r9); // 2112336444945668371026946079707429169
fp_sq1_rep(&r17,7);
fp_mul2(&r17,&r11); // 270379064953045551491449098202550933653
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r7); // 8652130078497457647726371142481629876909
fp_sq1_rep(&r17,8);
fp_mul2(&r17,&r6); // 2214945300095349157817951012475297248488715
fp_sq1_rep(&r17,7);
fp_mul2(&r17,&r1); // 283512998412204692200697729596838047806555553
fp_sq1_rep(&r17,10);
fp_mul2(&r17,&r15); // 290317310374097604813514475107162160953912886301
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r15); // 18580307863942246708064926406858378301050424723293
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r12); // 594569851646151894658077645019468105633613591145399
fp_sq1_rep(&r17,7);
fp_mul2(&r17,&r9); // 76104941010707442516233938562491917521102539666611089
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r2); // 2435358112342638160519486033999741360675281269331554851
fp_sq1_rep(&r17,9);
fp_mul2(&r17,&r1); // 1246903353519430738185976849407867576665744009897756083745
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r6); // 79801814625243567243902518362103524906607616633456389359691
fp_sq1_rep(&r17,6);
fp_mul2(&r17,&r12); // 5107316136015588303609761175174625594022887464541208919020247
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r14); // 163434116352498825715512357605588019008732398865318685408647931
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r16); // 5229891723279962422896395443378816608279436763690197933076733823
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r10); // 167356535144958797532684654188122131464941976438086333858455482355
fp_sq1_rep(&r17,5);
fp_mul2(&r17,&r2); // 5355409124638681521045908934019908206878143246018762683470575435363
fp_sq1_rep(&r17,5);
fp_mul2(&r5,&r17); // 171373091988437808673469085888637062620100583872600405871058413931625
fp_sq1_rep(&r5,7);
fp_mul2(&r5,&r13); // 21935755774520039510204042993745544015372874735692851951495476983248025
fp_sq1_rep(&r5,7);
fp_mul2(&r5,&r6); // 2807776739138565057306117503199429633967727966168685049791421053855747211
fp_sq1_rep(&r5,7);
fp_mul2(&r5,&r10); // 359395422609736327335183040409526993147869179669591686373301894893535643027
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r10); // 11500653523511562474725857293104863780731813749426933963945660636593140576883
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r7); // 368020912752369999191227433379355640983418039981661886846261140370980498460269
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r4); // 11776669208075839974119277868139380511469377279413180379080356491871375950728615
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r11); // 376853414658426879171816891780460176367020072941221772130571407739884030423315701
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r6); // 12059309269069660133498140536974725643744642334119096708178285047676288973546102443
fp_sq1_rep(&r5,8);
fp_mul2(&r5,&r14); // 3087183172881832994175523977465529764798628437534488757293640972205129977227802225435
fp_sq1_rep(&r5,8);
fp_mul2(&r5,&r11); // 790318892257749246508934138231175619788448880008829121867172088884513274170317369711381
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r10); // 25290204552247975888285892423397619833230364160282531899749506844304424773450155830764211
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r16); // 809286545671935228425148557548723834663371653129041020791984219017741592750404986584454783
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r7); // 51794338923003854619209507683118325418455785800258625330686990017135461936025919141405106125
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r11); // 3314837691072246695629408491719572826781170291216552021163967361096669563905658825049926792021
fp_sq1_rep(&r5,10);
fp_mul2(&r5,&r15); // 3394393795657980616324514295520842574623918378205749269671902577762989633439394636851125035029533
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r9); // 217241202922110759444768914913333924775930776205167953259001764976831336540121256758472002241890129
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r13); // 13903436987015088604465210554453371185659569677130749008576112958517205538567760432542208143480968281
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r13); // 444909983584482835342886737742507877941106229668183968274435614672550577234168333841350660591390985017
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r1); // 28474238949406901461944751215520504188230798698763773969563879339043236942986773365846442277849023041121
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r10); // 911175646381020846782232038896656134023385558360440767026044138849383582175576747707086152891168737315891
fp_sq1_rep(&r5,10);
fp_mul2(&r5,&r16); // 933043861894165347105005607830175881239946811761091345434669198181768788147790589652056220560556787011472415
fp_sq1_rep(&r5,8);
fp_mul2(&r5,&r6); // 238859228644906328858881435604525025597426383810839384431275314734532809765834390950926392463502537474936938251
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r10); // 15286990633274005046968411878689601638235288563893720603601620143010099825013401020859289117664162398395964048083
fp_sq1_rep(&r5,5);
fp_mul2(&r5,&r13); // 489183700264768161502989180118067252423529234044599059315251844576323194400428832667497251765253196748670849538681
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r6); // 31307756816945162336191307527556304155105870978854339796176118052884684441627445290719824112976204591914934370475595
fp_sq1_rep(&r5,6);
fp_mul2(&r5,&r1); // 2003696436284490389516243681763603465926775742646677746955271555384619804264156498606068743230477093882555799710438113
fp_sq1_rep(&r5,5);
fp_mul2(&r4,&r5); // 64118285961103692464519797816435310909656823764693687902568689772307833736453007955394199783375267004241785590734019623
fp_sq1_rep(&r4,8);
fp_mul2(&r1,&r4); // 16414281206042545270917068241007439592872146883761584103057584581710805436531970036580915144544068353085897111227909023521
fp_sq1_rep(&r1,5);
fp_mul2(&r1,&r12); // 525256998593361448669346183712238066971908700280370691297842706614745773969023041170589284625410187298748707559293088752695
fp_sq1_rep(&r1,5);
fp_mul2(&r1,&r15); // 16808223954987566357419077878791618143101078408971862121530966611671864767008737317458857108013125993559958641897378840086269
fp_sq1_rep(&r1,6);
fp_mul2(&r1,&r3); // 1075726333119204246874820984242663561158469018174199175777981863146999345088559188317366854912840063587837353081432245765521221
fp_sq1_rep(&r1,5);
fp_mul2(&r1,&r8); // 34423242659814535899994271495765233957071008581574373624895419620703979042833894026155739357210882034810795298605831864496679087
fp_sq1_rep(&r1,5);
fp_mul2(&r1,&r6); // 1101543765114065148799816687864487486626272274610379955996653427862527329370684608836983659430748225113945449555386619663893730795
fp_sq1_rep(&r1,7);
fp_mul2(&r1,&r11); // 140997601934600339046376536046654398288162851150128634367571638766403498159447629931133908407135772814585017543089487316978397541781
fp_sq1_rep(&r1,9);
fp_mul2(&r1,&r7); // 72190772190515373591744786455887051923539379788865860796196679048398591057637186524740561104453515681067528982061817506292939541391885
fp_sq1_rep(&r1,6);
fp_mul2(&r1,&r9); // 4620209420192983909871666333176771323106520306487415090956587459097509827688779937583395910685025003588321854851956320402748130649080657
fp_sq1_rep(&r1,5);
fp_mul2(&r1,&r12); // 147846701446175485115893322661656682339408649807597282910610798691120314486040958002668669141920800114826299355262602252887940180770581047
fp_sq1_rep(&r1,10);
fp_mul2(&r1,&r7); // 151395022280883696758674762405536442715554457402979617700465457859707202033705940994732717201326899317582130539788904706957250745109074992141
fp_sq1_rep(&r1,5);
fp_mul2(&r1,&r13); // 4844640712988278296277592396977166166897742636895347766414894651510630465078590111831446950442460778162628177273244950622632023843490399748537
fp_sq1_rep(&r1,6);
fp_mul2(&r0,&r1); // 310057005631249810961765913406538634681455528761302257050553257696680349765029767157212604828317489802408203345487676839848449525983385583906369
fp_sq1_rep(&r0,6);
fp_mul2(&r0,&r10); // 19843648360399987901553018458018472619613153840723344451235408492587542384961905098061606709012319347354125014111211317750300769662936677370007635
fp_sq1_rep(&r0,6);
fp_mul2(&r0,&r8); // 1269993495065599225699393181313182247655241845806294044879066143525602712637561926275942829376788438230664000903117524336019249258427947351680488655
fp_sq1_rep(&r0,5);
fp_mul2(&r0,&r2); // 40639791842099175222380581802021831924967739065801409436130116592819286804401981640830170540057230023381248028899760778752615976269694315253775636963
fp_sq1_rep(&r0,6);
fp_mul2(&r0,&r13); // 2600946677894347214232357235329397243197935300211290203912327461940434355481726825013130914563662721496399873849584689840167422481260436176241640765657
fp_sq1_rep(&r0,9);
fp_mul2(&r0,&r16); // 1331684699081905773686966904488651388517342873708180584403111660513502390006644134406723028256595313406156735410987361198165720310405343322235720072016415
*x = r0;
fp check; fp_sq2(&check,x);
return fp_isequal(&check,&origx);
}