(* Content-type: application/vnd.wolfram.mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 11.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 158, 7] NotebookDataLength[ 381913, 9038] NotebookOptionsPosition[ 350296, 8533] NotebookOutlinePosition[ 350776, 8552] CellTagsIndexPosition[ 350733, 8549] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[BoxData["\[IndentingNewLine]"], "Input", CellChangeTimes->{ 3.729862966064434*^9},ExpressionUUID->"46321f9b-daab-4715-b1e3-\ 8a28b1f44d77"], Cell[BoxData[Cell[GraphicsData["PDF", "\<\ 9E14ARda;S<:9LCUl^G[Yo>PdEM3gc3EDL20_AVU/M6Eb82m6K65dIDAUHfmT I@Xn?PYcM79UHFd:N07]O@MLDe^j[oO=WG?VcWC]cCbnFLncm :584@^m=;635gW__ahJ5g^b:8XXR2QI046UR@`FB47X99K@4O?nM[M^@k6a2211` lE_jFmWINiGoG^^OKgg[FmoGmTKFAQ91P210420840@80P@1PP11P210420840@8 0P@1PP11P210420840@80P@1PP11P210420840@80P@1PP11P2104>Sk2;ailhIH @a4420840Ge3@=3@/_1N^DML:DWMRX3?oO:PicGjm_Jk^cghhI?om[EfMdFTo7j9 0;nQiGm>5olfA?SKD059gHE0/>2c2j:IZIGmLPRYjaAhjNj3e?/YZL:R8SU7T@<; 187>8@1fn/m`hH10`H0PT[X=PD3n_ilCCDnYDSNAnmUeVX]2cUb`mUiT?6=^n9GX O]I1dYfN@N0m>`D;1Y3DC@P4lOoSW6QVofNWEZP`IC;YZh:2Xn6WGNH_6licn]k4 I/Vf?FUIfORZIhHdZJGO843HZBLhnL=PYmHfFKfThO7cg<]AeYkSS>fWFd QI>iiic]QhoGe]GeVeU3>]8c211f8^bTTi5F9AKWi;hlMNFJ`kbUGdfa66o]bZC_ SFd=Y/e9CT/SfRNM@?gQ54;HRK1CedNk[;GUHTb/dl9EGaUHS^@i<;`de]9UW9G[ J6]gnhD[XB4Wk=AeZ3nX4PPk4GKZhX07iiAGE_`lJn7oC;76DPkDQ?m1BV>]G8NK >eS>lPVkL;U:G4fXZH/hOh2?4gHRk=CeH@oV^GD_JLkZcD=[_oe/_/_GSelTJVY^ KVfCjZAlD/P7R01Q9l9>>QWfT8k::RY^g;VkI<^^[:O?/4=7N4TW`7k8QO@SM^8? 2>@?2519^1R4e:_FG1n6AH6/EEYKEil_;6aYJNWF>BEO:J[nAnbYI:ZPh8Y^g`EK 5Mf5O=mV9g0>[=cUS?BKThF3;QI?^5Xb9JKDn7ZYDDcYi6]D6QaIm=598DE@^8df RNlVTd^>H[^7WJQaele9LF1[EQLcN3]^Vf;Qg7VVJYQj=SHg@S2[[:iRDUEeMFeM KG=c4`YQkZ@c[Bmm52clm5CQT8^R LE75aWL[]fOFQ;jX>o^ZoV9NoHFlnU<_ZK@[DfadYg;L]M8AUhZn>2_j[KV0WJF^;^:KfI@4oSbo/SU@P:2`Y:fM6:C:=CDd2DM6[0X5>ZR/@RQZK6QC; EiN7^D9UMOE[_R3[jH_Tm:aK3e:^9MbmN>ICilWIe3PdeE4b:^8S;dYAch]kO7CibmORhY; j^[[FI^ZgLDnbDi1P]l7lOleE33/H_7>S9ZWUDgd3cH@J9JeeD_KJU_JJY[K95;l N;gm`eNUTYHc;n]WgZgh=4;hYa18Dnm>eGD77BVEZG]fJZf][knMV3QSaOY5jkMe AeZaIEO0bK>0SaiGb;`Fl3LNl9fcIY=>ZU^kHenn@n@d5W;/@U9EN:ZiCDGnS8/K1CbkO^D]N; 1N^fG;Ui^eWSaBT:?18D[U[Jc1G[WkejeOZ6Q@C`b>FK]nN/ETIbeX[ebNWYMODM 6mES3j:bFYcim2Vj>FoeIT?WVMPTE@L;[WlW]hmeGkQb`mi38FL_a=e?cK h[5XR==_L=^>M?4O/MJSE59bSU8R4ieok0IfZQJ;cdI5ogFR>J`OMIj6la`Vf;P] fk:KPANIalnNVLaHl:fQMMN[@oWVW_=bG[aDadj]KJd=CDfH@J^fkok[A;>1aUHS c>g7F[T`MYkZH7Y13aSdJkBebg0cNmJ>O6iP 1=86/eBJUFUU?38o^2CgaUI:CGPZimi <@Ug8GhX=USYFGc4CVSFdjNcUZgoWlTF?aQIXB=S;9gE0J9hOAC?HK29cMNC;CjO a7=L]5YM;OB?`XGX64?WjF0T4=4X74Zbi08O=RASN4h3SJfoV/b3WE_0VO>2XV:8 M^ZZD>dDjiDnaTk@7@D9HP/K81LY3N`JZNcCblD3o?T3SQL<>57`=W=LN2DOl[gb kaM0`oeoa?dd@NVLSY@:k0ifZZViN>djiZ3Rl==EOZbUllnf7Z[/I>K]OQThN692/IIGK7_ BRDXODB1lmI/6JO2W:bedloRTDcEMH6e Glc5DAJ>IQjcMoWjXaVZOFVA]V@lNN8dKmVGTgUS;9aYle[VFDdbN;UO6eQ4Lk8C1;2XYgW3Xn=N6=_PE 7Zn6@cZL9^HJM_ `;G? Gon`FUSO[?XDmF2;M=AE^@@5j]<]8bVFA]RYoB3WIZLiJkNL]OOhZC`]f`_702MI^GKhX`3bki2h0>=46gN_5N^E:V:MRJ`Gn`Hk1@Tn2N@7 ?ZeSYBIIVnaaAMm4n_:3P WBJUiCUZRKYadlaccW0cmPDMFXEWX@cifX07RgBTK`ahS;Kf^bVFM7FDg/W8I]VF W@G2@RgH2O=^]8Gc9NAcCi/eL<=Bd0nAY1O/D9loa =Vi@;:1lK4Kl==D>`d2YHCB<4nfWGHRnYURG>RAE[oL1MZ948?hO`XDESNe4M:H_ ;JfbZoVBgm6BTZ;4@^N3n;lk;KYG1]V9oG5a/faIJQFUYnXnlJTKI2M/RjAUINhi 7W`P85AM>Q@Dc_>H0offh[31V85/_fc[kUl2@Ph4Q;4nnh]ob>6P/^gDV>RKXG2BZFkog`>`EjbLkC=_SjhLmKZGgSXid^;83 G?SM7f?Uh[eR0h<0c/nGeZnM@mn14MK>2XmRh]H Q8;dU43Cl6>OH:OO10]h=iE7<]=1Z:72GmCo5U`4PV9SY`6Q`X@BK9f`/aW5jcagWaDCKMdEe`8H<92J;UbkTO]GJ5]38eBVRRnU]EiBKnSV?LX2lUjk 7B9BE 1hlbi;_cRUE@VkbJ/1=@X]IgMQiiO3j4LfJ`ZFI@H0n`DfiNg^XmQkhgD]h46F?Q 11GgVYd78V?RW^Jna>Z?QPG]K94f0n7JfUYHIXZ:Ro4F7ZAWG[mc;nQ/i=gDQj0k i^ERJQBGUAVhN]54YlP`:=o0JLKf`bMRh^nR3N8J:W877Z@ClPd=3K2QBTY;m`dn 2CN3:06SXUd9URk3c1giQ@8h9eA5So]:7f2W@<4oQ`[3GZPe0VUZUOTo[Oe47C]1 8PXB91B[IBOP4b>X]hh]je?/A;eXc8/>oj2F13]QXS431Q[;kjMH?G[l6?Ih7Ck> 31kLbLY>47;0CS2:6:Bm>SA65_gTCa:35=^/@G ZkGJA@WYY@g;4b^XXbhjTIAD2m6mk:CAca16SSYf^YNBbSgY50L9lRR:VifDk]OR 8jY8C4f5VT9aLH4OHRAXCU8bG;j:]AEFF8XC7k[[DIH^Sg9b5=^SAAiM>7dYNYb=^c;b4;?= k5l;1:f]T3oKRJ2Z]J0@n6fN93OEH32Tl;R/gb2=EK1kgoj8FM2iA/A6BEYD;^[PP9kP9e>Q9ffmej/a4kHf]RjohR`Z1R2 SNH8Z=j9;^`lLQcZ?TDI6cQPKf;CgX?RfU[EAeR_h?L^j=AIf8f3SQPFACUHZ/<< 7/KW[4maG=AgMY:[a3lk9`:0jW[ALWMi2;dgf]HMbi3gf7;;>@LkMn_ZnbdO?^N/G8]h_^nbc4iOoFjiZ`RTlW^ Yj@C`ic570b_R:MRoX=PY`3nmXcZimG/e8gA]NEIgDO@R^=/RnZR C2MGbcDY=LA`RSaOAFn`46NW;BKc2dY:maoa=G6La1d?X5MlP4f^8CcRgbkZj jEef>QlESC==GINME=V9TQ^WF5f;^beOD6^TBI2e]Sk:b/;6HS]f`^;>`]EbYPmQ 9gIj2N;o:D:hlc7;`G<<[ICR9^MKi@?lniJmTdJS1Kg[FgZWGV@WV0Jmi_=O5aCH N2onbJCM6A=/81XhDmIIn/Q>Ejif7c]QmnCJ[OS>/E=f=P/kFKYHcU`06aRUgj<> ?gh@/Q?TWb3nOed@7LZ][Fa^]mDEcjlgRbWkBkR8gAY19h:C_?INRKKIKmQYcLim L1OChF3Fi0IPX[ZbPi`0MT:@d:JVY_en`EHcib_][OmXHX/S7W8C2fD=0`[/aIGM NL9>^YZTFYBS4kdCEBneJQ]n]GCY@o7N5gEG2aX^iD/fIhY]H/_n>KB@lTZWAM/d On@3F=W9MiaIg:VY^jk:99SVjVBWmK]ojAUf`^HDc:DFKMke@g_;8VbDCe^biW[2 ?CABZNF4WAQ0Z9DMTIgJ:c4jeXXc=18Pn5E@hIl_5?=Rbn4llamaJUS^m:1kZ@Ve memf`XUn0lMYSinmP4/gcAa5fD_g=HS3Y13]AA05W_nmlSd<=cVYNc[2I[S;mU9fHoIe]1gao>A6XHMYg?>3J [M^=SLZ>SoB4WM2G[h^:_JDd5?6A[>cXbDQT9hJDV4cW f4UGQ=>YL_Xk>l7`1V/O3M9djihM8c]e:P<9>c5@47IRX60bQ9dH:9@bQ9fD0<57 H<:aIbLo/T5IJl1k;ObI`fV`4_72S]g8cE^aF<9>31Z4WAPXV0aQ9`H:Y@aQ9bE0 l553M/:M=KEeV`oh@UiB?=/2MQY[hgHZMZSJfdidC/YJ:D66U[_d6>mTl9LJgW5;h1_LeQ3n>DHbQT]Ci]:CEc]Zade]ZDZU;]GJeEgA:D?fMWAI_g;5RfikUFgM[TYI/ gPWI@mEb6?=MKoA>KdgaLOQRgMj3`gV>R^5PL<@Ej_7XVflgkhS/e5OIBLhB7ilD nJAD[Ll@/jMdlMCH/To?`2/hfc4gN@VM>`DL9?SOhL:Y=l[HZe?GS?KGoaPV3gSG ZHdiSY_k:C]A?TH/GGjfMhM[//BdAhT?=Dg`Q2JE:/NDe4=f@^SQ1nWY?n7@_M:a ET/WSjE[/;F7RDWHZ@ncDb3omaN;nI9fidO`@QGoSSlAShiBhiYB:gKjjaWATI`J aBXjVoo/]3b60POQM>Z[o/]>FW^OHhHdTl4kdSOI2Fe3V18hWZESX33[>jce/>:3 le_HU:;Ia=j9OXUmK6D7K/72kEaAPHC[e:[>fNWCdhDkdZ^HHJm5Q[2C4VRHPkgX @FGM[_dmMY95]N=`fSoFaQeQHQQfP_H9@@Cf7Po02EW2CPaRQ9dH:9R9TjgfS]QILO8C/c[d3Z3eZZCWII_f]F]oYfHDl2M53O_`5A` ^R8@RA2fV=5b4WIB63ChBMU;5Q;kBKmRY9dl1Zh8964mORS9ameJ:HhF?]5TY HBLJ=<9>ZX>7/9/3SZGGH2V4d]C@j;E`i^7g@0X]@GDbb59LD;eVeS 5WeoFZgPW_E=fdkO0jdC/Y@@@`NdO_Q@S>Z:9[KQBDGSZlXeKdiN]DhZ:PY0Ual=>^RmL?/WNPn4U>]@GLJJ/XQ8SGJW1WOZ8gZWjaPCg8[1Yf;U8EM/?MHE;IK;hnhW3N4k]o8XS8Yj5 Tog/AG[W6k>Gf>WO8XAckiCM4CE4lbEdZVQBg[mFA;RZBIYCfLcLS`kn8]>o>5QEeWYme7oBOH:DLm66W^^7SccRZ=?KXSj/[^ 8lM7FCX[fJo24o:RmE]E_E9dn1:kecMV[k1C/>3G8@8@e3OWAInOUJOCQ@o:^;b6 IUDfKTTGOgjjn>gmIdFDjbLd_U=V0a`gO`0F1Af>]0i_06nTIVI>]?MDg1fSZF2@ TMGUf5/hF/;Z>iNeI9B6?mF_L54;f@WUh<7kZHnFK]VU93k1Sh6B][`kI:N;Ejo? F;YFRIg0SD=hC[LOYk>TVm[5FZ=>bk`4i]22Z:62G:k=@n?2DSFNUFM[ZGT[9X `oIQY^el9Z0^A0MN]Wg_kL@7LXld7B?O;6e21:PjBEf;k7ed>F2BVI6[;Qeh^=bmohbnngaWI:0Y>J25NRLi1A5KU=i5Qaok 9c/YRC617DCKA3bkYBTTWQgGh<40I]Dk`CNVZLM/a:;5h=@l?GnEUeLPJ6QBo/V0 jJ>Yie`UddMj_Plb/UjaHeoTmKS7cg<;RhY;:bX@98E>b2>R4bkV2h@8P9kai5UB I^KYjhQYoTB^Xb`LUfkMQA3TCg=O0HB:ZRX6VO;:bY:bbZZ^ NJo70bH8LFk/=W/D3c7RgalZY>_jg/Ajhbm7K]bimoaeOVUINDe];D@Y67Xe=3G1 3@jZ0>c9jEV7@R=n=;G5N50DW50JA:UAeZj5aDE]n5=h4I[T2C/19L9>7@hEEWIR IX[[P^F8E:]iLU^`78Z8e`EDo6_5ZU7;aWf7YcS=I9gn45Z@C=aVKCe`i4ChVO2; UnV4o47oh:fo75VjJHO;P^EHB_c]Io?O3YnlkM2aXY9BeEF]QNONBPkaj1Yo<[GkdLcNM_JRk@N?8L9MnG@c_mnBB;?h`dl=ZljmW;Ud2K0AoieC_gCgBHQW/DNo6f O6SKK3gL5jhl71Qj9OHVCRdU?D[7omSA@aE;]^bJi3CSRlTFZPn2VZ0QWkIhUF9M C:DMIPPk0B;2CQf>4h`^EMV96HfSN0i`SjUi6/ic99D=7`>Q2O M<]>`1onQ=O^g8l3b0c/RQU:B^4iXmN:/20oa<@65k4d1ShdXd:a_g3CCW2;8V

/;F8cDS@k6^ 3PLKL`=Q9d11f8TI3nXb65dLk:@hCCC9SkE`=Yo>`TjX7AG]?A74lib[Y07FY5S5 Nc0IKFKiH;6SLgK2^^Ide5G4NU>/CSF_FgH2K=N 8[VEV?CGWldI@HRUhfZdmgDeRFJD`9VVAn <;8bm_16L<2VY_OZMgFSBmee`Ti0Q[2C^^71G>m9MT9Mf6i;cTQgGkCZVdTl[FOR ]iXhQHbW7@Hm:kF4nPYdn[bTjXX[6YlEF1h618a9N65ZQ2EDW>U:<^PoL5 i=O/>WSg@IYZK0/6@ddbQ9f0DSmV9hm5ZhJK>`ha/HDlCjO19SJOSSFinb2U^HG; @UEYl=3/==;Enm>9ITaAFVL66m/J>/m0k6lU_I=RYI962AACPFL_>@KffCHUo/Ae^IVLZ[QacaB2=Vca 2oe<1DTlL^UF@Uem_F:3VJNH308F0c[Od9n<0=2G]Z?`2IbKaA=^i[maaBEd^;]:Vh_3`^jL76OHM0@ElKFZZ[HYcEFn@1nf0C fbl=;=1gT7o`6[O/a>Ah;3encjING>oJ_N9NCWK]Sn ?>neE=H9M/;j:4lPF7OTa;a=>eO]fb4mb9]U@Z;RZ;S h_L4Q:0R[iDK`5@lbSIk1V@6F20S8O>c[K^AldcHK3_?F`Z=b/:=>eO]?[3SA=29 TnNP5Fm^`L[R_E41YVC`f@][mQiL^D<1TagkgMM^:BXYDHd1ZVhZXIcMao`i^^ni O^_SEbnU[J`P]dKNCYRgNJOBhgSThN>LQTHHF[a_<5/3:;^SE`GlDiNS]al;Q;gC k5FKG7fFlccW0@[`2NR8@/K:MI;m=6S7k8B=hnbWCaECe]>W 6HmcjQ[ZFmlXFbZZ6bCdMES8?<_=cLaiXUQJEo;@XW2c4nX52N0?MU0icim7ghb7 :;GG;fSe[P;fO7RmN_j1_a`8g8jo[FK 8kSbV/m7JHX]e`8CU2PF8iR_Wc/:cM_nIll^og`2EA18hoo5foL^OGPDMoPR3>GXnlVY`8@ nQ7l[jkSWKY>f0U`mEMf@]NHdJ:DjM@PHFiF:ZB;7iUR=LUd]Rj><]DEaO48jeOZ bV6^/ci5GjCiPKVCbG0l`_XElj3V6MIb>2iZGS;^i2Q7Rjl8>`6dO/a>FP`9lPQ1 @4l@8>b45d7HBDm68fT6@D0A0L9>@8>`Tn:@87V2P9hP@=P9;j87f>VKLhG[Dg2n _PUi6ROh1Nl^nTk9NYegdD1?:o?E^hTK0C8FN2 @6L@Z97:?RG/e=dNE0;i@b:;mfAB8OJHg`FB8@P@1;PA@PObQ UhYobJh5>G6oSPoeFlZlD7gZ^l_QO]VY7WdMWidD4WKZKWHJNKW4=`N>Ig_dcOJ9 jW0ZY;Vi6LLgh=I<;1IGR/GEn:^YTK]`U<3;VHcMg5[OTDBcVi^KL8h6;][@8JYO B3De]OGel;n]j[BcCkb/7VhTeQZOWI=7iMJ][eYJndCdCS@>0Gb3JjFWGgI`OZXk GWeINFE9NCUL4/6E92J5KZ/0/ABEU/6OKDUYNGe3PdcF2N=c=0KlPgPR1HFR]XFQIL99_KYj2DYkbNLocB7Y`;BknG=CElidlMYef7FWIVKUiQO0gG5eKBd>cFUMUkX7PI>lkc@8e?mXT[ZKmOTjaDjGRbTe LQ1OFIV/Z=oF;ToHjAdklF9:HUkg]>b4Ul^K5>lX?eN`nJNLkic]3b[a?=4ELGg/`@@0eA R^R4ljZhl^DTlonJJ3K@foHM2c]e8n5NLATlGZYU3la4^6RKh^AYj3aM `fCTX0EjNfngP5Nhl5h93eIF?N]e5>HJ >?>;BCch[/B3WD[P]456=_3jjk9h]JYc=XhGQA3Sj5[_OXDf;dRZnT]4hH30KYRKA7JRfLV_H>JMR^ME>UiHMCQbl7;1C_2N>/SD [__H2HjShNTXC0=fP]@4JQX8g^2i`7/KY/m08a]h;c7el5jnNANROQl92XGP@BNh 2]nbolS/eA]hjj3i`kO4abe<>3SWYMiNN]nlOg1e06a[Q2b0F`00FVP/KGm WF<2RhbaMlO2eWR]D^PkPW bFUYPjKJPIgP1]aUh@XCmmWXe11CNdAMdM0oS7IEMlMC`?K`hiZoW/Jf7F6WKT3P 7C/]B:hD=K8jde0[XWOmMN?Ud^b44=_MbTkOJD15KcEa01ok0PVkIe]eGKlGW 2HC@`8S5D9KDHE7f?]GERf_Zh4H9^RUX]b2Ig4i<3SdO6G[^8_O:SV6W8LHfQ`92 dc:cABFUQBG570WAaW<;2VkN_@m?85P5`oN8V:7b;J2=^:mH?/g8I COVHL_k2`0ZNG^:CD`BRX_:ZZVYaCDeM?M7KjW1@N?R5b=DkmR8ob];UL51XLg=?Sl2^Sn78 Ei:_cXX617C3g2Bbdc]fF_>`^QVRPgY]BGMlYEO/1:n`bHoBhAM^[:D[g;[^?Q6H lcbg]ZiF`md[?2jAB41F5IEEb7?0aK0CPTb5GkPTdT`KQRdfk1_V_/iO]OfFWES_f8DdTC6SPZo7;dbg`n56]@cW]kUii<][RKLbLek7G[a<_;0O:cS]3Y9Cn/F>9ZZ hEN9AHdoW1<=l2O/e0d8d>`D:]b@e@^VV7[5C_3V573b3;`/8X;]>7^?]:c7l=ZT i7b9Ll@Zf@jYUCTEfBWTO6AQ4M?^JM:mYlE U8X@OU<5YnYHSO/EUINl<]iQR>C:]T/J6BcORS5fmX8WjdMCNLL6b :g7aWH7UON5BVOCadfNDjd^NldCW6FTiCh1i@W8ZPUfRl2nWF3k9OMVYOEG=@7_O P>jhGeSGeEFRkeF[/>b3Z[JiE]g `o97^dien9@R>`FN?RLX;=BHWN0>Z`gRg:kSP@RiP]GF85?kg;`lMNXJ50/?Wn=/ g11NHH;3]?VKMYJFUFWaUVT_iCnJ>D1JPkbgiM0a^77CPZ2`K=aea8ob6faR]ng` dL9RJP/E;SCW[=b48<;Pfn>Q9f6BdB60NWF3A2HK4edf8:0KS]ZAUAgH:I1_7E/F 8nRZSfD]aXaN/A>DBhPJ3:Nb@lg/8DCQIef;7VWbB5OHRBkoH704=?3@K`oW>Cg: cYK1EX1]B@kFHhbU:hS5IogfNagY^mXm oZi]/6ZcW3TO6hD`lhR9CjR]Xnc[X>>2bm1_3BeagGgaZXZZJ]IWmOHR^V0HFoJA o5MNabI?Q9f0JP1oMG95EUT_;?WeRYf:blXA/A5N[b4NG;ei2dKPgC@S^/Q>0>e@ l2U=f:VjE_c]E2RdWJ5XD75foLlK>=a`RNXn?L9@4WFL8iLIN< D0Di^Bn`/`Tenl2Y]Zl5O6SBd1bH>V@mNojiP@Ef<65GmXYO86_Sd]Yaem;cg`:I GITePk6hdoVf7F4W/=>9PX1W]LFBWSHW`432VmFO?C_/^b4d;LE>QUJaMnkZg72M VCPm`dk0=Rd[2e]k4;70C_/2@^EZ=2fE<2P]o7cT90M?A3Y6i8:UFgKQ2]`X`1EU/n6kIERMl_W65VKc=k4Db`1QYIWHbl39]h;IJ=6[A1bkigF78d Gf9j0h/kGJ^52C_9fBVnZ;]F/TW kNHbW[fCV3C1OQY/4V2^jKU/GBM;JdEd;HAGa/HO;56Eb1n7S8;?G:1]A:L]F@e= O]mRYiOR5Zmk5@?l2/S:C]L8l?m`__QN>FAYM]d5=kedlE^mHRNLODUm5`mIS/M3Tf3VKNH2L/VP;?G>`TWbRcDe9JfTCkJMPeX=U9leN?NZ74RkUc kgmP>F3U2WJZZVVWG8:9i_?G[f34SZIRRANOnU0Y0ZWVMOG:WM;F=f_Ca4AfdS4e bIE>La:[G]Of`[8>0dV_f:VT_<;0dA<7D_0S7QdKYlmjYog19a4hTU/[3Vaao0C/ Q;DHE3e1GFJWSf7eJciL]f0TWCMjbTjWm]4jbdkWXjaKCiX`d Maa/kP1_3e9Y>l4P[NPmVdGRPQR?oI>@B=ED_eL:0GV2gn188:K/KoZRV@We3LZ6i]QH8OUCOY g[lCeG;103on`k:VYUH^/n7^nf7B:gJ2_M>LeA_dgmjYDUbemJSo=eoD^>f7de]CE@RN?Tg@``QaTkU1DFRZ?`m^>X63lT?g/fF0c1mb38gjnhFLJZ03^ k5JVgCLP]Bhi[jIUOeJ]SVdbFN:/Z]KbYZJbaYIDWVSK7^VNT]dD=LiIocFlD5SOKYaXoH:dN52_f0WV=g^>nOeXJXO5WK77k1Mi nMP4ej9C7CkB5KdC4<]hlPBa_g4lNKB5ba2N8bbAf_3gcZJ8bNP=>keiVY^kO>On KjI@AhA`iQL=Ha[9I70AFhZS:JfkbmMC[=K/>i`_d?jl35=/SfDPPE`C=_b3Gb6; k:4ZSFQhQI8On0?22`oUe9ehFW?l2G/bS2_kec>X]m]TYf3nh^A:MKGSnY[DJ/>H <]f_J_giW1N8^0A_YJZQWmWYjlnK?WNT^@>fcacW;VFMk7P:eoE3MWX3WeB^?/]Q B33Nc_e`H2Q7Pn4`HJ`=]L?X/GSEQNPHMGLZHJ8?7l6hBAD]OhT/HEmQJDQ7k;Oa HO=3BBKZ4^@[l1S[/g9njn[:3RGk5e1RXKX6h3[[^Y:eBAYNA<^?5e`[`?C[WFDM ?H?dQig@7Yb=oMWNPo8IH^GjcA@;clF[`liOb/g?Pnl2>>mEIi;MfMW1/==PnQA` LC4Uo:So`n5/E0egLfPN=6V][Sg=a@JkMDmOkjm8BMd7:H7h2JL9YVS:ek m]>WjSP7en?^9Dj`m`3adRIEjTkXM1K`W[Vo[;7UF4hMaB@JC/0N^4eGk=@3CEFZ @/i>eLfmATdHV0h_lo>n=[HMIVh?PX8O0:a7X7lfMYUi:2P<> ;Naef@U]N?c/VLD/WaoUO_b_ d4C150N7f[hc]GMN/?aP@?2=n0BhMPD;`dkShN2>icCDg768V@=GDmfmO8?2^K72]l^gkh4_ GncLVDnK4g:^BcIJWGXY>[Vi[:7E=5Zn^<=?_i8`d2/OnjS/52ChOB3o@DV3]0_n lk_n@S4JmHfMZ4je]F4Ymb0mONOQhbKCi/9C;Ua[HWiQa@NVX_T:=]R3HKeSjkiV mbog7ZA8ILgLldhAZoO/9?Og2bnAl5g/Y[]i`b0UIR3Mc@DI>3SM:n3HQ<@TWQM5Uf4^HCio;OKlRZ_Z@Ki19 XoJ41Z A^Ih^GTi:7gFbPf0E6T0Z7j/[Q4knR`7Vd5?=MK>oOV[EagRZEY8KeeYOB<[UC>nT[BdeMGE59JE?LenUI6I6 aMf63V[AQQeVdnK06OQPHa_@a@Qc9b?GFC>G[klH4`_c7^h9aK0C_94L3XihV9W= 5hXhDX5@U5LPN?hZ;cD[9oC29C__QG2:0XU[^;VSdOAi;ejoI]DNX`fmcThkSo[1 ^a@L>]W=G^@GXI5K0oAUbn7SF0b>h3VmlXkFf2OH2MdBRhA@BRRM7ChLLmmWGOg`L?C DMMfW`QJ_7WWcgK^D>A2U88UYmL:RZ0dI2NhJXU0;8IBB5cb9bRiZh<4Ai[W[ejO ^fHc9CkaW0NKf?oR7lcZSQ/UmRhk`CF:QONRM7M8]<7ajGOLkWK=CT>3oQ0WoMZI`l0GA/SnR0kOA`R71T5ghHMS9hU:Ra451TIIPhe]Mah=::^/@>>E6ZWj4OO03mFZOHNn=Z:LOhigm1CG m[j@[mY>kR^OA@So5cM_<>:=IYToQhRLKeL4?:_3/A5n@d]6FN>>m:ZoWACnRW/9 fNOH:E3`em>5_SUjlLHa5?/L>bT=Bg@1Ol5WcR>b`1Q;IbRgcCgWaMa>`4FU>iV? R^cDFLnm:0@UUiJGWkibkB/S7?UgnN]4/oBLaj[1iW1K;k8CJ[mhk@Kf3TJI>b:T I/C5:ab0<]HOMn0QK]e_gkWGZFJJ@G/`LcJV1Z:>[aMg7o_ac[bCR IWREKbM62QYJ_[QHa4E@OHfMoS50>?5:FJg:/1 f@UAKWLL?bWl3P0E]hU4N56cME?BZP0Kg8C]SgM5^dH[bUjb1S Vdgk3co:NPbCNlgoX>eO]64K5/_SKE`GKMk10FJ_S=/>:jfAbSj=40h8e8EM@@1o IDYeCGA2bH00j>7Ij^YKk1C0ag5V76[FTmN=I_@KMSYm:LYRnSa4 C827:9PTLB2/4gJRWKW9oDUJ`gDK7;Pa8iK>X06maTi]KC0^oLK43PHHf3GHiN]o ;NkfoI@DcM>UV>/8N`N[9ePSO3756UJJB[gCohnKdZ[nli@^HPBO:7QDdBaCFKWC 260m?bjQHP2HT3EDN]mR9coQdPOEELg:>X[NN]OmRIg^9Cn`W;D0QSYHKEW>V=oM k8@=A1^_1O[9CS0C?GOUfU0NX72U;Dja_MRY15:RW`Fo`@ceN/9MZJi?>gKgV1Lg ]hbj@S/KIc^Obb[Z:5fDL`]>0NMcW]?OWUTcD9eGL`gH2CIJJe8Z?`JihFJU1_CT Akl2ln^UEoQ`dZ]F9M;M[dbYo?k4CZWYjE>miV>W2GYPHcOfToQdmgDR>lWIbDM3 MX;eMMP5K@>bb7nelJHdmnl4FeK[F@]PH0nOW70g2_49?^EP9:IiPPN68LJfN1HU 84hjPXZZ>ZaC6T]jn?5@C/d`n3K14E[]YSWX@^i1YD329DhLOB8NaN7O:ISofJDR S]m:66BkaiEna:eMejkmWGR:3a?FTjmZ:oDY67AoHZN76AVFGP/YmhlFc]`7bWZ< WF14BWW^aFJRYG?0j@/L@kC3ZHeWTajV`Jlh56^dKdaeYLUJIBobl[jBQeCndMAf hkk3^ggm/KS[K=YanVM k5C0:C^mmCh76`IE=Y2;@imMiP[WF]_Bm/didOoZGMTYX<0PZSRk/_M]W1A7BcmS 9mj/1G0?YCo/57O_?QgeH929kI4^Ace0JA>Pm[M`P^64mjY=j]P9nWV`8P;nPQEQ X@[3/Z[_okAV;9J@[5F0WD84WdFYIBO:^;eNA_5WKk4CaL3`d<8?OU9CdJQO kkLo/E=:N[ZIe`8h400kZO>aATnX7Y>Mh5l5BQ^XKQ04O7M0F5MV=mhDE4WSiI^B Tn`mEfcKZhjMa;Fe6oHL`4TOV=0_fkb[FUb3>kGkPbmUjnWchNlGYNdi5P3gP?[? B4X];:ZG1Sj_obBX2ekYo0X^2bC`KZMD<_?aHYk4n7ZY>WKjEJSPjn]U`9niGc5C 9iD6_91kOI5;FMYCZ8IdO[=WUi2HK3E[0KJI X2ZamEjTKSbPncYQYbNi[baWc:?eCV7W8Z7ZD@@FNC@0gUOP005VX[0jF;gW85B8IIg3_2GnYlna5XEC?`QH06_cWJ7EWN@7[7K/BXF[ n`SGOgBHH9AVh3Z;GePTJn>B8]BEdh_G`@[IhYHAQ` Ze`M>odQG6QiYiceIF4O<:m>mTeDBNl:C[l?h2LG=cJ[YmoNNWd0[Mn`DlSIlnJN Lf1l>B7X24D@]gDoG]FkP1RBVDo8IeiJDZBk1N2N2W E:Qeo_m:g>am]g:07i_9Dj3P?dlFKW[d?[2Y8SSUSBd1cnYkcB6EO4ggDA2h]k9g oCPYHZ:HkcO/1;M@LeI_VVCWgKZY>MN6Se9TbCfO];OOnJ1 ;_kK`3cahL@0Gd aBB;;DOlZlCEZ^F0=oR5X[DkOh402I]iN5eXK>ZZ9Z6lZ/YUoU:@<7c8k3ib@UAL d^OH2I0FeCO_OURU?@l4l;n;;TV[Y0:kZkhP_8P=R:K76^/cP?o3NE5BUe?B_b3dXKiRMF3SPQmmcbUT?T3Pe216=_UV4a[=CUNYU/@fKekg7FYR/B GAO9:U3`Ua1A35mI8j7De5kl2:PIMS;cmWT/McZ=Re[l/OJRY[jNWUIH5hC16d09 OWVEgaCc85H=TMM^P6N`R]6l0CRMTIbF=];6KHbU:iHcf6>J]Va]Rha;IV1U9`e[ U3A:cUnii[ih=KKQ8Z`ACPINl@]fn_YmKF`3JX;m4XjUg4Y:AQ^DJi4cWU0T2SUkPFJW_aW`ZV_[E6o[ k1D/38G58SY<<7`0GXZ=HaGK>U]/cmoOg2I;:VoZRV>jg`@9o^FLR9MDFM@48J[M <6j2@mLJjMKd6YQ^DQ8JJ2Z@?cjjm?2Cf[bjMSjel>2S/RK3V=8oQ/V=ZK[8<5Xo 7/SoLkS@neiUHjoji^DN1/2:IRO/Da/hCenaOBnLh^hjLZ9CJOoa@3R_ISF6jA@k 5IJF3>@iDB:@gCBGnL_g7?_;>QXdjRmSL:QDe]c_HoP/B3;eBlX[CDX;YFVmU67K2[9UPkFKX=6>Z ViNAbdc=daCW6I

  • GV`cIhW5^f@mIhW=kGZ_f_ShaG==YVY9FOWeQ7]; ]^gmJXX5cPkCNfZ06Sib[K`FXV]fliKA_DF93Oj2amECgfIM^ gX9W68iM/a>W;`b3iBO?nDMCn`N?7[6n4DDL=<`SL3321b>8<4`ea]Yk19joY4VG =Bbl9fnC]KDn[FXIMUkdJjf=Ro1P8?nS@<6@BlFckeF/ba9OhMLoZF`^JVRYTm9N b>CHP;BX_kI6FF]iTaBT5<>_GiMA?N]^nCnM5Pd8P8UA5nb_]6HTi/50hDmAYO^O e:Z;;mbC;hFS;R0hb=[]Fd=[R053C>cP20Rokie:gdjan_AWGWaR4^/i[9ZjnSn= W89]YWlKJnagmP8R1E3_k=g?SD86lIRJG`[h/cK]W;Ih5GSbNoWQ2k@4JaTLZD33 OS2bnMk8VTk83c:fAI_QmA6I7da/WNH]FKggl?f7jE0kMhPiF_D_Xhg@:WV_DH:= QUgn7_FJfV5Wd6_UQVfnO[O^9l^k`2;9:7B=9^gFlZY:=6n;[ioWdSFHi^PPJ0X= T6=^PgDRdcGj;N3h2Bh>]g2fW^VcH]L_Ijk4`>fNJPaO^R:0bRl/G;Ggl7m?=4>I XjaM:j^[eMf/dSJFWaG5Ne0>7?AmJnH0a?k_Q:T[3a`]:H<1CmoC?Z5C67hkdZ[n 50:BjL:Q=[TnVE:3Q`W=Hd/fYHWmWmMMi4/BRYXBRY/BBY^YE=:4Sm72QY1GMC/c JVa^UU96SgQ4Jf9T^:F;VB31Ya55Vm=ZH0VVn9Ke<8nGaE^dN^Z/Q@P?Y5gRNBdJ ?m?WDEHfZ`:fC]8`c=GKdW_A:?OIIjkM:9IkXEB70b;o?Wgil_CUjK^H: YUFMjS8]_3T/G[GkV7m/`]e>aNRDMaTJjUHXKB9SHV7YcI^m69K]R7/2VLg@JNHD YkNm@cOAFALi9J7QCaedn2[SlI<]Qdm15Wg8f[]Z_hM4U7f=]eLEYCSd^Egf3LbQMTecM 1?:9::@B_Z:_hgnX_[6La1DMe=P5DYGGoY4oOf=:IDii4lM`DTF/]ji0Qh>`IEe9 D9F`jVWA8ba3V9:[JlD@T;Rk2LCX?aChk>E;Z5oPQ2Cdgoa@?P]^AHG3bd=bZBOhRjLnEJaEDcc^3<5@P6]n5;DIS<5MRY3=eDP:[ck81Dk QXL2@kLM?;YbagjjJnPV>X/^abKL@JF=cHfJM0ggE8_5XY8Rm0;];=O<3JKVcDKi :1`/JFlEN:OmdElDTMcd10XZBSgWHh`=Xl]2f0?cbV=:>: gCA2gehCfTNeRoHQk/<?O53/]DM`=g/IYoZjklm]Lk/GYZ oj3^ZD>Qo4jdBW=0N_S>>hF=M[4Ek2JD[5>k7eb421L1Kc0MB0Pmo298M@@1PX0B 0];F=eOi3CJaYNaFU?f0RaBk@4]do_c4LYSWMZ1VE0::O2@840Aj7X46VBbnY>W; bkB7^ZkZLoA1YjBf3F2Whl:[1A8HZ?LlcZA6PP11@0/4VUZU:AF=U0UUehbPe=:2 XP3CFoTP`BN1QLMbjWXm]ZlF;hPl@Q3hT16@b:AWnA9Z^eloEMUMi;A0`Cl5lgdB ZlXK>mk;oY270NTk@D0o4L1N//o3ZXlYgkUj^MNV=D5Ae2@`_5JFG0;kPOj`Uj6O hhNdRR3@O@SPS71aTgAlMMWW2N[Go_`aDLFnCjP3mMd=7BVO840@j6h4@51SXhXY P/8B[blC5?bm3;aB4_AJ@ZRY^lL<:IlPd6<8h<@^c^[fKB>X4`Fd[k`>3icf6:ZT 8X80@J3[2<3QBEi]ll7/6[TScKhV@D5S1VZjD_ZbEPIoaEe7PiA04208j1D2V=LU 3BeQ^OEbEgEmIaL_B?1[o`:KVnF_2CFaN44QG4d@j2L8h9ahJF>;Kdi]KdJJjiCR :e3`fb2n@ec5lfXYhnm>[cRO=8HP@13@5@:Hhh:jiYEYEAn7b/DWOCHc21Clkc2A EFaI[121PHSEICoiRMCEB2KUm5L449k0<;J3?hB;SJnEAnFB7 S_0B@N33@Z1F:Q/IFoI9Z>0Om92MPPCo9jA`eYfZU>:nhDf^_oj:TGhA17X;0EP= fMf[n9NC`UoY2D7APU`@oin2n4LNeaKDBXUMDfn=3E8_@J3G4L3d?oZTKUaDfLL1 lUENYeCF^[fIYRH4bP`G9UDd=T7?A3g@HD;kUN; FhS?0L;<1062@3/48:hPe18EEQQacjT8D3fhTAO0ooaMN^EN@S@H0P @12P4FQZUBFD=m_7EO`fB>iGDkNJ9MGBi6hC[>mDG1M9:Y[JQChWKh@P@10P22PQ 05gd3D73k?]Eo`[7_`QgdWgQjP84OcmCI1mO7Ub_jEHR^mo;Nk/d9?SmMk9=DNJnh@KD1i0Y1P2104>10@2:CkLn]noa: bImX?Z7oEefMMNZ:_13HOojoL67hReZiXXWXVXSLB10P26R1@6^AA;HmXoX?L5]7 >Jo[f[6G85m4nHH2@GE:F69^ aX?no7l>5XBl84igfl7;8KjB[`P2184>4H2m0BbAMVJ8oa@/XUCUWO<0c8N9`Vo2 2lO7Ecb[JLJfH8OETA/80P@1PT2W410gBe<[VdK7UGlL9Y@k0MK0abKFPoklADWE ]dA=aHf]a;=UY`0W=a<420:J8h0X`iWRU]2GTVT95Fl=biVeVf:6dU11I19>_UYj >ZonMEec_EBZNBgTCX80@H0PX1d2X9[l^^HX@OgDjhRT86`G3igFW`LDO7:^:>Qi GDjE]54V8nOV]<>I?4D@80QXQ`22XEo>Ula>Z_kg/j9o211@78DD`?mc^=3YM_Vf IkFU3I2Gb;TiXVLS2104NPF1=oVBUYTYED3 1062P1hP0=_bYiE=4n<[eZJ;7iK11gR_l2BYU210420840@80P@1PP11P2104208 40@80P@1PP11P210420840@80P@1PP11P210420840@80P@1PP11P210420840@8 0P@1PP11P210420840@80P@1PP11@2d2oam2H/;f2VE^I7=dLVEQK@YUKVA_HVX: >20`86mRJPXa>3Tc<0YUKVA_HVX:C@P;dQUJFMX M20a=S@P;d=_K6mbDg1QHfD:;dAUMVUSIDMbHGTP;dU^M6EbL6m/HGAU87AbMFDP ;d9YM7=@IG93Kfe`KfiUKW@P>20_AVU/M6Eb82m6K65dIDAUHfmTIB0n?PYcM79U HFd:N07]d3410000`Z3nZFL;;hQ0HL200@<631P`H<200@<631P`H<200@<631P` H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<20 0@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<6 31P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P` H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<20 0@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<631P`H<200@<6 31P`H<200@<631P`H>0o83dPE1569BH1@0XJ49WI41DHD4BUFI5C0 0DN78V=550^3PV;G2O8@D<1:5LV2GPIj=l1fFm E4VJ0>Gg:=?Cn9a<030DVEoRoTiJ9h0N:IW i8X4RDURYQ7GV6WUjg]FMKVJ?VofMlNOU?m?LQjneGa9^c?WT6b/;kdF0?HTFY/M/kjE E@2dK@I0iN6/CnlP0?850;CNW??PSI`1U`4El0=L0/Y1^iSDRALN@31XNQHIPH 5/HIhhMIS>5REV7FHTX`eIQSV5I<5nHfIQ0cPOV2YF;E/JIH9j`oMPTf4I^=;LAF H8mPFk2G/@?HHN`k70k7`1WR771n^1QLn2 3l5cl69l8Kh:Oaao7]n?7lJo9i09FPA[PPlQUR0TK2AD41X8i`SmQ172=561Z4md 8XH@NLALHRVaS]Q1_4TL9TjC54V691MB92VI]85DBFXRGBHm9[dQTlTjI4Mb65U0 GTn^99lPGbD?TSm@U2PV54m:74E2fDhiB[U0ND1i@jEB3JQ^e5RZV;ZMFTnmA7e: OBm7Tc>GliOSbJfCZi5[UN^GNbE?U=NGMiMO;YlWGb5oB_jVo;P2DL50`E>1Xk1F XDKQ]<8mQDU5VZ:EHXQRVV:9HX?R=LEA9KbBPI:g4TnY@>V`dRFU8AY2djEid[Rd CK@jfVGJ<1e7=jCkdi?YaO@Oj;gd2FDUIE_U:>DLiA[U/lYB1/8`H?PcDQVUS9>< ^hb?lcCV^LoScm/f[fUNok`YUOTZKRYlUB:EIYD1UHnZC5E_eACEWJY]ZToD<6XV JV5ZfF[keBj[SLnWcgNNcieO=?oTo8OZ/;Z9N[SjJ_G3jSgZTaZJ6[hJ6AYE6YLd aSDIVVjJbI[UV^LdakAXFP^e15[UF^NeGS2EVNkX/eQWXdjccQ=MTRiK=d6gG;MCMd9?BbmH;en_DNnQ?U6O[InT_dNoFgo:`=0P fV2;@I_1Z:6:XKmQWV6ShFd/Dbg[;1mI:ET5F6fdj[3j`m[4VV]MHgg7QV[SHk?>Y]gV]JfY;Mmf_nem>iYM /=dF^djkcoH>mR;k9_/a1cf7N8Nm3_OHM7HX^hAmeA7[j>6hc_63LjS2``Gl1OD;AQbdG7Q^1abTBiT;XaON72Qe5GKUN=Jjo[8:hnh^kQo^BilH[ihgaGOQUo944UhBbQ=54UlAMRF=9[TTEBN<2Cd6eh7FbGo:1i:VD T9BS:C>YdJW=JHBdn;CC@REQR[0[GCjbVWEkUDCXT3ATD`XLeUV ^iR>oTceB8`TVbF3F@^cJ[;NIdMUWlYAc17Vm>BJi6k;7LWcbO]n=FHeMgEW_WKn Q_c1=Ni[3Zf5eZiLfkU>Meg1^^7e_^^?KB1]B=W`bdK;SFDKgfj:g]AAX56`_V1X /noVaT:i@U7Q_Bg>F`i/aF`EK>gMI[>]J]^G8UkAmF;;hX[RCbGLT^_OFGeGnMg< mXC]_JGfYO]gh7H8MmcMjK[cF9URFEkId:kPGJgUc?:Rl[NkEnbnEV5KLF0?JHmT Sk@bZ;:mBZmZAmFWjZCZPAZ?V^JmjW^gkIgJam_G_mm]Om<1S@?51chN51blOlSg D6^]@Fg5HMcQ[e8lI7?AhE7YLO2SgGE>mCG=jPgU3K2SI;6 /N=aafomh?E3Na>[jE0cXkWh13PQ>O7RaoPOkihM7LhM;CnKogcdS?JIV[?:Id_?TLhEW9/iWgMnlT;6QO6; RAN7>UMd?[Zdi=:M[[2^g/^1UjmNlKUbZM^mnoaEUj]W[SUM>gfMOKg]Q_f=eQjk WYIOk7iYjKG_KKgYL;?mU^>]S[h5ONOjGO/_g_JjONF>oidK0h/6n^h^_W_oG]`m jGgNoM47Z@mN?laj>?eXoF?/hj8W2TlZWZXo[OgEn=MVZKgdk:3GHCCMfW_YZN:gZ^n?oJ1oJ7kHoC7TNW/CoQ? UIn=?gMl2OcbN2I]I^KOmhCcn`YUKVAcM79UHFd:IFiTKf9Z2S4c830PKf9Z2S8f 30bC@d<3MJ<30W<30W:@YUKVA_HVX: CPP<30`<30PKR0:<30`<30`<30bCD`>B0`<30`<21^80X`<30`<38`<30f830`<30`86hP2S0`<30`3Pa830`<30`86hP 2S0`<30`20`<30`<21^80YdLV5YK6Eb 2S`l82mCJGYU834g82mBKfmd834d830PDR0_BFiVKb0a830PDR0_BD@PFb0lHS8i >CHd3TfIVDn2SaRCIVIChPGB0n?PYcM65bM7QbIFH:"], "Graphics", ImageSize->{394, 164}, ImageMargins->0, ImageRegion->{{0., 1.}, {0., 1.}},ExpressionUUID-> "7f390dbb-7a8f-4d4d-9605-aeafdda2d339"]], "Input", CellChangeTimes->{{3.728058151655451*^9, 3.7280582039027777`*^9}, 3.7280582479309607`*^9},ExpressionUUID->"3741c1dc-4876-4d91-b1a8-\ b4e6426795c8"], Cell["Cryptography and Security Protocols", "Chapter", CellChangeTimes->{{3.7280582612197733`*^9, 3.728058304007764*^9}},ExpressionUUID->"593644f5-8844-4583-bafc-\ 9db5a522d8d5"], Cell[CellGroupData[{ Cell["", "Chapter", CellChangeTimes->{{3.728058333692665*^9, 3.728058340387947*^9}, { 3.728193103504583*^9, 3.728193138381463*^9}, {3.7283282475790443`*^9, 3.728328253934759*^9}, {3.832820178319384*^9, 3.832820178637863*^9}, 3.8328209951422663`*^9},ExpressionUUID->"54c4424a-d883-4fe4-850c-\ 86c79f6f79db"], Cell[CellGroupData[{ Cell["RSA", "Section", CellChangeTimes->{{3.728062293677641*^9, 3.728062304019003*^9}, { 3.728193259258326*^9, 3.728193262544937*^9}, {3.728289540604205*^9, 3.7282895716818933`*^9}, {3.728916766705125*^9, 3.7289167807460003`*^9}, { 3.729067604516163*^9, 3.729067609554571*^9}, {3.7290700788747683`*^9, 3.729070081558054*^9}, 3.729070114704534*^9, {3.729241142329267*^9, 3.729241197897122*^9}, {3.832820248564127*^9, 3.8328202635705214`*^9}, { 3.832820990615973*^9, 3.8328209934425898`*^9}},ExpressionUUID->"383abcf7-f5f6-4483-a1f5-\ 79c8e60fc8fc"], Cell[TextData[{ "So, the candidate for one-way function with trapdoor is as follows:\n", StyleBox["\n", FontWeight->"Bold"], " RSA \n- \[Theta]=n=pq, with p and q primes\n- ", Cell[BoxData[ FormBox[ RowBox[{"X", "=", RowBox[{"Y", "=", SubscriptBox["\[DoubleStruckCapitalZ]", "n"]}]}], TraditionalForm]], ExpressionUUID->"16eb1d52-c194-43e3-9f0e-a87ea8e03925"], "\n- K={(a,b): ab=1 mod \[Phi](n)}\n- u(a,b)=a;\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["e", "a"], "(", "x", ")"}], "=", SuperscriptBox["x", "a"]}], TraditionalForm]],ExpressionUUID-> "1c0888a6-fc71-457d-b14a-08750ff56149"], " mod n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}]], "(", "y", ")"}], "="}], TraditionalForm]],ExpressionUUID->"dfa0a9b4-7e1e-4efa-ae0e-cacab40a0f62"], " ", Cell[BoxData[ FormBox[ SuperscriptBox["y", "b"], TraditionalForm]],ExpressionUUID-> "d6368b16-0379-4720-889a-293d58703be8"], " mod n\n\n", StyleBox["Exercise:", FontWeight->"Bold"], " Show that \[Phi](n)=(p-1)(q-1) if n=pq with p and q primes.\n\n R", StyleBox[":", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], "=", "{"}], TraditionalForm]],ExpressionUUID->"c200e5dd-036e-4037-948a-5653f56e5cc6"], "0p ,1 ,2 ,3, 4,....p,....2p,....3p,...(q-1)p, ...., qp-1,( n=qp=0)} we have \ q multiples of p in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"1fdf94f2-ef73-48e5-b676-064f86a6acea"], " (all these elements are not co-prime with n)\n \n ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], "=", "{"}], TraditionalForm]],ExpressionUUID->"15689818-87a6-497e-b8c4-4941572e0c0c"], "0q ,1 ,2 ,3, 4,....q,....2q,....3q,...(p-1)q, ...., pq-1,( n=qp=0)} we have \ p multiples o q in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"9e387de7-77e3-42c4-901d-00531f51d214"], " (all these elements are not co-prime with n)\n \n All the elements that \ are not co-prime with n are multiples of p or multiples of q\n \n The \ elements that are co-prime with n are n-p-q+1=pq-p-q+1=(p-1)(q-1) and so \n \ \[Phi](n)=|{x:gcd(x,n)=1 & x{{3.729241201466663*^9, 3.729241252321476*^9}, 3.729241458601811*^9, {3.729241525123126*^9, 3.729241663853084*^9}, { 3.729241705044737*^9, 3.7292419267274437`*^9}, {3.7294946557245703`*^9, 3.729494798964449*^9}, {3.729494895132214*^9, 3.729494947374811*^9}, { 3.729495117828012*^9, 3.7294953800385303`*^9}, {3.729495410588004*^9, 3.729496028572083*^9}, {3.729496068916316*^9, 3.729496069372917*^9}, { 3.7294977275280037`*^9, 3.729497774494895*^9}, {3.729509668627067*^9, 3.72950966947722*^9}, {3.7295098566520233`*^9, 3.729509874218317*^9}, { 3.729863882785528*^9, 3.729864150685753*^9}, {3.72986418409894*^9, 3.729864190211557*^9}, {3.729864234405366*^9, 3.7298642514285097`*^9}, { 3.729864294397285*^9, 3.729864312138418*^9}, {3.72992629690235*^9, 3.729926301228644*^9}, {3.8268725528003197`*^9, 3.826872606319004*^9}, { 3.8268733521115637`*^9, 3.826873354819333*^9}, {3.8328202423093853`*^9, 3.832820293236224*^9}, {3.832867481825624*^9, 3.8328674942222347`*^9}},ExpressionUUID->"2fb89456-433e-465a-be37-\ d26bbf7145e3"] }, Open ]], Cell[CellGroupData[{ Cell["Properties", "Section", CellChangeTimes->{{3.728062293677641*^9, 3.728062304019003*^9}, { 3.728193259258326*^9, 3.728193262544937*^9}, {3.728289540604205*^9, 3.7282895716818933`*^9}, {3.728916766705125*^9, 3.7289167807460003`*^9}, { 3.729067604516163*^9, 3.729067609554571*^9}, {3.7290700788747683`*^9, 3.729070081558054*^9}, 3.729070114704534*^9, {3.729241142329267*^9, 3.729241197897122*^9}, {3.729672312038756*^9, 3.72967231226606*^9}, { 3.7296726034790573`*^9, 3.729672612627297*^9}, {3.8328203078211937`*^9, 3.832820309053493*^9}},ExpressionUUID->"e37b483f-5d8b-46e1-b021-\ ea2ff3113515"], Cell[TextData[{ "We need to show several properties \n\n\[Bullet] ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}]], "(", RowBox[{ SubscriptBox["e", "a"], "(", "x", ")"}], ")"}], "=", "x"}], TraditionalForm]],ExpressionUUID->"4b9eb7b5-61ed-4bea-8b6d-de794cce7aa8"], ", soundness\n\[Bullet] ", Cell[BoxData[ FormBox[ SubscriptBox["e", "a"], TraditionalForm]],ExpressionUUID-> "5db815b5-d7fc-4029-b045-dbcaec58b2cf"], " and ", Cell[BoxData[ FormBox[ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}]], TraditionalForm]],ExpressionUUID-> "f285ff72-78f5-4281-b9c7-98710a2f16b6"], " can be computed in polynomial time\n\[Bullet] We can find b given a and \ \[Phi](n) (invert modulo in PT)\n\[Bullet] It is possible to find efficiently \ arbitrary large keys, that is, prime numbers." }], "Text", CellChangeTimes->{{3.729672614529068*^9, 3.729672711586898*^9}, { 3.729672905718977*^9, 3.729673248434587*^9}, {3.729673280621332*^9, 3.7296738092571507`*^9}, {3.7296738473937263`*^9, 3.7296738788110437`*^9}, { 3.7298644534448757`*^9, 3.729864507397532*^9}},ExpressionUUID->"df4990e0-3e40-435e-b9b8-\ 8cbb2c933dc1"], Cell[CellGroupData[{ Cell["Soundness", "Subsection", CellChangeTimes->{{3.7296738816661053`*^9, 3.729673886163362*^9}},ExpressionUUID->"929264a8-c59a-4e95-bdbc-\ 1f29b0afb16e"], Cell[TextData[{ StyleBox["Theorem", FontWeight->"Bold"], "[Chinese Remainder Theorem]", StyleBox[" ", FontWeight->"Bold"], "Let n=k\[Cross]m where gcd(k,m)=1. Then\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], "\[TildeEqual]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "k"], "\[Cross]"}]}], TraditionalForm]],ExpressionUUID->"d1d634de-cb08-4d35-bc11-0d244423ef31"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], TraditionalForm]], ExpressionUUID->"5959b755-2f8f-4f07-a80b-dcf2e847324c"], ", that is, \nthere is an bijection \[Gamma]:", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"dc5dfa4e-f10f-4f0a-904d-bb5fc5928be2"], "\[RightArrow]", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "k"], "\[Cross]"}], TraditionalForm]],ExpressionUUID->"092c60f6-27da-47f7-9e32-b62d924d9227"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], TraditionalForm]], ExpressionUUID->"1240e51f-53ed-422e-8117-6772b2928237"], ", such that \n\[Gamma](x+x')=\[Gamma](x)+\[Gamma](x') \n\[Gamma](xx')=\ \[Gamma](x)\[Gamma](x')\nand so, \[Gamma](0)=(0,0) and \[Gamma](1)=(1,1).\n\ Note that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "k"], "\[Cross]"}], TraditionalForm]],ExpressionUUID->"0424898c-d839-4c93-a20d-c85276a93ff7"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "m"], TraditionalForm]], ExpressionUUID->"8cadf789-34b1-4d5e-a472-db322c698184"], " is the ring where + and \[Cross] are performed component wise, that is, \n\ (x,y)+(x\[CloseCurlyQuote],y\[CloseCurlyQuote])=(x+x\[CloseCurlyQuote] mod k, \ y+y\[CloseCurlyQuote] mod m)\n(x,y)\[Cross](x\[CloseCurlyQuote],y\ \[CloseCurlyQuote])=(x\[Cross]x\[CloseCurlyQuote] mod k, y\[Cross]y\ \[CloseCurlyQuote] mod m).\n\nIt is enough to find a bijection that preserves \ the operations (homomorphism)\n\n\[Gamma](x)=(x mod k, x mod m) (this map \ preserves the operations)\n\nit is enough to find ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], " "}], TraditionalForm]],ExpressionUUID-> "50df9c6c-da1a-4ae1-85c7-5ddc2a59837c"], " (that is a right or a left inverse)!\n\nlet ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["k", RowBox[{"-", "1"}]], " ", "be", " ", "the", " ", "inverse", " ", "of", " ", "k", " ", "mod", " ", "m"}], TraditionalForm]],ExpressionUUID-> "6c9170dd-5cb8-49e5-bc31-59b713689315"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["k", RowBox[{"-", "1"}]], "\[Element]", SubscriptBox["\[DoubleStruckCapitalZ]", "m"]}], ")"}], TraditionalForm]], ExpressionUUID->"cbe7fb49-09a4-4268-9695-0b60e13b9a85"], "\nlet ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], " ", "be", " ", "the", " ", "inverse", " ", "of", " ", "m", " ", "mod", " ", "k"}], TraditionalForm]],ExpressionUUID-> "53cef8ef-f426-41bb-a707-b0bf36c2db63"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], "\[Element]", SubscriptBox["\[DoubleStruckCapitalZ]", "k"]}], ")"}], TraditionalForm]], ExpressionUUID->"a54f270f-5044-46f1-9acb-38f8ac901107"], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Gamma]", RowBox[{"-", "1"}]], " "}], TraditionalForm]],ExpressionUUID-> "a253b332-534e-44b3-b561-d28912047ee6"], "(y,y\[CloseCurlyQuote])= y\[CloseCurlyQuote] k ", Cell[BoxData[ FormBox[ SuperscriptBox["k", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "b19db526-4170-4d57-b04c-bee88ca3826b"], "+y m ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], " ", "mod", " ", "n"}], TraditionalForm]], ExpressionUUID->"f40c436b-0b9b-42db-9840-eb56602fe44c"], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Gamma]\[EmptySmallCircle]\[Gamma]", RowBox[{"-", "1"}]], "(", RowBox[{"y", ",", RowBox[{"y", "'"}]}], ")"}], "=", RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"y", "'"}], "k", FormBox[ SuperscriptBox["k", RowBox[{"-", "1"}]], TraditionalForm]}], "+", RowBox[{"y", " ", "m", FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], " ", "mod", " ", "n"}], TraditionalForm]}]}], ")"}], " ", "mod", " ", "k"}], ",", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"y", "'"}], "k", FormBox[ SuperscriptBox["k", RowBox[{"-", "1"}]], TraditionalForm]}], "+", RowBox[{"y", " ", "m", FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], " ", "mod", " ", "n"}], TraditionalForm]}]}], ")"}], " ", "mod", " ", "m"}]}], ")"}]}], TraditionalForm]],ExpressionUUID->"7c3e4e9a-d826-40df-a5ec-1ef7dfea76b3"], "\n=", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"y", "'"}], "k", FormBox[ SuperscriptBox["k", RowBox[{"-", "1"}]], TraditionalForm]}], "+", RowBox[{"y", " ", "m", FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], " "}], TraditionalForm]}]}], ")"}], " ", "mod", " ", "k"}], ",", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"y", "'"}], "k", FormBox[ SuperscriptBox["k", RowBox[{"-", "1"}]], TraditionalForm]}], "+", RowBox[{"y", " ", "m", FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"-", "1"}]], " "}], TraditionalForm]}]}], ")"}], " ", "mod", " ", "m"}]}], ")"}], TraditionalForm]],ExpressionUUID->"077561fd-d925-4b19-be56-4e1a710b0f94"], " because k,m |n\n=(0+y*1,y\[CloseCurlyQuote]*1+0)=(y,y\[CloseCurlyQuote])!" }], "Text", CellChangeTimes->{{3.729672614529068*^9, 3.729672711586898*^9}, { 3.729672905718977*^9, 3.729673248434587*^9}, {3.729673280621332*^9, 3.7296738092571507`*^9}, {3.7296738473937263`*^9, 3.729673917665313*^9}, 3.729674385539321*^9, {3.7296744780257797`*^9, 3.729674629636486*^9}, { 3.729864890132577*^9, 3.729865116369564*^9}, {3.729865171088567*^9, 3.729865344544862*^9}, {3.729865425626615*^9, 3.729865426138378*^9}, { 3.729865466382362*^9, 3.729865495697488*^9}, {3.7298655304410686`*^9, 3.7298656602566843`*^9}, {3.729865693724021*^9, 3.729865694792863*^9}, { 3.72986574774498*^9, 3.729865756082863*^9}, {3.7299263307244463`*^9, 3.72992634695087*^9}, {3.832867511968565*^9, 3.832867514603586*^9}},ExpressionUUID->"a134f073-5d84-42ae-8134-\ edd44c2b8868"], Cell[BoxData[ RowBox[{ RowBox[{"gamma", "[", RowBox[{"x_", ",", "k_", ",", "m_"}], "]"}], ":=", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "k"}], "]"}], ",", RowBox[{"Mod", "[", RowBox[{"x", ",", "m"}], "]"}]}], "}"}]}]], "Input", CellChangeTimes->{{3.729865428557805*^9, 3.729865455814056*^9}},ExpressionUUID->"a93ac17d-3664-452e-9186-\ 29960f97abe4"], Cell[BoxData[ RowBox[{ RowBox[{"gammaI", "[", RowBox[{"y_", ",", "k_", ",", "m_"}], "]"}], ":=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"y", "[", RowBox[{"[", "2", "]"}], "]"}], "*", "k", "*", RowBox[{"PowerMod", "[", RowBox[{"k", ",", RowBox[{"-", "1"}], ",", "m"}], "]"}]}], "+", RowBox[{ RowBox[{"y", "[", RowBox[{"[", "1", "]"}], "]"}], "*", "m", "*", RowBox[{"PowerMod", "[", RowBox[{"m", ",", RowBox[{"-", "1"}], ",", "k"}], "]"}]}]}], ",", RowBox[{"k", "*", "m"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.729865778199649*^9, 3.729865870605199*^9}},ExpressionUUID->"eee6fec9-04f4-4174-a25d-\ a67eaa15844c"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"gamma", "[", RowBox[{ RowBox[{"gammaI", "[", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}], ",", "13", ",", "17"}], "]"}], ",", "13", ",", "17"}], "]"}]], "Input", CellChangeTimes->{{3.729865912026657*^9, 3.729865955098785*^9}},ExpressionUUID->"536f3dff-2145-4fb5-be88-\ 7029ee150a42"], Cell[BoxData[ RowBox[{"{", RowBox[{"2", ",", "3"}], "}"}]], "Output", CellChangeTimes->{{3.729865930700713*^9, 3.7298659554710407`*^9}},ExpressionUUID->"3491174d-cf79-450e-88a8-\ 8484aa96cfab"] }, Open ]], Cell[TextData[{ "For RSA ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], "\[TildeEqual]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]"}]}], TraditionalForm]],ExpressionUUID->"51de6852-d925-4383-9a26-8722b37a789a"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]], ExpressionUUID->"d8287548-eb5b-4ce8-942d-3820c414fda7"], " and this is quite important (recall that gcd(p,q)=1)\n\nNow we need to \ show that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"\[Phi]", "(", "n", ")"}]], "=", "1"}], TraditionalForm]], ExpressionUUID->"806ad4c1-04e5-49f5-befd-8a92c20c2149"], " mod n if gcd(x,n)=1 (the so called Euler Theorem). For that notice that\n\n\ ", StyleBox["Theorem", FontWeight->"Bold"], "[Lagrange Theorem] Let (G,\[Cross]) be a finite group, and H a subgroup of \ G, then |H| divides |G|.\n\n", StyleBox["Proof: ", FontWeight->"Bold"], "Idea", StyleBox[", ", FontWeight->"Bold"], "consider the equivalence relation \n\na\[Tilde]b iff a=b\[Cross]h for some \ h\[Element] H, the \[Tilde] defines an ", StyleBox["equivalence relation\n*", FontSlant->"Italic"], " reflexive a\[Tilde]a , this is true because a=a\[Cross]1 and 1\[Element] \ H!\n* symmetric if a\[Tilde]b then b\[Tilde]a so by def a=b\[Cross]h, that \ means a\[Cross]", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["h", RowBox[{"-", "1"}]], "=", "b"}], TraditionalForm]],ExpressionUUID-> "78dfdb6e-41e0-4f4d-8d0d-155dd65834e5"], ", since H is a group ", Cell[BoxData[ FormBox[ SuperscriptBox["h", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "655e582a-385d-4b0a-9edd-a983f4004ffe"], "\[Element] H\n* transitivity if if a\[Tilde]b and b\[Tilde]c, then a\ \[Tilde]c, by def a=bh and b=ch\[CloseCurlyQuote], but then a=c(h\ \[CloseCurlyQuote]h) and h\[CloseCurlyQuote]\[Cross]h\[Element] H because H \ is a group\n\n[a]={b:a\[Tilde]b} =aH (left co-set)\n\nnote that [1]=H={1 h, \ for some h\[Element]H}!\n\nG={[a],[a\[CloseCurlyQuote]],...[a\ \[CloseCurlyQuote]\[CloseCurlyQuote]\[CloseCurlyQuote]\[CloseCurlyQuote]]} \ forms partition with, say k sets, and |G|=k|[a]| if all the partitions have \ the same size |[a]|", StyleBox["\n", FontSlant->"Italic"], "\nthe equivalence classes always form a partition and f:aH\[RightArrow]bH \ is bijective with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", RowBox[{"(", "x", ")"}]}], "=", RowBox[{"b", " ", SuperscriptBox["a", RowBox[{"-", "1"}]], "x"}]}], TraditionalForm]],ExpressionUUID-> "933762a8-52a4-46dd-a565-3268f24c51ce"], " \n\nf(x)=f(ah)=b", Cell[BoxData[ RowBox[{ SuperscriptBox["a", RowBox[{"-", "1"}]], "ah"}]],ExpressionUUID-> "aa30acf4-3f27-4eb2-9a45-a46f0555d370"], "=bh\nf(x)=f(x\[CloseCurlyQuote])->", Cell[BoxData[ FormBox[ RowBox[{"b", " ", SuperscriptBox["a", RowBox[{"-", "1"}]], "x"}], TraditionalForm]],ExpressionUUID-> "d358964e-28dd-4c56-a2c0-0aae6c377fc3"], "=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"b", " ", SuperscriptBox["a", RowBox[{"-", "1"}]], RowBox[{"x", "'"}]}], "\[Rule]", "x"}], "=", RowBox[{ RowBox[{"x", "'"}], " ", "injective"}]}], ",", " ", RowBox[{ RowBox[{"it", " ", "is", " ", "also", " ", "surjective"}], "..."}]}], TraditionalForm]],ExpressionUUID->"1f8a028b-1e6f-430d-9f1c-df4d93cfd56e"], "\n\n", StyleBox["|[1]|=|H|=|[a]| for all a and so \n\n|G|=k|H| Done!\n\n", FontSlant->"Italic"], "Euler just realized the following:\n\nNote that the powers of an element \ \[Beta], (", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SuperscriptBox["\[Beta]", "k"], " ", "mod", " ", RowBox[{"n", ":", RowBox[{"k", "\[GreaterEqual]", " ", "0"}]}]}], "}"}], TraditionalForm]],ExpressionUUID->"d72c4b4d-df7a-4c78-a384-00551c13521d"], ", \[Cross]) form a subgroup of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", RowBox[{"n", " "}], "\[Cross]"], TraditionalForm]],ExpressionUUID-> "32ebd770-467d-4009-84e3-b6fe9c0f9012"], "if gcd(\[Beta],n)=1, that is, if \[Beta] \[Element]", Cell[BoxData[ FormBox[ RowBox[{" ", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"11f6eec6-e6f1-4468-8fa0-e09b901c5d2f"], ". So, since|", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SuperscriptBox["\[Beta]", "k"], " ", "mod", " ", RowBox[{"n", ":", RowBox[{"k", "\[GreaterEqual]", " ", "0"}]}]}], "}"}], TraditionalForm]],ExpressionUUID->"753587c1-ad9b-42b1-9d16-9f85e3a62006"], "|=ord(\[Beta]) we have the following result.\n\nord(\[Beta])=|", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SuperscriptBox["\[Beta]", "k"], " ", "mod", " ", RowBox[{"n", ":", RowBox[{"k", "\[GreaterEqual]", " ", "0"}]}]}], "}"}], TraditionalForm]],ExpressionUUID->"0c11b6ae-8c19-4bc7-87d0-a89e2053a0ac"], "| divides |", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"], "|"}], "="}], TraditionalForm]],ExpressionUUID-> "dcf2781a-3dca-4319-bb20-a6cc4795abc4"], "\[Phi](n) as corollary of Lagrange\n\n\n", Cell[BoxData[ FormBox[ SuperscriptBox["\[Beta]", "k"], TraditionalForm]],ExpressionUUID-> "4d31b9bb-46ec-4193-875a-537fb9bad15e"], "\[Cross]", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Beta]", RowBox[{"k", "'"}]], "=", SuperscriptBox["\[Beta]", RowBox[{"k", "+", RowBox[{"k", "'"}]}]]}], TraditionalForm]],ExpressionUUID-> "489858bf-19fc-48a2-b346-f372f4ea4fd8"] }], "Text", CellChangeTimes->{{3.729672614529068*^9, 3.729672711586898*^9}, { 3.729672905718977*^9, 3.729673248434587*^9}, {3.729673280621332*^9, 3.7296738092571507`*^9}, {3.7296738473937263`*^9, 3.729673917665313*^9}, 3.729674385539321*^9, {3.7296744780257797`*^9, 3.729674618212492*^9}, { 3.729854347326263*^9, 3.729854564172517*^9}, {3.729865893549794*^9, 3.72986589496509*^9}, {3.729866007041264*^9, 3.7298660322320127`*^9}, { 3.72986610832696*^9, 3.729866110864917*^9}, {3.7298664434470377`*^9, 3.729866541951535*^9}, {3.7298665907264233`*^9, 3.72986685207465*^9}, { 3.729866913348214*^9, 3.729866946014276*^9}, {3.729867012146222*^9, 3.729867231283002*^9}, {3.729867282637465*^9, 3.729867293400799*^9}, { 3.729867327837819*^9, 3.7298673427044783`*^9}, {3.729867418855147*^9, 3.729867452910969*^9}, {3.72986753329637*^9, 3.729867572529956*^9}, { 3.7298677998800383`*^9, 3.729867814733171*^9}, {3.729868005987383*^9, 3.72986801193226*^9}, {3.729868114141892*^9, 3.7298681303666353`*^9}, { 3.729926416677603*^9, 3.7299264809405212`*^9}, 3.729926516366839*^9, { 3.832867559269166*^9, 3.832867575016967*^9}, {3.832869626835951*^9, 3.832869636826128*^9}},ExpressionUUID->"9e1ce0c5-2b9d-48b9-9dce-\ 7be4504ca090"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Table", "[", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"3", ",", "k", ",", "19"}], "]"}], ",", RowBox[{"{", RowBox[{"k", ",", "1", ",", "30"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.7298678168104143`*^9, 3.729867842224655*^9}, { 3.7298678798799047`*^9, 3.729867911032899*^9}, {3.729868030683367*^9, 3.729868080254833*^9}, {3.729868271120151*^9, 3.729868286756641*^9}, { 3.72986831726514*^9, 3.7298683191832047`*^9}, {3.7298683514452553`*^9, 3.729868351679399*^9}},ExpressionUUID->"f1ab865f-a087-41b4-af00-\ 6401593281bd"], Cell[BoxData[ RowBox[{"{", RowBox[{ "3", ",", "9", ",", "8", ",", "5", ",", "15", ",", "7", ",", "2", ",", "6", ",", "18", ",", "16", ",", "10", ",", "11", ",", "14", ",", "4", ",", "12", ",", "17", ",", "13", ",", "1", ",", "3", ",", "9", ",", "8", ",", "5", ",", "15", ",", "7", ",", "2", ",", "6", ",", "18", ",", "16", ",", "10", ",", "11"}], "}"}]], "Output", CellChangeTimes->{{3.72986804420909*^9, 3.729868080641712*^9}, { 3.729868279589445*^9, 3.729868287303014*^9}, {3.7298683321834373`*^9, 3.729868352471457*^9}},ExpressionUUID->"98c412a0-7e22-479e-916c-\ 005411aa0475"] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"{", RowBox[{"12", ",", "11", ",", "18", ",", "7", ",", "8", ",", "1"}], "}"}], "=", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"12", "^", "k"}], " ", "mod", " ", "19"}], ",", " ", RowBox[{"k", ">", "0"}]}], "}"}]}]], "Input", CellChangeTimes->{{3.729867918680016*^9, 3.729867927058606*^9}},ExpressionUUID->"a0a98574-a10e-4ae5-9e9c-\ 3e492cc31c29"], Cell["Note that the ord(12) is 6 modulo 19 ", "Text", CellChangeTimes->{{3.729867949987233*^9, 3.729867966515997*^9}},ExpressionUUID->"95d79517-0675-4149-97ca-\ a085cb5dc107"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"EulerPhi", "[", "19", "]"}]], "Input", CellChangeTimes->{{3.7298679789029217`*^9, 3.7298679828901176`*^9}},ExpressionUUID->"dd999049-0c7a-4582-bd32-\ 031c95d83505"], Cell[BoxData["18"], "Output", CellChangeTimes->{ 3.729867991431468*^9},ExpressionUUID->"cbf44ee4-c58b-45bf-ba2e-\ 914e787bbac5"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"3", "*", "13"}], ",", "19"}], "]"}]], "Input", CellChangeTimes->{{3.7298678596397333`*^9, 3.729867868313892*^9}},ExpressionUUID->"79dadf5c-1941-44ef-838f-\ 74fbfc58ae34"], Cell[BoxData["1"], "Output", CellChangeTimes->{ 3.729867872195606*^9},ExpressionUUID->"60902794-3eae-43c1-9210-\ d351503b2da0"] }, Open ]], Cell[TextData[{ StyleBox["Corollary", FontWeight->"Bold"], "[Euler Theorem] Let n and x be such that gcd(x,n)=1, then \ ord(x)|\[Phi](n), that is, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"\[Phi]", "(", "n", ")"}]], "=", "1"}], TraditionalForm]], ExpressionUUID->"c37e70e9-9154-4866-83f0-8318fbd877ee"], " mod n.\n\nProof: since ord(x)|\[Phi](n) (by Lagrange theorem) we have that \ ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{"\[Phi]", "(", "n", ")"}]], "=", RowBox[{ SuperscriptBox["x", RowBox[{"k", "*", RowBox[{"ord", "(", "x", ")"}]}]], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["x", RowBox[{"ord", "(", "x", ")"}]], ")"}], "k"], " ", "mod", " ", "n"}]}]}], "\[IndentingNewLine]"}], TraditionalForm]],ExpressionUUID-> "c0127d48-95be-422d-8f67-c9d9694de003"], " =", Cell[BoxData[ RowBox[{ SuperscriptBox[ RowBox[{"(", "1", ")"}], "k"], " ", "mod", " ", "n"}]],ExpressionUUID-> "849eb82e-5863-445d-8c19-1a68f6bff8e0"], "=1." }], "Text", CellChangeTimes->{{3.729672614529068*^9, 3.729672711586898*^9}, { 3.729672905718977*^9, 3.729673248434587*^9}, {3.729673280621332*^9, 3.7296738092571507`*^9}, {3.7296738473937263`*^9, 3.729673917665313*^9}, { 3.729868146470639*^9, 3.729868259890922*^9}, {3.72992655409543*^9, 3.7299265563992777`*^9}, {3.8328696963974667`*^9, 3.8328697151532297`*^9}},ExpressionUUID->"910cc155-3bf9-4a6b-ba98-\ 1c21a60a1952"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"n", "=", "20934850298374059"}], "\[IndentingNewLine]", RowBox[{"m", "=", RowBox[{"EulerPhi", "[", "n", "]"}]}]}], "Input", CellChangeTimes->{{3.729674396192709*^9, 3.729674417742301*^9}},ExpressionUUID->"875cb4cb-8c25-4fa9-94c9-\ 8b1cf096faef"], Cell[BoxData["20934850298374059"], "Output", CellChangeTimes->{{3.7296744076200743`*^9, 3.729674418605057*^9}},ExpressionUUID->"4b266bee-d56f-4f89-a67f-\ 49524ecfbc99"], Cell[BoxData["13956566865582704"], "Output", CellChangeTimes->{{3.7296744076200743`*^9, 3.729674418621592*^9}},ExpressionUUID->"36a7b425-824a-4352-b794-\ a65305dcd3da"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GCD", "[", RowBox[{"19", ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.729674429683476*^9, 3.729674437427842*^9}},ExpressionUUID->"2d044899-0247-4053-b9b9-\ 5a6343c223c5"], Cell[BoxData["1"], "Output", CellChangeTimes->{{3.729674433071445*^9, 3.729674437937942*^9}},ExpressionUUID->"c24ca290-6754-4f35-819e-\ fe0203992896"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"19", ",", "m", ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.729674387353775*^9, 3.7296743889460363`*^9}, { 3.729674440301962*^9, 3.729674445646634*^9}},ExpressionUUID->"e1e46e76-404a-46cf-9f5e-\ aabc775b3941"], Cell[BoxData["1"], "Output", CellChangeTimes->{{3.729674443529378*^9, 3.7296744460018044`*^9}},ExpressionUUID->"90ea62de-e817-45f0-bf60-\ 84ba2f59b464"] }, Open ]], Cell[TextData[{ StyleBox["Corollary", FontWeight->"Bold"], "[Little Fermat Theorem] Let p be a prime and x\[NotEqual] 0 then \n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"p", "-", "1"}]], "=", "1"}], TraditionalForm]],ExpressionUUID-> "ec1765ef-f210-4701-bfea-d706d10c056f"], " mod p (recall \[Phi](p)=p-1).\n\n", StyleBox["Theorem", FontWeight->"Bold"], "[RSA soundness] For any RSA key we have ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["d", RowBox[{"(", RowBox[{"a", ",", "b"}], ")"}]], "(", RowBox[{ SubscriptBox["e", "a"], "(", "x", ")"}], ")"}], "=", "x"}], TraditionalForm]],ExpressionUUID->"7d181903-57f0-404d-bde0-52e7fe485f39"], ".\n\n", StyleBox["Proof: \n\n", FontWeight->"Bold"], "For all x, we have to show that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], "=", RowBox[{"x", " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID-> "43a4d7c2-50af-4f6b-ba92-911887fd6afe"], ". Recall that \[Phi](n)=(p-1)(q-1), and also that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], "\[TildeEqual]", RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]"}]}], TraditionalForm]],ExpressionUUID->"1a49f112-ccd4-4de9-9612-6644cd1847b2"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]], ExpressionUUID->"f361685c-887e-41ac-93dc-e9860c24d43e"], " thanks to the CRT.\n\nSo, it is enough to show that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], "=", RowBox[{"x", " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID-> "a95574c2-5a81-42e0-b179-a6505ce32b36"], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], "=", RowBox[{"x", " ", "mod", " ", "q", " "}]}], TraditionalForm]], ExpressionUUID->"e4d10569-c4e7-41b8-a41d-57d019b1c8a6"], " (because of the CRT), w.l.o.g., let us show that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], "=", RowBox[{"x", " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID-> "3cbb01e0-57c0-42d6-82dd-911258acfd02"], " for all x in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"5036690f-2f52-4c6a-9efb-b6a6629e2abc"], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], "=", RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "k"}], "+", "1"}]], "=", SuperscriptBox[ RowBox[{"x", "(", SuperscriptBox["x", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "k"}]]}]}], TraditionalForm]], ExpressionUUID->"e627641c-8860-4d9b-876e-b0e49595cea2"], " mod p, because ab=\[Phi](n)k+1,since ab=1 mod \[Phi](n), \n( \[Phi](n)=\ \[Phi](p)\[Phi](q)=(p-1)(q-1) )\n*either x=0, but then ", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], TraditionalForm]],ExpressionUUID-> "b82f432f-389f-4a9c-806a-7d8209973c6a"], "=0=x mod p!\n*or gcd(x,p)=1, but then by Euler Thm ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]], "=", RowBox[{"1", " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID-> "46bd29eb-9694-42a6-88f1-66966f6e2222"], ", and so\n\n", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"x", "(", SuperscriptBox["x", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "k"}]], TraditionalForm]], ExpressionUUID->"172d9175-bf4d-457f-8218-45690fde4c9a"], "=x.1=x mod p\n\nThe same happens mod q, and so,\nwe just have to shown that \ ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"a", " ", "b"}]], "=", RowBox[{"x", " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID-> "24987643-197e-4af2-bbb0-87259805548e"], ". Done!\n", StyleBox["\n", FontWeight->"Bold"] }], "Text", CellChangeTimes->{{3.729672614529068*^9, 3.729672711586898*^9}, { 3.729672905718977*^9, 3.729673248434587*^9}, {3.729673280621332*^9, 3.7296738092571507`*^9}, {3.7296738473937263`*^9, 3.729673917665313*^9}, { 3.729866220647502*^9, 3.7298662382368526`*^9}, {3.729868372393684*^9, 3.729868373986929*^9}, {3.729868523414874*^9, 3.7298685237283*^9}, { 3.729868586370816*^9, 3.729868590145667*^9}, {3.7298686315001507`*^9, 3.7298687159313517`*^9}, {3.7298687779301243`*^9, 3.729869154638373*^9}, { 3.72986918915618*^9, 3.729869215015236*^9}, {3.729869876279716*^9, 3.729869883193975*^9}, {3.729871285494236*^9, 3.7298712859405212`*^9}, { 3.729926626580165*^9, 3.729926655060114*^9}, {3.832867598268711*^9, 3.8328676405205593`*^9}, {3.8328697353685627`*^9, 3.832869737034542*^9}},ExpressionUUID->"39b1b228-a500-4115-aaf8-\ dc3267dcf361"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", RowBox[{ RowBox[{"Prime", "[", "30000", "]"}], RowBox[{"Prime", "[", "40000", "]"}]}]}], " ", RowBox[{"(*", " ", RowBox[{"Fixed", " ", "some", " ", "primes"}], " ", "*)"}]}], "\[IndentingNewLine]", RowBox[{"pin", "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Prime", "[", "30000", "]"}], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ RowBox[{"Prime", "[", "40000", "]"}], "-", "1"}], ")"}], " ", RowBox[{"(*", " ", RowBox[{"pin", "=", RowBox[{"\[Phi]", RowBox[{"(", "n", ")"}]}]}], " ", "*)"}]}]}]}], "Input", CellChangeTimes->{{3.729673965062201*^9, 3.7296739908797407`*^9}, { 3.7296741360530787`*^9, 3.729674159081361*^9}, {3.729674239334887*^9, 3.729674253577607*^9}, {3.729674306345347*^9, 3.7296743311406193`*^9}, { 3.7298695981480513`*^9, 3.729869605608074*^9}},ExpressionUUID->"594d4df4-1d4f-4be8-97a6-\ 99aba41eaf19"], Cell[BoxData["168149075693"], "Output", CellChangeTimes->{{3.729674241640975*^9, 3.729674253901249*^9}, 3.729869336414937*^9, 3.729869458678969*^9, 3.729869606068945*^9},ExpressionUUID->"f271908b-31f8-4539-b5b2-\ b5f5dd8c56e2"], Cell[BoxData["168148245408"], "Output", CellChangeTimes->{{3.729674241640975*^9, 3.729674253901249*^9}, 3.729869336414937*^9, 3.729869458678969*^9, 3.729869606078999*^9},ExpressionUUID->"3f97ae02-fb51-4c46-a0fb-\ c54f8cef0eb1"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"a", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{"pin", "-", "1"}]}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.7296740000838137`*^9, 3.729674042316162*^9}, { 3.729674189599269*^9, 3.729674190562003*^9}, {3.7298696090954227`*^9, 3.7298696099950113`*^9}},ExpressionUUID->"da3fec29-674b-4b9e-9968-\ 0927729a5ec5"], Cell[BoxData["25044597329"], "Output", CellChangeTimes->{{3.729674024270144*^9, 3.729674042644453*^9}, { 3.729674178051848*^9, 3.729674208299209*^9}, {3.7296742584814653`*^9, 3.729674278299876*^9}, {3.729869453187932*^9, 3.729869471533615*^9}, { 3.7298696105683002`*^9, 3.729869626999917*^9}},ExpressionUUID->"7719ce68-4f06-4a2a-b346-\ aa011344eb65"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GCD", "[", RowBox[{"a", ",", "pin"}], "]"}]], "Input", CellChangeTimes->{{3.7296740595177794`*^9, 3.7296740668521233`*^9}, { 3.729674171803261*^9, 3.7296741718759823`*^9}},ExpressionUUID->"22bf3961-6db1-4583-ba62-\ df02279c3c1f"], Cell[BoxData["1"], "Output", CellChangeTimes->{ 3.729674067134378*^9, {3.7296741723747473`*^9, 3.729674209432456*^9}, { 3.729674259973548*^9, 3.7296742796615763`*^9}, {3.729869455045979*^9, 3.729869472869569*^9}, {3.729869611681369*^9, 3.7298696276548367`*^9}},ExpressionUUID->"491e914b-4d65-47c2-b987-\ eef72182f5d5"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"b", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", "pin"}], "]"}]}]], "Input", CellChangeTimes->{{3.729674071103763*^9, 3.729674078324019*^9}, { 3.729674130165588*^9, 3.72967413121765*^9}, {3.729674212891573*^9, 3.7296742129279737`*^9}},ExpressionUUID->"ab1ba616-3a44-4567-b2a9-\ aff6f31eef2c"], Cell[BoxData["115545321521"], "Output", CellChangeTimes->{3.729674078734304*^9, 3.729674214048091*^9, 3.7296742834538727`*^9, 3.729869479294005*^9, 3.729869555912786*^9, 3.7298696345011263`*^9},ExpressionUUID->"a6fc92fc-8179-4cd0-91dc-\ 70fa6b4e10e8"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"3", ",", "b", ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.72986968737812*^9, 3.729869698142941*^9}},ExpressionUUID->"0f86434e-81dc-4c2b-b377-\ c74762a83f13"], Cell[BoxData["116852418847"], "Output", CellChangeTimes->{ 3.729869698390655*^9},ExpressionUUID->"108d72a4-d6cb-46bb-9c7c-\ 24a563415cac"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"3", "^", "115545321521"}]], "Input", CellChangeTimes->{{3.72986964881596*^9, 3.729869653362171*^9}, { 3.729869684082011*^9, 3.729869685542019*^9}},ExpressionUUID->"59775cc7-a75c-4bf0-982a-\ 68cbb940abd2"], Cell[BoxData["$Aborted"], "Output", CellChangeTimes->{ 3.72986967471214*^9},ExpressionUUID->"38e1d6d2-d8fb-4205-bfb3-9755aa88f0c6"] }, Open ]], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"enc", "[", "m_", "]"}], ":=", RowBox[{"PowerMod", "[", RowBox[{"m", ",", "a", ",", "n"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"dec", "[", "c_", "]"}], ":=", RowBox[{"PowerMod", "[", RowBox[{"c", ",", "b", ",", "n"}], "]"}]}], ";"}]}], "Input", CellChangeTimes->{{3.729674083675562*^9, 3.729674110672729*^9}},ExpressionUUID->"6dee4910-8aec-4e90-bc3b-\ 6c3d04cb812d"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"enc", "[", "40000", "]"}]], "Input", CellChangeTimes->{{3.729674293003683*^9, 3.7296742950733757`*^9}, 3.729869563026832*^9},ExpressionUUID->"b5c322ef-ed54-479c-857a-\ 466b14fe9d9e"], Cell[BoxData["98152079057"], "Output", CellChangeTimes->{ 3.729674295306446*^9, {3.729869558719714*^9, 3.729869563414009*^9}, 3.7298697335381308`*^9},ExpressionUUID->"3103e743-7429-47b0-bb7a-\ 692412710bd6"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"dec", "[", RowBox[{"enc", "[", "500000", "]"}], "]"}]], "Input", CellChangeTimes->{{3.729674114226976*^9, 3.729674121188884*^9}, { 3.729674219826983*^9, 3.7296742230492783`*^9}, 3.729674288087015*^9, 3.729869565922071*^9, {3.729869737816497*^9, 3.729869740707861*^9}},ExpressionUUID->"1631249c-e8e9-42ce-be8e-\ 3368b083c61b"], Cell[BoxData["500000"], "Output", CellChangeTimes->{ 3.729674121434379*^9, {3.729674217752516*^9, 3.729674223571568*^9}, { 3.729674286505396*^9, 3.729674288306964*^9}, {3.729869560070162*^9, 3.729869566350288*^9}, {3.7298697344229527`*^9, 3.729869740950123*^9}},ExpressionUUID->"bd62b1f2-615e-477a-95a0-\ d23fe420aa56"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Encryption efficiency", "Subsection", CellChangeTimes->{{3.7296738816661053`*^9, 3.7296739128283863`*^9}},ExpressionUUID->"0de0b75a-094f-4883-bc35-\ 4876e47d98c8"], Cell[TextData[{ "\nThe idea to perform power modulo ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "a"], " ", "mod", " ", "n", " "}], TraditionalForm]], FontWeight->"Bold",ExpressionUUID->"2a1f3a5d-4f45-47f3-ba88-07f85112f74b"], "efficiently is to decompose the exponent a in binary ", Cell[BoxData[ FormBox[ RowBox[{"a", "=", RowBox[{ RowBox[{ RowBox[{ SubscriptBox["a", "1"], SubscriptBox["a", "2"]}], "..."}], SubscriptBox["a", "k"]}]}], TraditionalForm]],ExpressionUUID-> "880a2c96-f54d-4d08-b7e9-0636ad0a58c4"], " and perform exponentiation in the following way (assume x\[NotEqual]0):\n\ 1) if ", Cell[BoxData[ FormBox["a", TraditionalForm]],ExpressionUUID-> "54214335-3e79-40ed-9690-3497b8614e56"], "=0 then the solution is 1\n2) else we know that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "1"], "=", "1"}], TraditionalForm]],ExpressionUUID-> "a5d54fc2-79c6-4d5f-a840-f7c055b1c8f0"], " and so \na) the result r is initialized to r = x mod n \nb) we perform a \ for loop where i ranges from 2 to k\n\ti) r=r*r mod n (if ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{ SubscriptBox["a", "1"], "..."}], SubscriptBox["a", RowBox[{"i", "-", "1"}]]}]], " ", "then", " ", "r", "*", "r"}], "=", SuperscriptBox["x", RowBox[{ RowBox[{ SubscriptBox["a", "1"], "..."}], SubscriptBox["a", RowBox[{"i", "-", "1"}]], "0"}]]}]}], TraditionalForm]], ExpressionUUID->"c158dc06-b85a-4c12-a7a7-bf0eb6a852ff"], "mod n\n\t which corresponds to squaring, doubling the exponent, which is \ the same as placing a 0 in the right of the exponent\n\t ii) if ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]],ExpressionUUID-> "a9e0f11c-7a26-44c7-9d5f-26c4b859c6f6"], "=1 then we have to make r=r*x mod n (in this way we add one in the \ exponent, that is, we have that ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", SuperscriptBox["x", RowBox[{ RowBox[{ SubscriptBox["a", "1"], "..."}], SubscriptBox["a", RowBox[{"i", "-", "1"}]], "0"}]]}], TraditionalForm]],ExpressionUUID-> "84c5bf77-97a2-47fb-a387-23a981ead007"], "and r*x=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{ SubscriptBox["a", "1"], "..."}], SubscriptBox["a", RowBox[{"i", "-", "1"}]], "1"}]], "mod"}], TraditionalForm]], ExpressionUUID->"b701ec69-ef5b-47fb-8145-80aeaf06c08b"], ")\t\n\n", StyleBox["Theorem", FontWeight->"Bold"], "[Square and multiply] The power mod can be computed in PT.\n\n", StyleBox["Proof:\n\n", FontWeight->"Bold"], "Assume all inputs x,a,n have at most \[Eta] bits" }], "Text", CellChangeTimes->{{3.729673924366852*^9, 3.729673955007296*^9}, { 3.729854639372774*^9, 3.729854755715226*^9}, {3.729854807853462*^9, 3.729854814115645*^9}, {3.72985492381988*^9, 3.729854948793811*^9}, { 3.793610078810511*^9, 3.79361009424689*^9}, {3.8268709313875523`*^9, 3.8268709958140717`*^9}, {3.826871050312512*^9, 3.826871316914454*^9}, { 3.8268713578431187`*^9, 3.826871386291326*^9}, {3.826873392726417*^9, 3.82687339508743*^9}, {3.826873452507536*^9, 3.826873457895834*^9}, { 3.826873558634104*^9, 3.8268735631118193`*^9}, {3.826873599848881*^9, 3.826873671593349*^9}, {3.826873706227448*^9, 3.8268737164502897`*^9}, { 3.8268737480988197`*^9, 3.826873779475197*^9}, {3.826873813555243*^9, 3.8268738329653254`*^9}, {3.826874150510065*^9, 3.8268741607920218`*^9}, { 3.826874200928672*^9, 3.826874209446782*^9}, 3.832820363498625*^9, { 3.832867664406234*^9, 3.832867675755953*^9}, 3.832869558685663*^9, { 3.832870503156522*^9, 3.8328705335799427`*^9}},ExpressionUUID->"94169efc-6cb3-429e-b95e-\ 1b02f23c2572"], Cell[BoxData[ RowBox[{ RowBox[{"mypowermod", "=", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "a", ",", "n"}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"r", ",", "ba"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"x", ",", "n"}], "]"}], "\[Equal]", "0"}], ",", " ", RowBox[{"(*", " ", RowBox[{"Costs", " ", "O", RowBox[{"(", SuperscriptBox["\[Eta]", "2"], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"r", "=", "0"}], ",", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"a", "\[Equal]", "0"}], ",", RowBox[{"r", "=", "1"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"r", "=", RowBox[{"Mod", "[", RowBox[{"x", ",", "n"}], "]"}]}], ";", " ", RowBox[{"(*", " ", RowBox[{"Costs", " ", "O", RowBox[{"(", SuperscriptBox["\[Eta]", "2"], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"ba", "=", RowBox[{"IntegerDigits", "[", RowBox[{"a", ",", "2"}], "]"}]}], ";", " ", RowBox[{"(*", " ", RowBox[{"Costs", " ", "O", RowBox[{"(", "\[Eta]", ")"}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"Do", "[", " ", RowBox[{"(*", " ", RowBox[{ "Iterates", " ", "at", " ", "most", " ", "\[Eta]", " ", "times"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"r", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "*", "r"}], ",", "n"}], "]"}]}], ";", " ", RowBox[{"(*", " ", RowBox[{"Costs", " ", "O", RowBox[{"(", SuperscriptBox["\[Eta]", "2"], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"ba", "[", RowBox[{"[", "i", "]"}], "]"}], "\[Equal]", "1"}], ",", RowBox[{"r", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"r", "*", "x"}], ",", "n"}], "]"}]}]}], "]"}], ";"}], RowBox[{"(*", " ", RowBox[{"Costs", " ", "O", RowBox[{"(", SuperscriptBox["\[Eta]", "2"], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", ",", RowBox[{"{", RowBox[{"i", ",", "2", ",", RowBox[{"Length", "[", "ba", "]"}]}], "}"}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}], "]"}], ";", " ", RowBox[{"(*", " ", RowBox[{"The", " ", "overal", " ", "complexity", " ", "O", RowBox[{"(", SuperscriptBox["\[Eta]", "3"], ")"}], " ", "time"}], " ", "*)"}], "\[IndentingNewLine]", "r"}]}], "\[IndentingNewLine]", "]"}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.826873836003933*^9, 3.8268740718628283`*^9}, { 3.826874137489965*^9, 3.8268741412340317`*^9}, {3.8268742149194937`*^9, 3.82687433400121*^9}},ExpressionUUID->"5baefc6a-f49f-4706-ad4f-\ 046af33c8b4d"], Cell["\<\ Thus, it takes cubic time, and powermod can be computed in polynomial time.\ \>", "Text", CellChangeTimes->{{3.826874338841734*^9, 3.82687438735213*^9}, { 3.832869569430304*^9, 3.832869575151764*^9}},ExpressionUUID->"f6eeb6a4-3ffe-4a4a-a7a5-\ 32f47fd6bd64"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"mypowermod", "[", RowBox[{ "29084570298347509234875", ",", "94568405968409586309458039485293845702938457029384570", ",", "576767"}], "]"}]], "Input", CellChangeTimes->{{3.826874077382552*^9, 3.8268741163169813`*^9}}, CellLabel->"In[65]:=",ExpressionUUID->"7a322199-3bf7-4a90-aa0e-ac920459650f"], Cell[BoxData["482225"], "Output", CellChangeTimes->{{3.826874108248802*^9, 3.8268741174204903`*^9}}, CellLabel->"Out[65]=",ExpressionUUID->"7d371d94-ff42-4a2d-9f84-9d2741c8b1a2"] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"EuclidesGCD", "[", RowBox[{"a_", ",", "b_"}], "]"}], ":=", RowBox[{"If", "[", RowBox[{ RowBox[{"b", "\[Equal]", "0"}], ",", "a", ",", RowBox[{"EuclidesGCD", "[", RowBox[{"b", ",", RowBox[{"Mod", "[", RowBox[{"a", ",", "b"}], "]"}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.729854998046633*^9, 3.729855051643824*^9}},ExpressionUUID->"f16e24dc-3a70-4f9f-8001-\ 12f086465ab1"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"EuclidesGCD", "[", RowBox[{"75", ",", "10"}], "]"}]], "Input", CellChangeTimes->{{3.729855056076288*^9, 3.7298550813554087`*^9}},ExpressionUUID->"53e8d73b-8332-4d14-8768-\ 9696d3cc2e19"], Cell[BoxData["5"], "Output", CellChangeTimes->{{3.729855062404702*^9, 3.729855081584877*^9}},ExpressionUUID->"50b09fe9-29c2-40ac-b07e-\ 7091bad890b8"] }, Open ]], Cell[TextData[{ StyleBox["Theorem", FontWeight->"Bold"], "[Lam\[EGrave]] Let a>b>0 be integers such that Euclides[a,b] has k>0 \ recursive calls, then ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[GreaterEqual]", SubscriptBox["F", RowBox[{"k", "+", "2"}]], " "}], TraditionalForm]],ExpressionUUID-> "3ff263b3-73ae-4bc2-8c57-f1b0e6b98578"], "and b\[GreaterEqual] ", Cell[BoxData[ FormBox[ SubscriptBox["F", RowBox[{"k", "+", "1"}]], TraditionalForm]],ExpressionUUID-> "3eb78bf1-3dfe-4e98-95ff-d3048e8c3254"], " where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", "1"], "=", RowBox[{ SubscriptBox["F", "2"], "=", "1"}]}], TraditionalForm]],ExpressionUUID-> "4191e74d-32b7-4d77-b9d0-9065c2b8092b"], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", RowBox[{"k", "+", "2"}]], "="}], TraditionalForm]],ExpressionUUID-> "9d8cdf6b-f569-492e-b81f-78d4572fe55b"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["F", RowBox[{"k", "+", "1"}]], "+", SubscriptBox["F", "k"]}], TraditionalForm]],ExpressionUUID-> "69a4b63b-8d4d-468c-bc75-c404a09591fc"], " is the Fibonacci sequence.\n\n", StyleBox["Proof:", FontWeight->"Bold"], " Induction on k.\n\nBasis k=1\nWe have to show that:\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", "1", ")"}], " ", "a"}], "\[GreaterEqual]", SubscriptBox["F", "3"]}], TraditionalForm]],ExpressionUUID-> "b4d8e03d-e82e-4366-b982-e3d5943d4b16"], "=2\n(2) ", Cell[BoxData[ FormBox[ RowBox[{"a", ">", "b", "\[GreaterEqual]", SubscriptBox["F", "2"]}], TraditionalForm]],ExpressionUUID-> "c3b6d8ce-b712-469e-addf-9f01a0098561"], "=1\n\nassume that this is not case\nAssume (2) does not hold that is b<1, \ then b=0 and so the number of recursive call is 0, which contradicts the \ assumptions\n\nAssume (1) does not holds, a<2, -> a<=1 but then since b "19c8bef5-1fd9-4486-ba9e-068e730eda0c"], " and b", Cell[BoxData[ RowBox[{"\[GreaterEqual]", SubscriptBox["F", RowBox[{"k", "+", "2"}]], " "}]],ExpressionUUID-> "5fddb565-0084-4f34-9922-3966e110cc07"], ")\n\nAssume that EEuclidesGCD[a,b] does k+1 recursive calls, and so it \ means that\nEEuclidesGCD[b,Mod[a,b]] does k recursive calls, and so we can \ use the IH, and so, we know that\n\n", Cell[BoxData[ FormBox[ RowBox[{"b", "\[GreaterEqual]", SubscriptBox["F", RowBox[{"k", "+", "2"}]], " "}], TraditionalForm]],ExpressionUUID-> "f51bdb84-c7c7-404e-87c4-5cee90613872"], "\nand \nMod[a,b]", Cell[BoxData[ RowBox[{"\[GreaterEqual]", SubscriptBox["F", RowBox[{"k", "+", "1"}]]}]],ExpressionUUID-> "6f12787a-0cb2-4a58-87f0-1d30ef30670f"], "\n\nnotice that a=(a\[Divide]b)b+Mod[a,b], and moreover that \ (a\[Divide]b)>=1 (because a>b), meaning\nthat a\[GreaterEqual]b+Mod[a,b]\ \[GreaterEqual]", Cell[BoxData[ FormBox[ SubscriptBox["F", RowBox[{"k", "+", "2"}]], TraditionalForm]],ExpressionUUID-> "4d0d5f4c-4700-4325-8237-431323b47400"], "+", Cell[BoxData[ SubscriptBox["F", RowBox[{"k", "+", "1"}]]],ExpressionUUID-> "47362b46-0a56-4b86-9908-13cf560dcc5e"], "=", Cell[BoxData[ FormBox[ SubscriptBox["F", RowBox[{"k", "+", "3"}]], TraditionalForm]],ExpressionUUID-> "f543541e-0909-4b39-9756-73a533d6b2f0"], ". Done!" }], "Text", CellChangeTimes->{{3.729673924366852*^9, 3.729673955007296*^9}, { 3.729854639372774*^9, 3.729854755715226*^9}, {3.729854807853462*^9, 3.729854814115645*^9}, {3.72985492381988*^9, 3.729854938363351*^9}, { 3.729855089114822*^9, 3.729855214082922*^9}, {3.7298553595925493`*^9, 3.729855382761956*^9}, {3.729855532739766*^9, 3.729855555050625*^9}, 3.832820378428535*^9, {3.83286893523103*^9, 3.8328689457357273`*^9}},ExpressionUUID->"27d7eb9e-6c30-4e66-a4d1-\ c1144c820cdc"], Cell["We now spend some time to solve the recurrence of Fibonacci.", "Text", CellChangeTimes->{{3.832868096112619*^9, 3.832868111161271*^9}},ExpressionUUID->"27863268-840f-46fa-b9c8-\ e2b8802d6786"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"\n", RowBox[{"RSolve", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"f", "[", "1", "]"}], "==", "1"}], "&&", RowBox[{ RowBox[{"f", "[", "2", "]"}], "==", "1"}], "&&", RowBox[{ RowBox[{"f", "[", RowBox[{"n", "+", "2"}], "]"}], "\[Equal]", RowBox[{ RowBox[{"f", "[", RowBox[{"n", "+", "1"}], "]"}], "+", RowBox[{"f", "[", "n", "]"}]}]}]}], ",", RowBox[{"f", "[", "n", "]"}], ",", "n"}], "]"}]}]], "Input", CellChangeTimes->{{3.7298552211251087`*^9, 3.7298553002587423`*^9}, { 3.7619139205468388`*^9, 3.761913931758271*^9}, {3.76191444227413*^9, 3.7619144758927383`*^9}, {3.8328687348543463`*^9, 3.8328687358230057`*^9}},ExpressionUUID->"17766144-9ccd-48ee-a903-\ 37938139ff66"], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"f", "[", "n", "]"}], "\[Rule]", RowBox[{"Fibonacci", "[", "n", "]"}]}], "}"}], "}"}]], "Output", CellChangeTimes->{{3.7619144573927507`*^9, 3.761914469927333*^9}, 3.8328679547849627`*^9}, CellLabel->"Out[1]=",ExpressionUUID->"a021f1d0-c92b-4551-b473-6440acd8c918"] }, Open ]], Cell[BoxData[ RowBox[{"Clear", "[", "f", "]"}]], "Input", CellChangeTimes->{{3.761914452982472*^9, 3.7619144550809526`*^9}, { 3.8328681147761307`*^9, 3.8328681176862173`*^9}},ExpressionUUID->"3c88c30d-9bba-4ae4-a1bf-\ 0b34ab2a6e8a"], Cell[TextData[{ "The idea is to solve first the recurrence f[n+2]\[Equal]f[n+1]+f[n], and \ notice that solutions are closed under summation and multiplication by a real \ constant (that is they, form a linear space of infinite sequences) . The next \ observation is that if we consider a solution ", StyleBox["r", FontWeight->"Bold"], " to the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "="}], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "3f0d80d3-5d22-4586-93cc-0f081c18fa03"], "x+1 , then by taking f[n]=a\[Cross]", Cell[BoxData[ FormBox[ SuperscriptBox["r", "n"], TraditionalForm]], FormatType->"TraditionalForm",ExpressionUUID-> "5fdd09b6-82c7-4af3-9c3e-c3b48613dd80"], " we get that \n\nf[n+2]=a ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["r", RowBox[{"n", "+", "2"}]], "="}], TraditionalForm]],ExpressionUUID-> "0504abd0-cf17-4029-8e91-1aef2862852f"], "a ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["r", "n"], SuperscriptBox["r", "2"]}], "=", RowBox[{ RowBox[{"a", " ", RowBox[{ SuperscriptBox["r", "n"], "(", RowBox[{"r", "+", "1"}], ")"}]}], "="}]}], TraditionalForm]], ExpressionUUID->"42794fc6-4322-4e2d-9817-642db7f13319"], "a", Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SuperscriptBox["r", RowBox[{"n", "+", "1"}]], "+"}]}], TraditionalForm]],ExpressionUUID-> "56492b53-beb5-47ea-9ebe-a982d7112441"], "a ", Cell[BoxData[ FormBox[ SuperscriptBox["r", "n"], TraditionalForm]],ExpressionUUID-> "cfaa8159-b333-4bd9-86c8-602370c93ca9"], "=f[n+1]+f[n]" }], "Text", CellChangeTimes->{{3.832868119125489*^9, 3.8328682079239902`*^9}, { 3.8328682757186403`*^9, 3.8328682837744503`*^9}, {3.832868346860924*^9, 3.832868562186535*^9}, {3.832868613844678*^9, 3.832868659764346*^9}, { 3.832868956248493*^9, 3.832868970466096*^9}},ExpressionUUID->"769300d0-2812-423b-9bc5-\ 815286c9d711"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Solve", "[", RowBox[{ RowBox[{ RowBox[{"x", "^", "2"}], "\[Equal]", RowBox[{"x", "+", "1"}]}], ",", "x"}], "]"}]], "Input", CellChangeTimes->{{3.729855743961422*^9, 3.729855751786048*^9}}, CellLabel->"In[3]:=",ExpressionUUID->"0b5cc38a-04e2-48a4-aa6e-8dfdbe2efba6"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"x", "\[Rule]", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "-", SqrtBox["5"]}], ")"}]}]}], "}"}], ",", RowBox[{"{", RowBox[{"x", "\[Rule]", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}]}]}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.76191413671856*^9, 3.832867973539448*^9}, CellLabel->"Out[3]=",ExpressionUUID->"44855722-e094-4ed0-b9a3-915f2a26b837"] }, Open ]], Cell["And so we have two basic solutions", "Text", CellChangeTimes->{{3.832868564917444*^9, 3.832868632475205*^9}},ExpressionUUID->"61b24a3a-0ebd-443c-9728-\ 9302e08127c9"], Cell[BoxData[{ RowBox[{ RowBox[{"g", "[", "n_", "]"}], ":=", RowBox[{"a", SuperscriptBox[ RowBox[{"(", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "-", SqrtBox["5"]}], ")"}]}], ")"}], "n"]}]}], "\[IndentingNewLine]", RowBox[{ RowBox[{"h", "[", "n_", "]"}], ":=", RowBox[{"b", SuperscriptBox[ RowBox[{"(", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}]}], ")"}], "n"]}]}]}], "Input", CellChangeTimes->{{3.76191414296428*^9, 3.761914157622945*^9}, { 3.761914209047555*^9, 3.761914220247239*^9}, {3.832868742082279*^9, 3.832868754025282*^9}}, CellLabel->"In[19]:=",ExpressionUUID->"3c354a52-829b-4509-b030-e72d06dbe10e"], Cell["and indeed we have that ", "Text", CellChangeTimes->{{3.832868671151547*^9, 3.832868674911643*^9}, { 3.832868795277287*^9, 3.83286879609586*^9}},ExpressionUUID->"4345ae84-3919-419d-8afd-\ 1ec6594f0d0b"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Simplify", "[", RowBox[{ RowBox[{"g", "[", RowBox[{"n", "+", "2"}], "]"}], "\[Equal]", RowBox[{ RowBox[{"g", "[", RowBox[{"n", "+", "1"}], "]"}], "+", RowBox[{"g", "[", "n", "]"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.76191416388303*^9, 3.7619141754807377`*^9}, { 3.832868682450766*^9, 3.8328686867630777`*^9}, {3.832868747570497*^9, 3.8328687630803833`*^9}}, CellLabel->"In[16]:=",ExpressionUUID->"4312db05-aace-44e9-b78a-3eaac84d811d"], Cell[BoxData["True"], "Output", CellChangeTimes->{3.8328686870183353`*^9, 3.832868763398961*^9}, CellLabel->"Out[16]=",ExpressionUUID->"71d9fc1d-d68b-47a5-b17d-b9944bab255c"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"Simplify", "[", RowBox[{ RowBox[{"h", "[", RowBox[{"n", "+", "2"}], "]"}], "\[Equal]", RowBox[{ RowBox[{"h", "[", RowBox[{"n", "+", "1"}], "]"}], "+", RowBox[{"h", "[", "n", "]"}]}]}], "]"}], "\[IndentingNewLine]"}]], "Input", CellChangeTimes->{{3.761914036121418*^9, 3.761914057317626*^9}, { 3.761914191809229*^9, 3.761914227903317*^9}, {3.832868765470642*^9, 3.832868769003824*^9}}, CellLabel->"In[17]:=",ExpressionUUID->"f4ec049d-b5e2-4ff0-bb1d-fc309b9490cf"], Cell[BoxData["True"], "Output", CellChangeTimes->{3.8328687039564953`*^9, 3.832868769443282*^9}, CellLabel->"Out[17]=",ExpressionUUID->"dead3d6d-5106-4457-8a8b-0e662d757c7a"] }, Open ]], Cell["\<\ Now it follows that the general solution is a sum of the basic ones\ \>", "Text", CellChangeTimes->{{3.832868706110425*^9, 3.832868721073794*^9}, { 3.832868873446835*^9, 3.832868876950563*^9}, 3.832869000236829*^9},ExpressionUUID->"1aa1e753-fac5-4040-b877-\ 35fabc53aecb"], Cell[BoxData[ RowBox[{ RowBox[{"f", "[", "n_", "]"}], ":=", RowBox[{ RowBox[{"g", "[", "n", "]"}], "+", RowBox[{"h", "[", "n", "]"}]}]}]], "Input", CellChangeTimes->{{3.7619142596018744`*^9, 3.761914269223234*^9}, { 3.832868783084465*^9, 3.832868791416164*^9}}, CellLabel->"In[21]:=",ExpressionUUID->"83ffb510-63d5-46bc-b2c4-285410777d9f"], Cell["\<\ We now consider the fact that f[1]=1 and f[2]=1 to extract a and b\ \>", "Text", CellChangeTimes->{{3.832868723233602*^9, 3.832868729590358*^9}, { 3.8328688830767593`*^9, 3.832868895187439*^9}},ExpressionUUID->"66174ab0-d8e8-4705-9ae6-\ c6384f446be1"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Solve", "[", RowBox[{ RowBox[{ RowBox[{"f", "[", "1", "]"}], "\[Equal]", "1"}], " ", "&&", " ", RowBox[{ RowBox[{"f", "[", "2", "]"}], "\[Equal]", "1"}]}], "]"}]], "Input", CellChangeTimes->{{3.7619142731515207`*^9, 3.761914289806328*^9}, { 3.832868802079381*^9, 3.8328688042210703`*^9}}, CellLabel->"In[22]:=",ExpressionUUID->"3de8237d-8683-444d-9f9e-53ca403e57a3"], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"a", "\[Rule]", RowBox[{"-", FractionBox["1", SqrtBox["5"]]}]}], ",", RowBox[{"b", "\[Rule]", RowBox[{"-", FractionBox[ RowBox[{ RowBox[{"-", "5"}], "-", SqrtBox["5"]}], RowBox[{"5", " ", RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}]}]]}]}]}], "}"}], "}"}]], "Output", CellChangeTimes->{3.761914291472558*^9, 3.832868804618614*^9}, CellLabel->"Out[22]=",ExpressionUUID->"5f23f720-c4d0-4cf2-90bb-20d3a031ebd4"] }, Open ]], Cell["This give the following analytical expression to Fibonacci", "Text", CellChangeTimes->{{3.832868903202444*^9, 3.8328689263356943`*^9}},ExpressionUUID->"55e6f266-8abe-42b1-bfd3-\ c18d9a73b9e8"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"f", "[", "n", "]"}], "/.", RowBox[{"{", RowBox[{ RowBox[{"a", "\[Rule]", RowBox[{"-", FractionBox["1", SqrtBox["5"]]}]}], ",", RowBox[{"b", "\[Rule]", RowBox[{"-", FractionBox[ RowBox[{ RowBox[{"-", "5"}], "-", SqrtBox["5"]}], RowBox[{"5", " ", RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}]}]]}]}]}], "}"}]}]], "Input", CellChangeTimes->{{3.761914303281612*^9, 3.761914315397852*^9}, { 3.832868808097514*^9, 3.832868808805214*^9}}, CellLabel->"In[23]:=",ExpressionUUID->"8c2b86c3-9418-43ad-922c-f57ebef3416d"], Cell[BoxData[ RowBox[{ RowBox[{"-", FractionBox[ SuperscriptBox[ RowBox[{"(", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "-", SqrtBox["5"]}], ")"}]}], ")"}], "n"], SqrtBox["5"]]}], "-", RowBox[{ FractionBox["1", "5"], " ", SuperscriptBox["2", RowBox[{"-", "n"}]], " ", RowBox[{"(", RowBox[{ RowBox[{"-", "5"}], "-", SqrtBox["5"]}], ")"}], " ", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}], RowBox[{ RowBox[{"-", "1"}], "+", "n"}]]}]}]], "Output", CellChangeTimes->{3.832868810785672*^9}, CellLabel->"Out[23]=",ExpressionUUID->"53249cf5-8978-420c-a53b-c7bd28b2efac"] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"Fib", "[", "n_", "]"}], ":=", RowBox[{ RowBox[{"-", FractionBox[ SuperscriptBox[ RowBox[{"(", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "-", SqrtBox["5"]}], ")"}]}], ")"}], "n"], SqrtBox["5"]]}], "-", RowBox[{ FractionBox["1", "10"], " ", RowBox[{"(", RowBox[{ RowBox[{"-", "5"}], "-", SqrtBox["5"]}], ")"}], " ", SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"1", "/", "2"}], RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}]}], ")"}], RowBox[{ RowBox[{"-", "1"}], "+", "n"}]]}]}]}]], "Input", CellChangeTimes->{{3.761914323857185*^9, 3.7619143279140882`*^9}, { 3.7619145595837*^9, 3.761914586166149*^9}}, CellLabel->"In[25]:=",ExpressionUUID->"0d37cc03-8039-4aad-82be-ddc5f9f05047"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Simplify", "[", RowBox[{"Fib", "[", "8", "]"}], "]"}]], "Input", CellChangeTimes->{{3.7619143296040173`*^9, 3.7619143502176437`*^9}}, CellLabel->"In[26]:=",ExpressionUUID->"29342228-8361-45c4-9ebd-f47f6f8a5dc9"], Cell[BoxData["21"], "Output", CellChangeTimes->{{3.761914332361351*^9, 3.7619143507269173`*^9}, 3.7619145874437513`*^9, {3.832868831241549*^9, 3.832868834494464*^9}}, CellLabel->"Out[26]=",ExpressionUUID->"06352ee8-d2bd-4e49-bea3-5eb951bf3d70"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", RowBox[{ RowBox[{"-", FractionBox["1", "10"]}], " ", RowBox[{"(", RowBox[{ RowBox[{"-", "5"}], "-", SqrtBox["5"]}], ")"}]}], "]"}]], "Input", CellChangeTimes->{{3.76191451531925*^9, 3.7619145160962963`*^9}, 3.76191467825924*^9},ExpressionUUID->"891b5bba-b1ad-44f7-adbd-\ bb56ea37c3de"], Cell[BoxData["0.723606797749979`"], "Output", CellChangeTimes->{3.761914516332397*^9, 3.76191467874865*^9},ExpressionUUID->"68ba3ec1-05b2-41ef-93ed-aa4bb67553ac"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", RowBox[{ RowBox[{"(", RowBox[{"1", "+", SqrtBox["5"]}], ")"}], "/", "2"}], "]"}]], "Input", CellChangeTimes->{ 3.7298558647227077`*^9, {3.7619145264743233`*^9, 3.7619145391894903`*^9}},ExpressionUUID->"672e7ee8-f1a6-420e-a964-\ fb5af0dbaea2"], Cell[BoxData["1.618033988749895`"], "Output", CellChangeTimes->{{3.761914527783845*^9, 3.7619145544194117`*^9}},ExpressionUUID->"9cc4a3a0-5dd5-45d7-915f-\ 1c99e812b711"] }, Open ]], Cell[TextData[{ "So, Fibonacci[n] \[Element] \[CapitalTheta](", Cell[BoxData[ SuperscriptBox[ RowBox[{"(", FractionBox[ RowBox[{"1", "+", SqrtBox["5"]}], "2"], ")"}], "n"]], CellChangeTimes->{{3.730112670487392*^9, 3.7301126704887*^9}, 3.730112731005971*^9},ExpressionUUID-> "1897c860-f513-44e1-85d7-0093638724dc"], ") , as the other summand is dominated by this, and grows exponentially." }], "Text", CellChangeTimes->{{3.730112697672003*^9, 3.7301127127430487`*^9}, { 3.73011274298376*^9, 3.7301127758986387`*^9}, {3.7301128133526077`*^9, 3.7301128403526278`*^9}, {3.832868068201941*^9, 3.832868086841778*^9}, { 3.832868854595501*^9, 3.8328688619132967`*^9}},ExpressionUUID->"440cbf97-e086-4ead-bab6-\ 79672fef11cc"], Cell[TextData[{ "\n\n", StyleBox["Theorem", FontWeight->"Bold"], "[Complexity of Euclides Algorithm] Let |a|,|b|\[Element] O(\[Eta]), then \ the number of recursive calls of Euclides is O(\[Eta]).,\n\n", StyleBox["Proof:", FontWeight->"Bold"], " As a corollary of Lam\[EGrave], we have that the number of recursive call \ has to be ", Cell[BoxData[ FormBox[ RowBox[{"O", "(", RowBox[{ SubscriptBox["log", RowBox[{"(", FractionBox[ RowBox[{"1", "+", SqrtBox["5"]}], "2"], ")"}]], "a"}], ")"}], TraditionalForm]], ExpressionUUID->"59545dbd-679a-4931-9a36-4457f52c4d0c"], "=O(|a|)=O(\[Eta]).\nAnd so, Euclides takes ", Cell[BoxData[ FormBox[ RowBox[{"O", "(", SuperscriptBox["\[Eta]", "3"]}], TraditionalForm]],ExpressionUUID-> "b2801a21-7c3c-44a8-8a63-0df5820d6146"], ") times...." }], "Text", CellChangeTimes->{{3.729673924366852*^9, 3.729673955007296*^9}, { 3.729854639372774*^9, 3.729854755715226*^9}, {3.729854807853462*^9, 3.729854814115645*^9}, {3.72985492381988*^9, 3.729854938363351*^9}, { 3.729855089114822*^9, 3.729855220403232*^9}, {3.72985580921918*^9, 3.7298558687835693`*^9}, {3.7298559010731573`*^9, 3.7298559042975597`*^9}, {3.729855995729648*^9, 3.729855998105142*^9}, 3.730035363054963*^9, 3.730035394442745*^9, {3.730096819530657*^9, 3.730096829849759*^9}, 3.730096861377695*^9, {3.730112665699614*^9, 3.7301126696629753`*^9}, {3.7301128844681892`*^9, 3.730112941502696*^9}, { 3.7301129841674433`*^9, 3.730113064340617*^9}, {3.730184116530285*^9, 3.730184139441399*^9}, {3.832868090554943*^9, 3.832868090561166*^9}, 3.83286886519228*^9, {3.832869017074115*^9, 3.832869017635804*^9}},ExpressionUUID->"7b59f010-82ce-4c45-a04d-\ 481b221ca877"], Cell[CellGroupData[{ Cell["Finding modular inverses", "Subsubsection", CellChangeTimes->{{3.730035371887982*^9, 3.730035376925652*^9}},ExpressionUUID->"bf9f6c2d-d20e-4cff-94aa-\ fe4135ab8f55"], Cell[BoxData[ RowBox[{ RowBox[{"EuclidesGCD", "[", RowBox[{"a_", ",", "b_"}], "]"}], ":=", RowBox[{"If", "[", RowBox[{ RowBox[{"b", "\[Equal]", "0"}], ",", "a", ",", RowBox[{"EuclidesGCD", "[", RowBox[{"b", ",", RowBox[{"Mod", "[", RowBox[{"a", ",", "b"}], "]"}]}], "]"}]}], "]"}], " ", RowBox[{"(*", " ", RowBox[{ RowBox[{"assume", " ", "a"}], " ", "\[GreaterEqual]", " ", "b"}], " ", "*)"}]}]], "Input", CellChangeTimes->{{3.729854998046633*^9, 3.729855051643824*^9}, { 3.730109980306108*^9, 3.7301099861053553`*^9}, {3.730110340554895*^9, 3.730110357625834*^9}},ExpressionUUID->"3dbda3e0-a826-4188-9521-\ a4f21ca162ad"], Cell[BoxData[ RowBox[{"EuclidesGCD", "[", RowBox[{"75", ",", "10"}], "]"}]], "Input", CellChangeTimes->{{3.729855056076288*^9, 3.7298550813554087`*^9}},ExpressionUUID->"1124d9da-b6b4-43f4-a7ac-\ a0697f22f0c8"], Cell[TextData[{ "We can extend this algorithm to obtain integers n and m such that\nn*a \ +m*b=gcd(a,b)\n\nto obtain n and m we have to consider the recursive call to \ (b, Mod[a,n]) whose result will be n\[CloseCurlyQuote] and \ m\[CloseCurlyQuote]\nthat is, n\[CloseCurlyQuote] b + m\[CloseCurlyQuote] \ Mod[a,b] = d = gcd[b, mod[a, b]]=gcd[a,b]\n\nBut now, we notice that \ Mod[a,b]=(a-b(a\[Divide]b)) where a\[Divide]b is the integer division\n\nn\ \[CloseCurlyQuote] b + m\[CloseCurlyQuote] (a-b(a\[Divide]b)) =m\ \[CloseCurlyQuote]a +(n\[CloseCurlyQuote]-m\[CloseCurlyQuote](a\[Divide]b))b, \ and so,\n\n n=m\[CloseCurlyQuote] and m=(n\[CloseCurlyQuote]-m\ \[CloseCurlyQuote](a\[Divide]b))\n\n\n", StyleBox["Exercise", FontWeight->"Bold"], " Implement extended Euclides algorithm where the result for input a, b \ should be {n,m,d} where \nn*a+m*b=d=gcd[a,b]\n" }], "Text", CellChangeTimes->{{3.730096716731928*^9, 3.730096803640951*^9}, { 3.730096974905087*^9, 3.730096975158475*^9}, {3.7301101893210583`*^9, 3.730110192643812*^9}, {3.8328699857453012`*^9, 3.832869986098342*^9}, { 3.832870025576819*^9, 3.832870252258451*^9}},ExpressionUUID->"00ec4ccd-cb63-4e01-9057-\ 439ec6acdf15"], Cell[BoxData[""], "Input", CellChangeTimes->{{3.730111073588497*^9, 3.7301111436374073`*^9}, { 3.8328702558140297`*^9, 3.832870290411522*^9}},ExpressionUUID->"e66a3df3-2959-4df4-b7b9-\ a0f1834d8ba2"], Cell[BoxData[ RowBox[{ RowBox[{"EEuclidesGCD", ":=", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"a", ",", "b"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", "r", "}"}], ",", " ", RowBox[{"(*", " ", RowBox[{"Each", " ", "recursive", " ", "call", " ", "costs", " ", "O", RowBox[{"(", SuperscriptBox["\[Eta]", "2"], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"b", "\[Equal]", "0"}], ",", RowBox[{"(*", " ", RowBox[{ RowBox[{"assume", " ", "a"}], " ", "\[GreaterEqual]", " ", "b"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "a"}], "}"}], ",", " ", RowBox[{"(*", " ", RowBox[{ RowBox[{ RowBox[{"Basis", " ", "n"}], "=", "1"}], ",", " ", RowBox[{"m", "=", "0"}], ",", " ", RowBox[{"a", " ", "is", " ", "gcd", RowBox[{"(", RowBox[{"a", ",", "0"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"r", "=", RowBox[{"EEuclidesGCD", "[", RowBox[{"b", ",", RowBox[{"Mod", "[", RowBox[{"a", ",", "b"}], "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ RowBox[{"r", "[", RowBox[{"[", "2", "]"}], "]"}], ",", RowBox[{ RowBox[{"r", "[", RowBox[{"[", "1", "]"}], "]"}], "-", RowBox[{ RowBox[{"r", "[", RowBox[{"[", "2", "]"}], "]"}], "*", RowBox[{"Floor", "[", RowBox[{"a", "/", "b"}], "]"}]}]}], ",", RowBox[{"r", "[", RowBox[{"[", "3", "]"}], "]"}]}], "}"}]}]}], "\[IndentingNewLine]", "]"}]}], " ", "]"}]}], "]"}]}], "\[IndentingNewLine]"}]], "Input", CellChangeTimes->{{3.730110227590342*^9, 3.730110292071487*^9}, { 3.7301103246391478`*^9, 3.730110404130949*^9}, {3.730110434510385*^9, 3.730110488038876*^9}, {3.730110770662456*^9, 3.7301108252116528`*^9}, { 3.7301109016771173`*^9, 3.730110905411104*^9}, {3.730111489453619*^9, 3.730111510189053*^9}}, CellLabel->"In[32]:=",ExpressionUUID->"eba12171-3a78-48fe-8f57-a482fd2cb2fb"], Cell["\<\ Clearly, the complexity of EEuclides is the same as of Euclides, moreover, \ this allow to compute PowerMod[a,-1,n]!!!!!!!! a*b=1 mod \[Phi](n)=\[Phi](p)\[Phi](q)=(p-1)(q-1) \ \>", "Text", CellChangeTimes->{{3.7301109972506447`*^9, 3.730111018041478*^9}, { 3.7301112360947123`*^9, 3.730111307732843*^9}},ExpressionUUID->"48181bfd-e6e2-4fdd-8e5e-\ ee88c39eb3cd"], Cell[BoxData[ RowBox[{ RowBox[{"mymodinverse", "[", RowBox[{"a_", ",", "n_"}], "]"}], ":=", RowBox[{ RowBox[{"EEuclidesGCD", "[", RowBox[{"a", ",", "n"}], "]"}], "[", RowBox[{"[", "1", "]"}], "]"}]}]], "Input", CellChangeTimes->{{3.730111343983201*^9, 3.730111394558793*^9}}, CellLabel->"In[33]:=",ExpressionUUID->"4bd351d8-d6b5-4479-b7e8-6c46d05c76a2"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"mymodinverse", "[", RowBox[{"5", ",", "17"}], "]"}]], "Input", CellChangeTimes->{{3.7301108269420633`*^9, 3.730110839932735*^9}, 3.73011087051443*^9, {3.7301109467111692`*^9, 3.730110968004106*^9}, { 3.7301111654304667`*^9, 3.730111196461595*^9}, {3.8328702985086946`*^9, 3.8328703046261673`*^9}}, CellLabel->"In[35]:=",ExpressionUUID->"e08f62e6-17dd-413d-a3fb-ec8a3e594185"], Cell[BoxData["7"], "Output", CellChangeTimes->{{3.730110845878632*^9, 3.7301108710338*^9}, { 3.730110937389099*^9, 3.7301109682205153`*^9}, {3.7301111687117987`*^9, 3.7301111968169193`*^9}, 3.761912804966399*^9, {3.8328703021517057`*^9, 3.8328703049084053`*^9}}, CellLabel->"Out[35]=",ExpressionUUID->"878526cc-fc47-45bb-aca6-e1be2008c152"] }, Open ]], Cell["Which we compare with Mathematica\[CloseCurlyQuote]s implementation", \ "Text", CellChangeTimes->{{3.83287032495963*^9, 3.832870340977305*^9}},ExpressionUUID->"0a3b5cec-4026-41dc-ad3c-\ 058e79958fa0"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"5", ",", RowBox[{"-", "1"}], ",", "17"}], "]"}]], "Input", CellChangeTimes->{3.8328703123267393`*^9}, CellLabel->"In[36]:=",ExpressionUUID->"6db3fe84-385e-43c8-a7be-4639b1168e10"], Cell[BoxData["7"], "Output", CellChangeTimes->{3.8328703128214903`*^9}, CellLabel->"Out[36]=",ExpressionUUID->"14463ed0-b48d-43f3-b306-424f49fb5723"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Primality testing", "Subsubsection", CellChangeTimes->{{3.730035371887982*^9, 3.730035399822184*^9}},ExpressionUUID->"cdc4575c-abd4-4cf2-8ccc-\ af102e853bc0"], Cell["\<\ In order to find large prime numbers, we need to introduce quadratic residues \ together with the Legendre and Jacobi symbol. \ \>", "Text", CellChangeTimes->{{3.730035406919841*^9, 3.73003547715049*^9}, { 3.73003552956734*^9, 3.730035627186116*^9}, {3.7300356642166967`*^9, 3.7300357146968603`*^9}, {3.730035754986211*^9, 3.730035922963821*^9}, { 3.730035994214666*^9, 3.7300360275924253`*^9}, {3.73009700505031*^9, 3.7300972575198793`*^9}, {3.7300973017278423`*^9, 3.730097442015853*^9}, { 3.730097501575156*^9, 3.730097507983469*^9}, {3.730097539263377*^9, 3.7300975392636547`*^9}, 3.730113511993347*^9, {3.832869036265839*^9, 3.832869043026972*^9}, {3.832870351795836*^9, 3.8328703557120867`*^9}},ExpressionUUID->"43e2fb16-904b-4574-b203-\ 6f3045178301"], Cell[TextData[{ StyleBox["Definition", FontWeight->"Bold"], " A non-null element x \[Element] ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"8f76a7e2-ff84-42ab-80ac-9eb340dfdad8"], " is said to be a ", StyleBox["quadratic residue", FontWeight->"Bold"], " ", StyleBox["modulo n ", FontWeight->"Bold"], "if there exists y such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{"x", " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID-> "c6648108-ec48-44c7-a0b8-12dfcaca6771"], "." }], "Text", CellChangeTimes->{{3.730035406919841*^9, 3.73003547715049*^9}, { 3.73003552956734*^9, 3.730035627186116*^9}, {3.7300356642166967`*^9, 3.7300357146968603`*^9}, {3.730035754986211*^9, 3.730035922963821*^9}, { 3.730035994214666*^9, 3.7300360275924253`*^9}, {3.73009700505031*^9, 3.7300972575198793`*^9}, {3.7300973017278423`*^9, 3.730097442015853*^9}, { 3.730097501575156*^9, 3.730097507983469*^9}, {3.730097539263377*^9, 3.7300975392636547`*^9}},ExpressionUUID->"60f831ce-9258-4094-a997-\ b3e04c0013af"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "23"}], ";"}], "\[IndentingNewLine]", RowBox[{"Union", "[", RowBox[{"Table", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"i", "^", "2"}], ",", "n"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}], "]"}]}], "Input", CellChangeTimes->{{3.826874687588292*^9, 3.8268747245896893`*^9}}, CellLabel->"In[71]:=",ExpressionUUID->"7170d50c-a4a0-49ad-9b21-419720ac0b30"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "3", ",", "4", ",", "6", ",", "8", ",", "9", ",", "12", ",", "13", ",", "16", ",", "18"}], "}"}]], "Output", CellChangeTimes->{{3.826874713058444*^9, 3.826874725079167*^9}}, CellLabel->"Out[72]=",ExpressionUUID->"ef828736-7a67-4af6-a226-3c73ffbf7e64"] }, Open ]], Cell[TextData[{ StyleBox["Exercise ", FontWeight->"Bold"], "Let p be a odd prime , show that if x is a quadratic residue modulo p then \ x has two square roots. \n\n", StyleBox["R: ", FontWeight->"Bold"], " There are always at least two square roots of x since if y mod p is a \ square root, so is -y mod p.Thus, we just have to prove that there is at \ most two square roots (moreover if p is odd, then y\[NotEqual]-y mod p unless \ y=0).\nAssume ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{ SuperscriptBox["y", "2"], "=", RowBox[{ SuperscriptBox["z", "2"], " ", "mod", " ", "p"}]}]}], TraditionalForm]], ExpressionUUID->"bc3e9911-2416-4725-981d-53da09161455"], ", this implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["y", "2"], "-", SuperscriptBox["z", "2"]}], "=", RowBox[{"0", " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID-> "8bd71a5a-fbf3-4b9d-99e0-57b993df6842"], " and so (y-z)(y+z)=0 mod p\nthis implies that p|(y-z)(y+z) , and so either \ p|(y-z) or p|(y+z) (because p is prime) and so y-z=0 mod p or y+z=0 mod p. We \ conclude that y=\[PlusMinus]z mod p.\n \n", StyleBox["\nExercise", FontWeight->"Bold"], " Let n=pq,with p and q odd primes, show that if x is a quadratic residue \ modulo n then x has four square roots. Moreover, show that if one knows all \ these square roots, then it is possible to factor n.\n" }], "Text", CellChangeTimes->{{3.730035406919841*^9, 3.73003547715049*^9}, { 3.73003552956734*^9, 3.730035627186116*^9}, {3.7300356642166967`*^9, 3.7300357146968603`*^9}, {3.730035754986211*^9, 3.730035922963821*^9}, { 3.730035994214666*^9, 3.7300360275924253`*^9}, {3.73009700505031*^9, 3.7300972575198793`*^9}, {3.7300973017278423`*^9, 3.730097442015853*^9}, { 3.730097501575156*^9, 3.730097507983469*^9}, {3.730097539263377*^9, 3.7300975392636547`*^9}, {3.730113516024238*^9, 3.730113517972292*^9}, { 3.730113660638089*^9, 3.7301136610185957`*^9}, {3.7301137397283773`*^9, 3.7301137700401583`*^9}, {3.7301138007831163`*^9, 3.730114479728097*^9}, { 3.7301145131009073`*^9, 3.7301147855885077`*^9}, {3.730114818554284*^9, 3.730114824563581*^9}, {3.7301149270556917`*^9, 3.73011493043075*^9}, { 3.761912147391767*^9, 3.7619121706586103`*^9}, {3.761915465388443*^9, 3.761915682294552*^9}, {3.761915749712885*^9, 3.761915761588895*^9}, { 3.761915805993958*^9, 3.761915939733513*^9}, {3.7619161242123833`*^9, 3.761916173466899*^9}, {3.76191629125143*^9, 3.7619163569954767`*^9}, { 3.761916450901037*^9, 3.761916505642918*^9}, {3.761916593115299*^9, 3.761916754326511*^9}, {3.761916804519541*^9, 3.761916820514045*^9}, { 3.7619168699923067`*^9, 3.761917170153514*^9}, {3.761917204388579*^9, 3.761917207492888*^9}, {3.8268714807657824`*^9, 3.826871514989606*^9}, { 3.826874778388198*^9, 3.826874965526205*^9}, {3.826875005627738*^9, 3.826875050544992*^9}, {3.826875133653862*^9, 3.826875188073534*^9}, { 3.826875282122437*^9, 3.826875379517536*^9}, {3.8268795608435707`*^9, 3.826879624680809*^9}, {3.826879656199542*^9, 3.826879708194027*^9}, 3.826880138429249*^9, 3.826880459606844*^9},ExpressionUUID->"3ec046b4-0713-4a7a-a2ab-\ dde5c10ef4cf"], Cell[TextData[{ StyleBox["R:", FontWeight->"Bold"], " So the idea is to show that 1 has four square roots {1,-1,w,-w} and so if ", Cell[BoxData[ FormBox[ RowBox[{"x", "=", RowBox[{ SuperscriptBox["y", "2"], " ", "mod", " ", "n"}]}], TraditionalForm]], ExpressionUUID->"aed53a98-d4ab-4026-8f85-6a43d49dcbfd"], " the square roots of x are {y,-y,wy,-wy}\n\nSo recall that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ TemplateBox[{}, "Integers"], "n"], " ", "\[TildeEqual]", RowBox[{ SubscriptBox[ TemplateBox[{}, "Integers"], "p"], "\[Cross]", SubscriptBox[ TemplateBox[{}, "Integers"], "q"]}]}], TraditionalForm]],ExpressionUUID-> "482c932c-400a-48f2-9bea-486439c646f6"], " (Chinese Remainder Theorem)\n\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "=", RowBox[{"1", " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID-> "e55e4fd7-afd6-4f78-b6a3-ff3ef734d2b3"], " this is equivalent to solving the system\n\n", Cell[BoxData[{ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "=", RowBox[{"1", " ", "mod", " ", "p"}]}], TraditionalForm], "\[IndentingNewLine]", FormBox[ RowBox[{ SuperscriptBox["x", "2"], "=", RowBox[{"1", " ", "mod", " ", "q"}]}], TraditionalForm]}],ExpressionUUID-> "8d60fd5d-c529-49eb-9b37-347676b3e2db"], " and since p and q are prime, we have ", Cell[BoxData[{ FormBox[ RowBox[{"x", "=", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", "mod", " ", "p"}]}], TraditionalForm], "\[IndentingNewLine]", FormBox[ RowBox[{"x", "=", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", "mod", " ", "q"}]}], TraditionalForm]}],ExpressionUUID-> "bea60298-8105-4cbe-956c-c652414cad0c"], " " }], "Text", CellChangeTimes->CompressedData[" 1:eJwlxUsogwEAB/DRQhSFRB5tESVjjYNWyrI8PkOUrzyyWua52Zq0tYgREZpG 3o9tRI3W0rILzQUbxS6bNayUiyzkEe3k+8/h148pkjWIw2k0GoOCSdlDk/ry hedy7Yjwbg6nG5u+xAM4/y1Cjc0CcgRHa4XjeOu2bRVP+8u3cfa3Yg9nrRuk y9Q+I3sWDxI2HfZrSnewufNwHy+ohg/worTLgu9l/2vPR4b01PR0e2hu74IW k8v60P5a5QoOVvI2MBGXYsA6wc83NnIzgzjWzUkzUB8e1zPwXVQ8E3Mdjyxs ddTk45YpSW5FZIBHJjSyMKMvz1lJ/SupesJfN0cBzPVyXrHm2v6J31VKehW1 92oiFXvezUxsi+li4w/fVjEWuFv52KkrqsaTlkwSXyiIHpyon5Pj2P45BQ6e 2lV48Zm/iUtkM0Z8cvYWmtAkL7HGAjyfSbiGMySCwgLqA4+FwH1J1jo8L69v xPKAVYjbm0c7cNhLmQKbTbnz+A8sfQcQ "],ExpressionUUID->"80ef880b-5099-4ef7-9e6d-2e3b1bb415fd"], Cell[TextData[{ "\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ TemplateBox[{}, "Integers"], "p"], "\[Cross]", SubscriptBox[ TemplateBox[{}, "Integers"], "q"]}], TraditionalForm]],ExpressionUUID-> "cb843913-1c6c-4d44-a199-125c29699988"], "\[RightArrow]", Cell[BoxData[ FormBox[ SubscriptBox[ TemplateBox[{}, "Integers"], "n"], TraditionalForm]],ExpressionUUID-> "378df691-941c-4d73-a81f-dbb74aca41f5"], "\n(1,1)\[RightArrow]1 trivial root of 1\n(-1,-1)\[RightArrow]-1 trivial \ root of 1\n(1,-1)\[RightArrow] w non-trivial root of 1\n(-1,1)\[RightArrow]-w \ non-trivial root of 1\n \nIndeed there are precisely four square roots of \ one, and the same for any quadratic residue.\n" }], "Text", CellChangeTimes->CompressedData[" 1:eJwlxWlIWgEAB3CLqChw0EYsOkgUB5EVLmgYQW6x7GVFY72oxoRY5yzlRSiy WBZFJ4pJ96FONjoQF1IbFI5BN1gEHVgJQV9CScmkIX3Y+9uHHz9WrexdXTiD wWDTMCm7qFLtuoUHB+Za/P0Fvwkv3NW14wxvpApbxGQnjtFIevDcycdJPOh6 +w1zA9QPzJk2tozTO01Zw/gLsarDLnW+GVsalhexXvl1CY+2NFrxuexxzWZn h4E+ItkeWvBZr8HkuCG0q1QxgYMi4QwmniQYsU58H8AmATuImUf8JCP98lp5 Kj6LjmNhwfYlD9u2SzJwTb80rTDKIySfVvBwamv6joj+n7ToCt/tr3iw4JR/ g9UOux/7lIqIIvrTvd5EfOyzsPBqbGMWvnXOvcLiow8FeEeXXYz7rGwSb1FE M35m0Moxs01L4eAfuxKPXhfM4jzZkAmvb3hDE+rnY7xuj9C5IJnCKVLxy0z6 pWMrgVvjbWV4RF5egeUemwR/qu6qx2HuNxTmUIYOfKgd0GPTvN+M32/kWjD3 ddtP7Mip/I1Xfj38xf8B4CsgHA== "],ExpressionUUID->"add155b8-d5cc-471a-bd54-49d0b0b50e4e"], Cell[TextData[{ "It remains to show that if one has w (or -w) and n, then we can factor n \ (and so crack RSA).\n\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["w", "2"], "=", RowBox[{ SuperscriptBox["1", "2"], " ", "mod", " ", "n", " "}]}], TraditionalForm]],ExpressionUUID->"99208769-26a4-4287-aff9-adf2dfc89501"], " and moreover, 1 "65081406-588f-4d82-a02a-e2941dd27eaf"], "-", Cell[BoxData[ FormBox[ SuperscriptBox["1", "2"], TraditionalForm]],ExpressionUUID-> "972f716d-56f3-447c-8176-471b30a0a465"], "=0 mod n\n(w-1)(w+1)=0 mod n (recall that n = pq)\n\npq|(w-1)(w+1)\n\n(1) \ either pq|(w-1) which is impossible 0CompressedData[" 1:eJwlxWkoQwEAB/CREEUhkSNromRoFE3KkOMZIp4cWcltbD3JEjEiZ1uz3Mc2 ixyt0SJF88VdSGENK+WLLOSI9sn7z4dfP2alqKDakcFgsGiYFD2UtJ++8C4v tZV4KZxTj1e/qltx1JtzO9bxyW7sJhP04YXbimk8bElfxGHf1DIOnVU3TdKb NTGjuIPYVmCLNFmLdbWba1gp6VrH4011enwv+l922N2poncKMtrnNiplmJxU 2bfktk1hWyZvDhOe/mqs4P98Yw2XZcMe15xANf3mbn4IvnP1YmLu8SMbG45z onDZoDAiw8XKI72L2DikOfIkk/5XmPWEvy62rJhr4rxi6bnxE79L2pyy6E1n /QH45l3HxNvudTH4w7yQgPnX5Wn4RBGXjQf0LBIfUUQD9lHJxdijRU5h275R gsef0+ZxkmhEg/cO3uwTUr8Jdq+VZ14VzOBgIT82mn79Rk/gZl9DHh4T5xdh sdUgwFWlPTXY4SWVwqGUqhNfyYeUWLPyqcWFB4k6HJbSsoHP44t3sPearwn/ AdXCHpw= "],ExpressionUUID->"d7916c62-73bc-49bd-93fa-40cc5bee2826"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"n", "=", RowBox[{ RowBox[{"Prime", "[", "1200", "]"}], "*", RowBox[{"Prime", "[", "200", "]"}]}]}]], "Input", CellChangeTimes->{{3.826876112799129*^9, 3.826876129164876*^9}}, CellLabel->"In[74]:=",ExpressionUUID->"fbc121ad-5ba7-4341-a127-8b304504ba43"], Cell[BoxData["11903459"], "Output", CellChangeTimes->{{3.826876117846766*^9, 3.826876129420411*^9}}, CellLabel->"Out[74]=",ExpressionUUID->"ef68af12-09d4-42df-8057-81212ae49427"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Do", "[", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"i", ",", "2", ",", "n"}], "]"}], "\[Equal]", "1"}], ",", RowBox[{"Print", "[", "i", "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.826876134828725*^9, 3.826876167707862*^9}}, CellLabel->"In[75]:=",ExpressionUUID->"315b8ec8-be97-49ef-8b64-ec77273dd391"], Cell[CellGroupData[{ Cell[BoxData["1"], "Print", CellChangeTimes->{3.8268761716451807`*^9}, CellLabel-> "During evaluation of \ In[75]:=",ExpressionUUID->"ef3e2968-5ec9-4492-8c72-112e69bdb372"], Cell[BoxData["467185"], "Print", CellChangeTimes->{3.826876172077764*^9}, CellLabel-> "During evaluation of \ In[75]:=",ExpressionUUID->"1dffa995-91b6-444e-8a0c-2fd1e9814464"], Cell[BoxData["11436274"], "Print", CellChangeTimes->{3.826876181918426*^9}, CellLabel-> "During evaluation of \ In[75]:=",ExpressionUUID->"5e64c237-be7a-483a-befa-c72849929fd7"], Cell[BoxData["11903458"], "Print", CellChangeTimes->{3.826876182384705*^9}, CellLabel-> "During evaluation of \ In[75]:=",ExpressionUUID->"78bc9cf9-686f-40a3-94e3-505e61d3ff39"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GCD", "[", RowBox[{ RowBox[{"11436274", "+", "1"}], ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.826876203964657*^9, 3.8268762295522013`*^9}}, CellLabel->"In[78]:=",ExpressionUUID->"55757345-c8e5-40ff-bfd9-3656e68075f3"], Cell[BoxData["9733"], "Output", CellChangeTimes->{{3.826876216532247*^9, 3.826876230138129*^9}}, CellLabel->"Out[78]=",ExpressionUUID->"3a7ad223-eb75-42c7-aeb1-fad198f5a7af"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Prime", "[", "1200", "]"}]], "Input", CellChangeTimes->{3.8268762338047733`*^9}, CellLabel->"In[79]:=",ExpressionUUID->"d53250da-4dd6-4aa6-a3fa-0fb05822b58d"], Cell[BoxData["9733"], "Output", CellChangeTimes->{{3.826876223331748*^9, 3.8268762343949833`*^9}}, CellLabel->"Out[79]=",ExpressionUUID->"7265b21c-e9c0-427b-9101-07100e7395a3"] }, Open ]], Cell[TextData[{ "\n\n", StyleBox["Theorem[Euler Criterion]", FontWeight->"Bold"], " Let non-null x", StyleBox[" ", FontWeight->"Bold"], "\[Element] ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]], ExpressionUUID->"d8a0ec10-70cb-4d06-8812-69495f7d8b46"], " with p an odd prime, then x is a quadratic residue modulo p iff ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], " ", "=", RowBox[{"1", " ", "mod", " ", RowBox[{"p", " ", "."}]}]}], TraditionalForm]],ExpressionUUID-> "47f053e4-cfe8-4e72-9a23-8ec0100b9a25"], "\n\n", StyleBox["Proof:", FontWeight->"Bold"], "\nRecall , we know that this is a cyclic group, and so there is a generator \ \[Alpha] such that {", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "k"], "mod", " ", RowBox[{"p", ":", RowBox[{"0", "\[LessEqual]", "k", "\[LessEqual]", RowBox[{"p", "-", "2"}]}]}]}], "}"}], "="}], TraditionalForm]], ExpressionUUID->"ea35e55e-63a9-4ec1-810e-e90636339d14"], Cell[BoxData[ FormBox[ SuperscriptBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]"], TraditionalForm]],ExpressionUUID->"12903ae6-f286-4ee1-b145-803fa481b866"], ", and so ord(\[Alpha])=p-1=\[Phi](p) and so there exists some k such that \ y=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "k"], " "}], TraditionalForm]],ExpressionUUID-> "ae003a40-f22f-4124-a3dd-129b62769709"], " mod p.\n\nRecall that ", Cell[BoxData[ FormBox[ SuperscriptBox["z", RowBox[{"\[Phi]", "(", "p", ")"}]], TraditionalForm]],ExpressionUUID-> "062939fc-3c77-43f8-8c92-e6d08c1502ea"], "= ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["z", RowBox[{"p", "-", "1"}]], "=", RowBox[{"1", " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID-> "721d9e92-c150-4848-8978-a232ed238fe3"], " (if z\[NotEqual]0 Euler Thm, Little Fermat Thm). \n " }], "Text", CellChangeTimes->{{3.730035406919841*^9, 3.73003547715049*^9}, { 3.73003552956734*^9, 3.730035627186116*^9}, {3.7300356642166967`*^9, 3.7300357146968603`*^9}, {3.730035754986211*^9, 3.730035922963821*^9}, { 3.730035994214666*^9, 3.7300360275924253`*^9}, {3.73009700505031*^9, 3.7300972575198793`*^9}, {3.7300973017278423`*^9, 3.730097442015853*^9}, { 3.730097501575156*^9, 3.730097507983469*^9}, {3.730097539263377*^9, 3.7300975392636547`*^9}, {3.730113516024238*^9, 3.730113517972292*^9}, { 3.730113660638089*^9, 3.7301136610185957`*^9}, {3.7301137397283773`*^9, 3.7301137700401583`*^9}, {3.7301138007831163`*^9, 3.730114479728097*^9}, { 3.7301145131009073`*^9, 3.7301147855885077`*^9}, {3.730114818554284*^9, 3.730114824563581*^9}, {3.7301149270556917`*^9, 3.73011493043075*^9}, { 3.761912147391767*^9, 3.7619121706586103`*^9}, {3.761915465388443*^9, 3.761915682294552*^9}, {3.761915749712885*^9, 3.761915761588895*^9}, { 3.761915805993958*^9, 3.761915939733513*^9}, {3.7619161242123833`*^9, 3.761916173466899*^9}, {3.76191629125143*^9, 3.7619163569954767`*^9}, { 3.761916450901037*^9, 3.761916505642918*^9}, {3.761916593115299*^9, 3.761916754326511*^9}, {3.761916804519541*^9, 3.761916820514045*^9}, { 3.7619168699923067`*^9, 3.761917170153514*^9}, {3.761917204388579*^9, 3.761917208600768*^9}, {3.7619174814900217`*^9, 3.761917556569639*^9}, { 3.761917762547701*^9, 3.7619177807176723`*^9}, {3.761917841812924*^9, 3.761917911107226*^9}, {3.7619179419387302`*^9, 3.761918048533689*^9}, { 3.761918096599106*^9, 3.761918198765297*^9}, {3.7619182398862553`*^9, 3.761918249454027*^9}, {3.761918354839525*^9, 3.761918630762212*^9}, { 3.7619187176463537`*^9, 3.761918833922615*^9}, {3.761918885308014*^9, 3.76191891138706*^9}, 3.761923177185563*^9, {3.762163495150906*^9, 3.7621636064980307`*^9}, {3.7621641417274513`*^9, 3.762164145483028*^9}, { 3.826871558038656*^9, 3.826871600421521*^9}, {3.826876342382433*^9, 3.826876858636716*^9}},ExpressionUUID->"733edd89-147a-4f9b-a129-\ c73cce87ea27"], Cell[TextData[{ "\[DoubleRightArrow]) Assume that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", "=", RowBox[{ SuperscriptBox["y", "2"], " ", "mod", " ", "p"}]}], ",", " ", "we"}], TraditionalForm]],ExpressionUUID->"3872310c-03a7-4382-ad8e-7140044483dc"], " know that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]"], "=", RowBox[{"{", RowBox[{"1", ",", "...", ",", RowBox[{"p", "-", "1"}]}], "}"}]}], TraditionalForm]],ExpressionUUID-> "5d9a50e5-bf10-452f-b882-ab176a3761b0"], ",.\nSo now ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], " ", "=", RowBox[{ SuperscriptBox["y", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]], "="}]}], TraditionalForm]], ExpressionUUID->"372378d9-750c-4b13-9cda-5a605697928b"], "1 mod p (this fallows from Euler Thm)\n\[DoubleLeftArrow])\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{"1", " ", "mod", " ", "p", " "}]}], TraditionalForm]], ExpressionUUID->"d5cf1788-29d5-48b4-9f4c-deb84821ba21"], " and assume that x=", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["\[Alpha]", "e"], " ", "mod", " ", "p"}], ",", " "}], TraditionalForm]],ExpressionUUID->"79799bed-f634-4ddb-84b0-7760145443c6"], "since \[Alpha] is a generator\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"e", "(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", "0"], " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID->"f42d9d20-5d02-478a-8ad8-5ed2f3b80c0f"], " since the ord(\[Alpha])=p-1 we conclude that\n(p-1)|e(p-1)/2 (1)\nso \ it remains to show that e is even.\n\nAssume that e is odd\n(p-1)=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "d"], "r"}], TraditionalForm]],ExpressionUUID-> "d335c942-4f89-41ea-abcd-8172c9349af2"], " with r odd\n\ne(p-1)/2=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"d", "-", "1"}]], "s"}], TraditionalForm]],ExpressionUUID-> "55bf44cb-ed3a-426f-9bf9-6bc1983ccf2b"], " with s odd, but then (p-1) cannot divide e(p-1)/2, which contradicts (1).\n\ \nSo e must be even, meaning that x=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"2", RowBox[{"e", "'"}]}]], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", RowBox[{"e", "'"}]], ")"}], "2"], " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID->"f7bd8940-7a28-4577-80f6-2a7cb01e6f58"], " and so x is a quadratic residue.\n\n" }], "Text", CellChangeTimes->{{3.730035406919841*^9, 3.73003547715049*^9}, { 3.73003552956734*^9, 3.730035627186116*^9}, {3.7300356642166967`*^9, 3.7300357146968603`*^9}, {3.730035754986211*^9, 3.730035922963821*^9}, { 3.730035994214666*^9, 3.7300360275924253`*^9}, {3.73009700505031*^9, 3.7300972575198793`*^9}, {3.7300973017278423`*^9, 3.730097442015853*^9}, { 3.730097501575156*^9, 3.730097507983469*^9}, {3.730097539263377*^9, 3.7300975392636547`*^9}, {3.730113516024238*^9, 3.730113517972292*^9}, { 3.730113660638089*^9, 3.7301136610185957`*^9}, {3.7301137397283773`*^9, 3.7301137700401583`*^9}, {3.7301138007831163`*^9, 3.730114479728097*^9}, { 3.7301145131009073`*^9, 3.7301147855885077`*^9}, {3.730114818554284*^9, 3.730114824563581*^9}, {3.7301149270556917`*^9, 3.73011493043075*^9}, { 3.761912147391767*^9, 3.7619121706586103`*^9}, {3.761915465388443*^9, 3.761915682294552*^9}, {3.761915749712885*^9, 3.761915761588895*^9}, { 3.761915805993958*^9, 3.761915939733513*^9}, {3.7619161242123833`*^9, 3.761916173466899*^9}, {3.76191629125143*^9, 3.7619163569954767`*^9}, { 3.761916450901037*^9, 3.761916505642918*^9}, {3.761916593115299*^9, 3.761916754326511*^9}, {3.761916804519541*^9, 3.761916820514045*^9}, { 3.7619168699923067`*^9, 3.761917170153514*^9}, {3.761917204388579*^9, 3.761917208600768*^9}, {3.7619174814900217`*^9, 3.761917556569639*^9}, { 3.761917762547701*^9, 3.7619177807176723`*^9}, {3.761917841812924*^9, 3.761917911107226*^9}, {3.7619179419387302`*^9, 3.761918048533689*^9}, { 3.761918096599106*^9, 3.761918198765297*^9}, {3.7619182398862553`*^9, 3.761918249454027*^9}, {3.761918354839525*^9, 3.761918630762212*^9}, { 3.7619187176463537`*^9, 3.761918833922615*^9}, {3.761918885308014*^9, 3.76191891138706*^9}, 3.761923177185563*^9, {3.762163495150906*^9, 3.7621636064980307`*^9}, {3.7621641417274513`*^9, 3.762164145483028*^9}, { 3.826871558038656*^9, 3.826871600421521*^9}, {3.826876342382433*^9, 3.826877162734727*^9}, {3.826877201184266*^9, 3.826877248103456*^9}, { 3.826877281200369*^9, 3.8268772931287613`*^9}, {3.826877345945044*^9, 3.8268773461437387`*^9}, {3.8268774028674173`*^9, 3.826877527051684*^9}},ExpressionUUID->"26bf7c40-91d7-4aaf-9818-\ bb8787cead16"], Cell[TextData[{ "\nObserve if x\[NotEqual]0, then ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], " ", "=", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", "mod", " ", "p", " ", "for", " ", "odd", " ", "prime", " ", RowBox[{"p", "."}]}]}], TraditionalForm]],ExpressionUUID-> "01c71464-ac59-4bb2-b5a7-b60ca9b32538"], " \n\nThis follows, since ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"p", "-", "1"}]], "=", RowBox[{"1", " ", "mod", " ", "p"}]}], TraditionalForm]],ExpressionUUID-> "86f834ae-5634-4728-a061-fc56b274a294"], ". So,", Cell[BoxData[ FormBox[ RowBox[{" ", SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]]}], TraditionalForm]], ExpressionUUID->"6d758fc2-1323-4266-8c0b-6b3c595ff6f6"], " this is a square root of 1, and there are two square roots of 1 mod p \ \[PlusMinus]1\n\n", StyleBox["Definition", FontWeight->"Bold"], " The ", StyleBox["Legendre symbol", FontSlant->"Italic"], " for a odd prime p is\n\n ", Cell[BoxData[ RowBox[{"(", FractionBox[ RowBox[{"a", " ", "mod", " ", "p"}], "p"], ")"}]],ExpressionUUID-> "757ec3cf-f4f8-4705-9c82-59dd113958eb"], "=", Cell[BoxData[ RowBox[{ RowBox[{"(", FractionBox["a", "p"], ")"}], "="}]],ExpressionUUID-> "7fea982e-11e8-4266-86c1-5924452d46ff"], Cell[BoxData[ RowBox[{ TagBox[GridBox[{ {"\[Piecewise]", GridBox[{ {"0", RowBox[{ RowBox[{"if", " ", "a"}], "=", RowBox[{"0", " ", "mod", " ", "p"}]}]}, {"1", RowBox[{ "if", " ", "a", " ", "is", " ", "a", " ", "quadratic", " ", "residue", " ", "mod", " ", "p"}]}, { RowBox[{"-", "1"}], RowBox[{"otherwise", "."}]} }, AllowedDimensions->{2, Automatic}, Editable->True, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{ "Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.84]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}, Selectable->True]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{ "Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.35]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "Piecewise", DeleteWithContents->True, Editable->False, SelectWithContents->True, Selectable->False], "\[NoBreak]"}]],ExpressionUUID-> "56e76830-9231-42a8-b949-2ed1083567ce"] }], "Text", CellChangeTimes->{{3.730035406919841*^9, 3.73003547715049*^9}, { 3.73003552956734*^9, 3.730035627186116*^9}, {3.7300356642166967`*^9, 3.7300357146968603`*^9}, {3.730035754986211*^9, 3.730035922963821*^9}, { 3.730035994214666*^9, 3.7300360275924253`*^9}, {3.73009700505031*^9, 3.7300972575198793`*^9}, {3.7300973017278423`*^9, 3.730097442015853*^9}, { 3.730097501575156*^9, 3.730097507983469*^9}, {3.730097539263377*^9, 3.7300975392636547`*^9}, {3.730113516024238*^9, 3.730113517972292*^9}, { 3.730113660638089*^9, 3.7301136610185957`*^9}, {3.7301137397283773`*^9, 3.7301137700401583`*^9}, {3.7301138007831163`*^9, 3.730114479728097*^9}, { 3.7301145131009073`*^9, 3.7301147855885077`*^9}, {3.730114818554284*^9, 3.730114824563581*^9}, {3.7301149270556917`*^9, 3.73011493043075*^9}, { 3.761912147391767*^9, 3.7619121706586103`*^9}, {3.761915465388443*^9, 3.761915682294552*^9}, {3.761915749712885*^9, 3.761915761588895*^9}, { 3.761915805993958*^9, 3.761915939733513*^9}, {3.7619161242123833`*^9, 3.761916173466899*^9}, {3.76191629125143*^9, 3.7619163569954767`*^9}, { 3.761916450901037*^9, 3.761916505642918*^9}, {3.761916593115299*^9, 3.761916754326511*^9}, {3.761916804519541*^9, 3.761916820514045*^9}, { 3.7619168699923067`*^9, 3.761917170153514*^9}, {3.761917204388579*^9, 3.761917208600768*^9}, {3.7619174814900217`*^9, 3.761917556569639*^9}, { 3.761917762547701*^9, 3.7619177807176723`*^9}, {3.761917841812924*^9, 3.761917911107226*^9}, {3.7619179419387302`*^9, 3.761918048533689*^9}, { 3.761918096599106*^9, 3.761918198765297*^9}, {3.7619182398862553`*^9, 3.761918249454027*^9}, {3.761918354839525*^9, 3.761918630762212*^9}, { 3.7619187176463537`*^9, 3.761918833922615*^9}, {3.761918885308014*^9, 3.76191891138706*^9}, 3.761923177185563*^9, {3.762163495150906*^9, 3.7621636064980307`*^9}, {3.7621641417274513`*^9, 3.762164145483028*^9}, { 3.826871558038656*^9, 3.826871600421521*^9}, {3.826876342382433*^9, 3.8268768514061327`*^9}, {3.826877606540736*^9, 3.826877607251575*^9}},ExpressionUUID->"7109aa57-8e45-44fe-9e11-\ 84da786acd62"], Cell[TextData[{ StyleBox["Exercise:", FontWeight->"Bold"], " \nShow that", Cell[BoxData[ RowBox[{" ", RowBox[{"(", FractionBox["a", "p"], ")"}]}]],ExpressionUUID-> "a754c8f2-afcb-456f-b2ce-7a1c9f00621d"], "=", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"3ceeecae-4856-44b6-8cab-e85bcd17c8bf"], " mod p if p is an odd prime, and moreover, state that it can be computed in \ polynomial time.\n\nS: By Euler Criterion we have that ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"a2649df3-31ea-4d29-bac3-c42c28be6d9e"], "=1 mod p iff \[Alpha] is a QR and has to be square root of 1, different \ from 1, otherwise so so if \[Alpha] is not 0 and is not a QR then ", Cell[BoxData[ FormBox[ SuperscriptBox["a", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"8a92f65c-fe14-4a54-a767-5c4884b2fa82"], "=-1 mod p. It can be computed in polynomial since PowerMod can be computed \ in polynomial time.\n\n\n", StyleBox["Definition", FontWeight->"Bold"], " The", StyleBox[" Jacobi symbol ", FontSlant->"Italic"], "for odd positive integer ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ "n", " ", "whose", " ", "prime", " ", "decomposition", " ", "is", " ", "n"}], "=", RowBox[{ SubsuperscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SubsuperscriptBox["p", "i", SubscriptBox["e", "i"]]}]}], TraditionalForm]],ExpressionUUID-> "4f9ca68f-85fb-439a-b3f2-ef55bf70d1fe"], " is\n ", Cell[BoxData[ RowBox[{ RowBox[{"(", FractionBox["a", "n"], ")"}], "="}]],ExpressionUUID-> "75c0bdf7-2728-414a-8ee3-9cafd867132f"], Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ RowBox[{"(", FractionBox["a", SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}], TraditionalForm]],ExpressionUUID-> "03816f36-0a30-4fe9-92a7-d97b843cc70c"], "\n where ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["a", SubscriptBox["p", "i"]], ")"}], TraditionalForm]],ExpressionUUID-> "55479253-196c-43fc-94e6-8c49d0dc3e5c"], " is the Legendre symbol." }], "Text", CellChangeTimes->{{3.730097465626066*^9, 3.730097717878298*^9}, { 3.730098275364922*^9, 3.730098275460614*^9}, {3.762163673332079*^9, 3.76216373915326*^9}, {3.826871615390864*^9, 3.826871617606984*^9}, { 3.8268776577077208`*^9, 3.826877670372282*^9}, {3.826877740181159*^9, 3.8268778619664173`*^9}, {3.82687789241569*^9, 3.8268779359085197`*^9}},ExpressionUUID->"282a484e-606e-45d3-9f0d-\ d4dff408657f"], Cell[TextData[{ "\n", Cell[BoxData[ RowBox[{ RowBox[{"(", FractionBox[ RowBox[{"a", " ", "mod", " ", "n"}], "n"], ")"}], "="}]],ExpressionUUID-> "665e4d7e-10ac-4b7c-a5c7-01815377a8f6"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ RowBox[{"(", FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"a", " ", "mod", " ", "n"}], ")"}], " ", "mod", " ", SubscriptBox["p", "i"]}], SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}], "=", RowBox[{ SubsuperscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ RowBox[{"(", FractionBox[ RowBox[{"a", " ", "mod", " ", SubscriptBox["p", "i"]}], SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}]}], TraditionalForm]],ExpressionUUID-> "95125c7e-a149-4aa7-924b-fa1d2520c018"], "=", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ RowBox[{"(", FractionBox[ RowBox[{"a", " "}], SubscriptBox["p", "i"]], ")"}], SubscriptBox["e", "i"]]}], TraditionalForm]],ExpressionUUID-> "5999b84f-bc66-480f-bde4-df1928ed83c3"], " =", Cell[BoxData[ RowBox[{"(", FractionBox["a", "n"], ")"}]],ExpressionUUID-> "ba393f4c-5629-4fce-bb50-050e0b492b76"], " \n\nFortunately the ", StyleBox["following properties", FontSlant->"Italic"], " (which we do not prove for the moment) of the Jacobi symbol allow to \ compute it in polynomial time without factoring n.\n" }], "Text", CellChangeTimes->{{3.730097776098755*^9, 3.730097807806172*^9}, { 3.730097987229739*^9, 3.730098268165208*^9}, {3.7300989098357487`*^9, 3.7300989219074163`*^9}, {3.730099248180511*^9, 3.730099248739132*^9}, { 3.7301013564004087`*^9, 3.730101399816003*^9}, {3.730101464063517*^9, 3.730101464487709*^9}, {3.7619059676993313`*^9, 3.761905971166597*^9}, { 3.762164168523595*^9, 3.7621641977374163`*^9}, {3.7621642565535517`*^9, 3.762164302090642*^9}, {3.7621645126576643`*^9, 3.7621645180890923`*^9}, { 3.762164557207308*^9, 3.762164565424436*^9}, {3.7621645986364307`*^9, 3.7621646054365587`*^9}, {3.8268781128993063`*^9, 3.826878112899405*^9}},ExpressionUUID->"d8106451-efd9-4619-8651-\ b6339fff7abd"], Cell[TextData[{ "\n", StyleBox["Exercise", FontWeight->"Bold"], ": If gcd[n,m]>1 then ", Cell[BoxData[ RowBox[{"(", FractionBox["m", "n"], ")"}]],ExpressionUUID-> "a9d3468e-fa4e-4dd6-93d0-33940bd2cb05"], "=0 . \n", StyleBox["Lemma1", FontWeight->"Bold"], ": If k=m mod n then ", Cell[BoxData[ RowBox[{"(", FractionBox["k", "n"], ")"}]],ExpressionUUID-> "944f2750-e8ff-4d10-8ccd-e88d0d65154c"], "=", Cell[BoxData[ RowBox[{"(", FractionBox["m", "n"], ")"}]],ExpressionUUID-> "dabd0d34-56b2-426d-8d8b-e45661734dc3"], ". \n", StyleBox["Lemma2", FontWeight->"Bold"], ": ", Cell[BoxData[ RowBox[{"(", FractionBox[ RowBox[{"m", " ", "k"}], "n"], ")"}]],ExpressionUUID-> "62c26e7c-6079-400e-85b4-d506eb206496"], "=", Cell[BoxData[ RowBox[{ RowBox[{"(", FractionBox["m", "n"], ")"}], RowBox[{"(", FractionBox["k", "n"], ")"}]}]],ExpressionUUID-> "90646680-d61f-4823-acfd-56b49a3633b2"], ". \n", StyleBox["Lemma3", FontWeight->"Bold"], ": ", Cell[BoxData[ RowBox[{"(", FractionBox["2", "n"], ")"}]],ExpressionUUID-> "86b99b0b-6422-4ece-b966-b884915f1daf"], "=", Cell[BoxData[ TagBox[GridBox[{ {"\[Piecewise]", GridBox[{ {"1", RowBox[{ RowBox[{"if", " ", "n"}], "=", RowBox[{ RowBox[{"\[PlusMinus]", "1"}], " ", "mod", " ", "8"}]}]}, { RowBox[{"-", "1"}], RowBox[{ RowBox[{"if", " ", "n"}], "=", RowBox[{ RowBox[{"\[PlusMinus]", "3"}], " ", "mod", " ", "8."}]}]} }, AllowedDimensions->{2, Automatic}, Editable->True, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{ "Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.84]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}, Selectable->True]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{ "Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.35]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "Piecewise", DeleteWithContents->True, Editable->False, SelectWithContents->True, Selectable->False]],ExpressionUUID->"3e159f35-d129-433a-81ec-0da2a903fd74"], " \n", StyleBox["Lemma4", FontWeight->"Bold"], "[Law of quadratic reciprocity]: If n and m are odd then ", Cell[BoxData[ RowBox[{"(", FractionBox["m", "n"], ")"}]],ExpressionUUID-> "2d620b01-73bf-46ce-a0a9-b53d8e405d08"], "=", Cell[BoxData[ TagBox[GridBox[{ {"\[Piecewise]", GridBox[{ { RowBox[{"-", RowBox[{"(", FractionBox["n", "m"], ")"}]}], RowBox[{"m", "=", RowBox[{"n", "=", RowBox[{"3", " ", "mod", " ", "4"}]}]}]}, { RowBox[{"(", FractionBox["n", "m"], ")"}], RowBox[{"otherwise", "."}]} }, AllowedDimensions->{2, Automatic}, Editable->True, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{ "Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.84]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}, Selectable->True]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{ "Columns" -> {{Automatic}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.35]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}], "Piecewise", DeleteWithContents->True, Editable->False, SelectWithContents->True, Selectable->False]],ExpressionUUID->"a62c67d9-eebd-4bc5-adf5-938fbcd3861f"], " \n", Cell[BoxData[ RowBox[{ RowBox[{"(", FractionBox["1", "n"], ")"}], "=", "1"}]],ExpressionUUID-> "ea41d247-4ec0-4d52-95dd-44d1dae662dd"], "\n", Cell[BoxData[ RowBox[{ RowBox[{"(", FractionBox["0", "n"], ")"}], "=", "0"}]],ExpressionUUID-> "8a81f396-3770-4b36-b2f0-2949bb63e5af"] }], "Text", CellChangeTimes->{{3.730097776098755*^9, 3.730097807806172*^9}, { 3.730097987229739*^9, 3.730098268165208*^9}, {3.7300989098357487`*^9, 3.7300989219074163`*^9}, {3.730099248180511*^9, 3.730099248739132*^9}, { 3.7301013564004087`*^9, 3.730101399816003*^9}, {3.730101464063517*^9, 3.730101464487709*^9}, {3.7619059676993313`*^9, 3.761905971166597*^9}, { 3.762164168523595*^9, 3.7621641977374163`*^9}, {3.7621642565535517`*^9, 3.762164302090642*^9}, {3.7621645126576643`*^9, 3.7621645180890923`*^9}, { 3.762164557207308*^9, 3.762164565424436*^9}, {3.7621645986364307`*^9, 3.762164599445253*^9}, {3.82687165808081*^9, 3.8268716660195932`*^9}, 3.826878316263706*^9, {3.826878391902482*^9, 3.826878411436922*^9}, { 3.826878467796932*^9, 3.826878473238001*^9}, {3.8274771291697283`*^9, 3.827477139635042*^9}},ExpressionUUID->"3452cd46-f705-4bdf-8c00-\ 18abac406218"], Cell[TextData[{ StyleBox["Exercise", FontWeight->"Bold"], ":", StyleBox[" ", FontWeight->"Bold"], "Implement the Jacobi symbol in polynomial time using the above properties.\n\ \nThe idea m "ab8e7e5c-0277-41ce-8d7a-09df8a2a3010"], ", then we can use Lemma2 and Lemma3 to simplify to (", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["s", "n"], ")"}], TraditionalForm]],ExpressionUUID-> "e9381746-7d6d-4df6-bf55-f4f97ac1dc64"], ", then we apply Lemma4 n>s" }], "Text", CellChangeTimes->{{3.730097776098755*^9, 3.730097807806172*^9}, { 3.730097987229739*^9, 3.730098268165208*^9}, {3.7300989098357487`*^9, 3.7300989219074163`*^9}, {3.730099248180511*^9, 3.730099248739132*^9}, { 3.7301013564004087`*^9, 3.730101399816003*^9}, {3.730101464063517*^9, 3.730101464487709*^9}, {3.7619059676993313`*^9, 3.761905971166597*^9}, { 3.762164168523595*^9, 3.7621641977374163`*^9}, {3.7621642565535517`*^9, 3.762164302090642*^9}, {3.7621645126576643`*^9, 3.7621645180890923`*^9}, { 3.762164557207308*^9, 3.762164565424436*^9}, {3.7621645986364307`*^9, 3.762164599445253*^9}, {3.826878430076355*^9, 3.826878605988756*^9}},ExpressionUUID->"3bdf3a2f-03f4-4673-af03-\ 837bccbc0d3d"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"jacobisymb", "=", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"m", ",", "n"}], "}"}], ",", " ", RowBox[{"(*", RowBox[{ RowBox[{ RowBox[{"a", " ", "assume"}], " ", "|", "m", "|"}], ",", RowBox[{"|", "n", "|", RowBox[{"\[LessEqual]", " ", "\[Eta]"}]}]}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"n", ",", "2"}], "]"}], "\[Equal]", "0"}], ",", RowBox[{"Print", "[", "\"\\"", "]"}], ",", " ", RowBox[{"(*", " ", "quadratic", " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"m", ">", "n"}], ",", "\[IndentingNewLine]", RowBox[{"jacobisymb", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{"m", ",", "n"}], "]"}], ",", "n"}], "]"}], ",", " ", RowBox[{"(*", " ", "quadratic", " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"m", "\[LessEqual]", "1"}], ",", "m", ",", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"m", ",", "2"}], "]"}], "\[Equal]", "0"}], ",", " ", RowBox[{"(*", " ", RowBox[{"m", " ", "is", " ", "even"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"n", ",", "8"}], "]"}], "\[Equal]", "1"}], "||", RowBox[{ RowBox[{"Mod", "[", RowBox[{"n", ",", "8"}], "]"}], "\[Equal]", "7"}]}], ",", RowBox[{"(*", " ", "quadratic", " ", "*)"}], "\[IndentingNewLine]", RowBox[{"jacobisymb", "[", RowBox[{ RowBox[{"m", "/", "2"}], ",", "n"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"-", RowBox[{"jacobisymb", "[", RowBox[{ RowBox[{"m", "/", "2"}], ",", "n"}], "]"}]}]}], "\[IndentingNewLine]", "]"}], ",", " ", RowBox[{"(*", " ", RowBox[{"m", " ", "is", " ", "odd"}], " ", "*)"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{"n", ",", "4"}], "]"}], "\[Equal]", "3"}], " ", "&&", " ", RowBox[{ RowBox[{"Mod", "[", RowBox[{"m", ",", "4"}], "]"}], "\[Equal]", RowBox[{"3", "\[IndentingNewLine]", "-", RowBox[{"jacobisymb", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{"n", ",", "m"}], "]"}], ",", "m"}], "]"}]}]}]}], ",", RowBox[{"(*", " ", "quadratic", " ", "*)"}], "\[IndentingNewLine]", RowBox[{"jacobisymb", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{"n", ",", "m"}], "]"}], ",", "m"}], "]"}]}], " ", RowBox[{"(*", " ", "quadratic", " ", "*)"}], "\[IndentingNewLine]", "]"}]}], "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "]"}]}], ";"}], " ", RowBox[{"(*", " ", RowBox[{ "So", " ", "the", " ", "number", " ", "of", " ", "calls", " ", "is", " ", "O", RowBox[{"(", "\[Eta]", ")"}], " ", "and", " ", "the", " ", "overal", " ", "complexity", " ", "is", " ", RowBox[{"cubic", "."}]}], "*)"}]}]], "Input", CellChangeTimes->{{3.826878608735814*^9, 3.826878926469975*^9}, { 3.826879000243781*^9, 3.82687906739895*^9}, {3.826879116716743*^9, 3.82687917564097*^9}, 3.827477711665518*^9},ExpressionUUID->"0c1a3090-bb77-48e4-980c-\ 8d09454f40ff"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"jacobisymb", "[", RowBox[{"498576945876948576", ",", "2734672637462777"}], "]"}]], "Input", CellChangeTimes->{{3.826878936934494*^9, 3.82687896472409*^9}}, CellLabel->"In[83]:=",ExpressionUUID->"687c1b68-7931-4d17-8c98-33dba62fa729"], Cell[BoxData["0"], "Output", CellChangeTimes->{{3.826878948441559*^9, 3.826878966574745*^9}}, CellLabel->"Out[83]=",ExpressionUUID->"e11e4479-14cd-4b36-ab4f-d4af35985060"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"JacobiSymbol", "[", RowBox[{"498576945876948576", ",", "2734672637462777"}], "]"}]], "Input", CellChangeTimes->{{3.826878951605194*^9, 3.826878969067046*^9}}, CellLabel->"In[84]:=",ExpressionUUID->"9b037b1c-910e-4798-b93f-7722c4cb5546"], Cell[BoxData["0"], "Output", CellChangeTimes->{{3.826878961956551*^9, 3.826878969489154*^9}}, CellLabel->"Out[84]=",ExpressionUUID->"65a6ea01-7b3c-4664-9d8b-6e910b04a0d5"] }, Open ]], Cell[TextData[{ "\n\n", StyleBox["Theorem: ", FontWeight->"Bold"], " Let n be an odd integer, the sets {x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]],ExpressionUUID-> "4d2df8e6-80fc-4e19-ae17-15309842b624"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"fc7c9cd5-8b0d-4228-ba09-37ed1db407d5"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "}"}], " ", "and", " ", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"ec0af388-1e15-48a0-ad0e-90064f4db95d"], " are the same iff n is prime. Moreover, if n is not prime, at least (n-1)/2 \ elements of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"e6fd1d1d-a5f5-41e3-bb2e-5d42c3e1334f"], " are such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "\[NotEqual]"}], TraditionalForm]], ExpressionUUID->"d70454d9-7a91-419e-aece-4e7b4753f491"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], " ", "mod", " ", "n"}], TraditionalForm]],ExpressionUUID->"c47bebdc-a5a8-4c60-97bb-d1d8f82fe7af"], "." }], "Text", CellChangeTimes->{{3.730098280080814*^9, 3.730098313972591*^9}, { 3.730098887164571*^9, 3.7300988990672703`*^9}, {3.730100945304451*^9, 3.730101060287492*^9}, {3.7301012654075403`*^9, 3.730101272618713*^9}, { 3.730101314233925*^9, 3.730101344927367*^9}, 3.762164596454933*^9, { 3.762166435471756*^9, 3.7621664471494427`*^9}, {3.8274781765921307`*^9, 3.827478183568822*^9}},ExpressionUUID->"e95cf6d4-bb2a-4323-8ec9-\ 3c95bdf96572"], Cell[TextData[{ StyleBox["\nGoal:", FontWeight->"Bold"], " Show that |{x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "bc6f554e-e83d-4181-a108-4f5d43f1c474"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "ece9b749-3ba9-4b19-b574-843744d1b480"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "}"}], "|", " ", RowBox[{"\[LessEqual]", " ", FractionBox[ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "2"]}]}], TraditionalForm]], ExpressionUUID->"e8437cc0-25d7-4b58-86aa-2314b3ee3d23"], "\n\n1) We will show that SS(n)=({x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "088b9c02-f030-45c9-aac9-f255d37ccc34"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "9bf1b63c-6f97-42fb-8bdc-d83ecd72a7b6"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"n", "}"}], ",", "\[Cross]"}], ")"}], " ", "is", " ", "a", " ", "subgroup", " ", "of", " ", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"7bc036f1-087b-45f4-8918-573e07f10e96"], "\n2) Then |SS(n)| divides \[Phi](n)\[LessEqual] n-1 (Lagrangia a.k.a. \ Langrange theorem)\n3) When n is not prime there is at least one element x \ such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "\[NotEqual]"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "4e18b5cb-e277-4a97-a86a-ce9f87525297"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "87ba4516-134f-436e-9504-398f0346a012"], " mod ", Cell[BoxData[ FormBox["n", TraditionalForm]],ExpressionUUID-> "9aed37ec-ad9d-46c3-9e43-401b9647a577"], "\n thus, when n is not prime |SS(n)|\[LessEqual] (n-1)/2\n \n", StyleBox["Lemma: ", FontWeight->"Bold"], "The pair SS(n)=({x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "40a0252f-77ff-4d2d-9004-3b31e1297c16"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "fcc3f79b-fd9f-4e69-b9c1-d3c4c2813c6e"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"n", "}"}], ",", "\[Cross]"}], ")"}], " ", "is", " ", "a", " ", "subgroup", " ", "of", " ", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"1c3b0c83-1cdb-436f-9a22-7f562c14a4fd"], ".\n\n", StyleBox["Proof\n", FontWeight->"Bold"], "i)", StyleBox[" ", FontWeight->"Bold"], "1\[Element] SS(n)\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["1", "n"], ")"}], "="}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "5ef07601-f78a-41fd-866c-e1835425469b"], "1=", Cell[BoxData[ FormBox[ SuperscriptBox["1", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "4462c2bb-da6f-4c66-8e7a-1af719a16222"], " mod n\n\nii) x,y \[Element] SS(n) then xy \[Element] SS(n)\n\n", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["x", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "407c1c62-2c97-46b7-b752-97b70878b79a"], " =", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "941116c7-5ce8-4019-bb44-6b69cd0f7ebf"], " mod n and ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["y", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "d00613f0-c926-48c8-94c6-4df21994b564"], " =", Cell[BoxData[ FormBox[ SuperscriptBox["y", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "bac613d9-4656-4343-beb7-8ebed085a782"], " mod n and so\n\n ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["xy", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "55547824-aae7-437a-8e9c-1d812946041c"], "=", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["x", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "47bfedb4-2559-47b3-84ba-3ceb9a4ad965"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["y", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "937a6d95-ebce-4004-98f6-c05b0547ea07"], "=", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", "xy", ")"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "23961350-216a-4085-bf0b-ae8289dfdecf"], " mod n which implies that xy \[Element] SS(n)\n \n iii) x\[Element] SS(n) \ then ", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "1bdaf7ee-cec8-4e48-96a9-cf906b19a59c"], "\[Element] SS(n)\n " }], "Text", CellChangeTimes->{{3.730098280080814*^9, 3.730098313972591*^9}, { 3.730098887164571*^9, 3.7300988990672703`*^9}, {3.730100945304451*^9, 3.730101060287492*^9}, {3.7301012654075403`*^9, 3.730101272618713*^9}, { 3.730101314233925*^9, 3.730101344927367*^9}, {3.730453661655797*^9, 3.730454088715506*^9}, {3.73045424059568*^9, 3.730454314329361*^9}, { 3.730472615364389*^9, 3.7304726286464577`*^9}, {3.7304730005261097`*^9, 3.730473028286953*^9}, {3.730473165469079*^9, 3.7304731907296753`*^9}, { 3.730473262001871*^9, 3.730473274038452*^9}, {3.7304734889172363`*^9, 3.730473897216794*^9}, {3.7304739304998903`*^9, 3.730473978157597*^9}, { 3.7304740246031437`*^9, 3.730474073718113*^9}, {3.730699421820129*^9, 3.730699434331204*^9}, {3.7307000704659033`*^9, 3.730700137029338*^9}, { 3.730717867517593*^9, 3.730717897313905*^9}, {3.7307179997262487`*^9, 3.7307180444027243`*^9}, {3.730718095815284*^9, 3.730718106996443*^9}, { 3.730718181611766*^9, 3.73071823571379*^9}, {3.730718269561252*^9, 3.7307185747411547`*^9}, {3.730718630861117*^9, 3.73071877672499*^9}, { 3.7307188481356277`*^9, 3.730719032538954*^9}, {3.730719086151222*^9, 3.7307191031610727`*^9}, {3.7307191451543016`*^9, 3.73071924249175*^9}, { 3.730719275830867*^9, 3.73071929512351*^9}, {3.73072261051311*^9, 3.730722610895196*^9}, {3.730722686983107*^9, 3.730722697479105*^9}, { 3.730723063752421*^9, 3.730723489998562*^9}, 3.730723562143485*^9, { 3.730723602711122*^9, 3.7307237059948072`*^9}, {3.730723811914316*^9, 3.730723812275568*^9}, {3.730723882887451*^9, 3.7307238884227552`*^9}, { 3.730723962528261*^9, 3.730723968102837*^9}, {3.730743428134062*^9, 3.7307434664599743`*^9}, {3.7307435310806713`*^9, 3.730743720527514*^9}, { 3.73074376514042*^9, 3.730743816853393*^9}, {3.730743851703231*^9, 3.73074385317306*^9}, {3.730743936795527*^9, 3.730743955441655*^9}, { 3.730743986959755*^9, 3.730743988372052*^9}, {3.730744069638027*^9, 3.7307440696391983`*^9}, {3.7307441294832478`*^9, 3.7307441307980833`*^9}, {3.730744207620818*^9, 3.7307446448289223`*^9}, { 3.730744692065959*^9, 3.730745001055625*^9}, {3.730745034598187*^9, 3.730745142952506*^9}, {3.730745237464044*^9, 3.7307453534202337`*^9}, { 3.730745554858809*^9, 3.7307457318670607`*^9}, 3.730745779447076*^9, 3.7307463098104362`*^9, {3.7307463418174047`*^9, 3.7307464978111143`*^9}, { 3.730746609398521*^9, 3.730746616875943*^9}, {3.730746803246716*^9, 3.730746869057675*^9}, {3.731648989333034*^9, 3.731649050935182*^9}, { 3.731650441382354*^9, 3.731650532117535*^9}, {3.731650582909533*^9, 3.7316505863899193`*^9}, {3.731650643061432*^9, 3.7316506489656343`*^9}, { 3.731655952174478*^9, 3.7316560220492268`*^9}, 3.731679840672846*^9, { 3.76190589474361*^9, 3.761905894744766*^9}, {3.762165780701968*^9, 3.762165815116897*^9}, 3.762166429300922*^9, {3.762166665735759*^9, 3.762166666748869*^9}, {3.762166778528432*^9, 3.762167242076942*^9}, { 3.7621672848229322`*^9, 3.7621673476568317`*^9}, {3.762167395057209*^9, 3.762167596401227*^9}, {3.7621676403744583`*^9, 3.762167644307859*^9}, { 3.762168053389967*^9, 3.762168333195463*^9}, {3.762168368182928*^9, 3.7621684634806128`*^9}, {3.762168493621961*^9, 3.762168627496191*^9}, { 3.762168700282529*^9, 3.7621687125947638`*^9}, {3.762168764495247*^9, 3.762168770683442*^9}, {3.7621688163982563`*^9, 3.762169206266201*^9}, { 3.762517123869533*^9, 3.762517125699654*^9}, {3.76251782534822*^9, 3.7625180841728573`*^9}, {3.7625181361821003`*^9, 3.762518142030562*^9}, { 3.826871717496863*^9, 3.826871731351355*^9}, {3.826871778784536*^9, 3.826871793619746*^9}, {3.8268718350834637`*^9, 3.826871883994739*^9}, { 3.826872031431641*^9, 3.826872041639058*^9}, {3.8274783685204077`*^9, 3.8274784499392023`*^9}, {3.827478482250605*^9, 3.8274784868395853`*^9}, { 3.827478528575521*^9, 3.827478715007001*^9}, {3.827478791937669*^9, 3.827478862550686*^9}, {3.827478898347739*^9, 3.82747889857821*^9}, { 3.827478937953767*^9, 3.827479256467585*^9}, {3.827479729702258*^9, 3.8274798134093924`*^9}},ExpressionUUID->"46424d0c-217d-4771-9307-\ 5af2b0703a0b"], Cell[TextData[{ " Assume that ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["x", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "8ff97617-34ce-4dac-ab52-96e96e2efadd"], "=1=", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "5b7440a4-1119-49ef-949d-b9b244c6f7dc"], " mod n. Observe that ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["x", "p"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "5bc5b20d-3b5e-4986-ad3a-6cd1123ea892"], "=", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], "p"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "1e79e101-be34-4c97-8082-9fdeed16a313"], " for all prime number p, since if x is a quadratic residue x=", Cell[BoxData[ FormBox[ SuperscriptBox["y", "2"], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "6765a1dd-45db-4df8-8133-0cfbf8266619"], " mod p then ", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], TraditionalForm]],ExpressionUUID-> "f6477e55-d5ab-4e6d-8049-c893ae58fe96"], "=(", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{ SuperscriptBox["y", RowBox[{"-", "1"}]], ")"}], "2"], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "211a01bd-260f-4dc8-b389-de9a93529061"], " mod p, and the same will happen otherwise. Since the Jacobi symbols is \ computed from the Legendre Symbol it follows ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["x", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "fb2e9d16-af67-4602-af0e-3507944ba7d2"], "=", Cell[BoxData[ RowBox[{"(", FractionBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], "n"], ")"}]], FontWeight->"Plain",ExpressionUUID-> "da067edb-28b7-4688-8257-aaf2fece7d7f"], " for n as well.\n\nthen ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", SuperscriptBox["x", RowBox[{"-", "1"}]], ")"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"cd9ac0a9-49a3-4c9c-a464-5caf32629e5b"], "=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], ")"}], RowBox[{"-", "1"}]], "=", RowBox[{ SuperscriptBox["1", RowBox[{"-", "1"}]], "=", RowBox[{"1", " ", "=", RowBox[{"(", FractionBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], "n"], ")"}]}]}]}], TraditionalForm]], ExpressionUUID->"2f637376-7e03-4d0d-9f04-57e597f176df"], "\n\nThe other case, we have that ", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox["x", "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "0b6e3b51-8a29-4534-b0ae-f23fb0516c49"], "=-1=", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "7e8adf35-a26e-4061-8688-85a8a2cde0ce"], Cell[BoxData[ RowBox[{"=", RowBox[{"(", FractionBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], "n"], ")"}]}]],ExpressionUUID-> "22afd14e-c315-4d98-9645-3caf7d3138ea"], "\n", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", SuperscriptBox["x", RowBox[{"-", "1"}]], ")"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"d366d99c-094b-488a-8dd9-37fda99de03c"], "=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], ")"}], RowBox[{"-", "1"}]], "=", RowBox[{ RowBox[{"-", SuperscriptBox["1", RowBox[{"-", "1"}]]}], "=", RowBox[{ RowBox[{"-", "1"}], " ", "=", RowBox[{"(", FractionBox[ SuperscriptBox["x", RowBox[{"-", "1"}]], "n"], ")"}]}]}]}], TraditionalForm]], ExpressionUUID->"491091f7-22da-4a5f-9f2b-cfa4c7e451e0"], "\n" }], "Text", CellChangeTimes->{{3.730098280080814*^9, 3.730098313972591*^9}, { 3.730098887164571*^9, 3.7300988990672703`*^9}, {3.730100945304451*^9, 3.730101060287492*^9}, {3.7301012654075403`*^9, 3.730101272618713*^9}, { 3.730101314233925*^9, 3.730101344927367*^9}, {3.730453661655797*^9, 3.730454088715506*^9}, {3.73045424059568*^9, 3.730454314329361*^9}, { 3.730472615364389*^9, 3.7304726286464577`*^9}, {3.7304730005261097`*^9, 3.730473028286953*^9}, {3.730473165469079*^9, 3.7304731907296753`*^9}, { 3.730473262001871*^9, 3.730473274038452*^9}, {3.7304734889172363`*^9, 3.730473897216794*^9}, {3.7304739304998903`*^9, 3.730473978157597*^9}, { 3.7304740246031437`*^9, 3.730474073718113*^9}, {3.730699421820129*^9, 3.730699434331204*^9}, {3.7307000704659033`*^9, 3.730700137029338*^9}, { 3.730717867517593*^9, 3.730717897313905*^9}, {3.7307179997262487`*^9, 3.7307180444027243`*^9}, {3.730718095815284*^9, 3.730718106996443*^9}, { 3.730718181611766*^9, 3.73071823571379*^9}, {3.730718269561252*^9, 3.7307185747411547`*^9}, {3.730718630861117*^9, 3.73071877672499*^9}, { 3.7307188481356277`*^9, 3.730719032538954*^9}, {3.730719086151222*^9, 3.7307191031610727`*^9}, {3.7307191451543016`*^9, 3.73071924249175*^9}, { 3.730719275830867*^9, 3.73071929512351*^9}, {3.73072261051311*^9, 3.730722610895196*^9}, {3.730722686983107*^9, 3.730722697479105*^9}, { 3.730723063752421*^9, 3.730723489998562*^9}, 3.730723562143485*^9, { 3.730723602711122*^9, 3.7307237059948072`*^9}, {3.730723811914316*^9, 3.730723812275568*^9}, {3.730723882887451*^9, 3.7307238884227552`*^9}, { 3.730723962528261*^9, 3.730723968102837*^9}, {3.730743428134062*^9, 3.7307434664599743`*^9}, {3.7307435310806713`*^9, 3.730743720527514*^9}, { 3.73074376514042*^9, 3.730743816853393*^9}, {3.730743851703231*^9, 3.73074385317306*^9}, {3.730743936795527*^9, 3.730743955441655*^9}, { 3.730743986959755*^9, 3.730743988372052*^9}, {3.730744069638027*^9, 3.7307440696391983`*^9}, {3.7307441294832478`*^9, 3.7307441307980833`*^9}, {3.730744207620818*^9, 3.7307446448289223`*^9}, { 3.730744692065959*^9, 3.730745001055625*^9}, {3.730745034598187*^9, 3.730745142952506*^9}, {3.730745237464044*^9, 3.7307453534202337`*^9}, { 3.730745554858809*^9, 3.7307457318670607`*^9}, 3.730745779447076*^9, 3.7307463098104362`*^9, {3.7307463418174047`*^9, 3.7307464978111143`*^9}, { 3.730746609398521*^9, 3.730746616875943*^9}, {3.730746803246716*^9, 3.730746869057675*^9}, {3.731648989333034*^9, 3.731649050935182*^9}, { 3.731650441382354*^9, 3.731650532117535*^9}, {3.731650582909533*^9, 3.7316505863899193`*^9}, {3.731650643061432*^9, 3.7316506489656343`*^9}, { 3.731655952174478*^9, 3.7316560220492268`*^9}, 3.731679840672846*^9, { 3.76190589474361*^9, 3.761905894744766*^9}, {3.762165780701968*^9, 3.762165815116897*^9}, 3.762166429300922*^9, {3.762166665735759*^9, 3.762166666748869*^9}, {3.762166778528432*^9, 3.762167242076942*^9}, { 3.7621672848229322`*^9, 3.7621673476568317`*^9}, {3.762167395057209*^9, 3.762167596401227*^9}, {3.7621676403744583`*^9, 3.762167644307859*^9}, { 3.762168053389967*^9, 3.762168333195463*^9}, {3.762168368182928*^9, 3.7621684634806128`*^9}, {3.762168493621961*^9, 3.762168627496191*^9}, { 3.762168700282529*^9, 3.7621687125947638`*^9}, {3.762168764495247*^9, 3.762168770683442*^9}, {3.7621688163982563`*^9, 3.762169206266201*^9}, { 3.762517123869533*^9, 3.762517125699654*^9}, {3.76251782534822*^9, 3.7625180841728573`*^9}, {3.7625181361821003`*^9, 3.762518142030562*^9}, { 3.826871717496863*^9, 3.826871731351355*^9}, {3.826871778784536*^9, 3.826871793619746*^9}, {3.8268718350834637`*^9, 3.826871883994739*^9}, { 3.826872031431641*^9, 3.826872041639058*^9}, {3.8274783685204077`*^9, 3.8274784499392023`*^9}, {3.827478482250605*^9, 3.8274784868395853`*^9}, { 3.827478528575521*^9, 3.827478715007001*^9}, {3.827478791937669*^9, 3.827478862550686*^9}, {3.827478898347739*^9, 3.82747889857821*^9}, { 3.827478937953767*^9, 3.8274795830399027`*^9}},ExpressionUUID->"8348ff72-9092-43c7-b6be-\ deb9265da026"], Cell[TextData[{ "Then Then |SS(n)| divides \[Phi](n)\[LessEqual] n-1\n\nWe just need to \ find an element x such that x\[NotElement] SS(n) when n is odd but not a \ prime. The next lemmas will provide an x\[NotElement] SS(n).\n\n", StyleBox["Lemma: ", FontWeight->"Bold"], "If n is of the form ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "=", RowBox[{ SuperscriptBox["p", "k"], "m"}]}], ",", " ", RowBox[{ RowBox[{"with", " ", RowBox[{"gcd", "(", RowBox[{"p", ",", "m"}], ")"}]}], "=", "1"}], ",", " ", RowBox[{ RowBox[{"and", " ", "k"}], ">", RowBox[{"1", " ", "then", " "}]}]}], TraditionalForm]],ExpressionUUID-> "9f99f806-b35c-4eba-955f-2ea48403276c"], "\n {x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "c93a0a3e-fb64-4702-a190-2d55223046d9"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "0ec3b461-189e-47ac-871f-8477fbfdfec4"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "}"}], " ", "\[NotEqual]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"aeb7b791-f462-4534-941c-e7549169936e"], ".\n ", StyleBox["Proof:", FontWeight->"Bold"], " \n Consider the candidate x=1+", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], TraditionalForm]],ExpressionUUID-> "276f33d3-709a-46e8-8953-39dd58ca3da9"], "\n \n ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}]}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"7b1e6199-55a0-4898-8b8f-5e81258a3400"], "mod n\n \n (b+a", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[")", "n"], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ RowBox[{"(", GridBox[{ {"n"}, {"i"} }], ")"}], " ", SuperscriptBox["a", "i"], SuperscriptBox["b", RowBox[{"n", "-", "i"}]]}]}]}], TraditionalForm]],ExpressionUUID-> "63d87089-b7b0-4ec1-b153-7e3c966f6079"], "\n \n ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}]}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"1b1e36d5-daa4-4955-8835-7687df6357a8"], Cell[BoxData[ RowBox[{"=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], RowBox[{ RowBox[{"(", GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]}, {"i"} }], ")"}], " ", SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}], "i"]}]}]}]],ExpressionUUID-> "31422698-086b-4364-8e16-9e5dfa78d706"], "mod n \n \n notice that for i\[GreaterEqual]2 ", Cell[BoxData[ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}], "i"]],ExpressionUUID-> "caa5d9b8-1bb6-423b-bfd7-de2f686dceea"], " is a multiple of n and so\n \n ", Cell[BoxData[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], RowBox[{ RowBox[{"(", GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]}, {"i"} }], ")"}], " ", SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}], "i"]}]}]],ExpressionUUID-> "35037510-c130-485f-ae33-75d9ea3666ea"], "mod n =1+", Cell[BoxData[ RowBox[{ RowBox[{"(", GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]}, {"1"} }], ")"}], " ", RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}]}]],ExpressionUUID-> "70385168-7d47-4735-93d0-d3c80b4188ee"], " mod n=\n 1+", Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}]}]],ExpressionUUID-> "8226751e-3385-4e32-b0ce-acffafeb7a2f"], " mod n \n \n Observe that this number cannot be 1 or -1, otherwise we would \ have\n \n1=( 1+", Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}], RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}]}]],ExpressionUUID-> "335e3497-1617-4938-beab-8a09ef5b660f"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[")", "2"], "=", RowBox[{"1", "+", RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}]}]}], TraditionalForm]],ExpressionUUID-> "7140d153-8db1-414d-9cf3-bb3eda31c656"], Cell[BoxData[ RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}]],ExpressionUUID-> "e670e1da-032e-4773-9e46-27801e209481"], " mod n= 1-", Cell[BoxData[ RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}]],ExpressionUUID-> "0c3274c3-a8ec-486f-b3fe-e0ab3c4a91ed"], " mod n\n\nand so ", Cell[BoxData[ RowBox[{"0", "=", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}], ")"}], " ", "mod", " ", "n"}]}]], ExpressionUUID->"47d808e1-29ae-4c59-a864-66ea8b7dda35"], " which cannot be as n=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["p", "k"], "m"}], TraditionalForm]],ExpressionUUID-> "afd08158-a672-44df-90ef-80de3f5526a3"], " and so \n\n ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}]}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], "mod", " ", "n"}], TraditionalForm]],ExpressionUUID->"1367b199-a70a-49ef-93aa-fee036a444da"], "\[NotEqual]", Cell[BoxData[ FormBox[ RowBox[{"(", FractionBox[ RowBox[{"1", "+", RowBox[{ SuperscriptBox["p", RowBox[{"k", "-", "1"}]], "m"}]}], "n"], ")"}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "302efe75-4b9b-4c90-8f57-6b581404c7f0"], ".\n \n (A side note joke)\np|", Cell[BoxData[ RowBox[{"(", GridBox[{ {"p"}, {"i"} }], ")"}]],ExpressionUUID->"4a9f7c82-6919-4727-9124-3c713d807c52"], "\n \n (a+b", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[")", "p"], "="}], TraditionalForm]],ExpressionUUID-> "bb66acb4-2b15-4bdf-88a7-39d4fd422b91"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "p"], "+", RowBox[{ SuperscriptBox["b", "p"], " ", "mod", " ", "p", " "}]}], TraditionalForm]],ExpressionUUID->"c92bd369-cb5d-4a95-83f8-9a674b99cddd"], " (Freshman theorem)!\n " }], "Text", CellChangeTimes->{{3.730098280080814*^9, 3.730098313972591*^9}, { 3.730098887164571*^9, 3.7300988990672703`*^9}, {3.730100945304451*^9, 3.730101060287492*^9}, {3.7301012654075403`*^9, 3.730101272618713*^9}, { 3.730101314233925*^9, 3.730101344927367*^9}, {3.730453661655797*^9, 3.730454088715506*^9}, {3.73045424059568*^9, 3.730454314329361*^9}, { 3.730472615364389*^9, 3.7304726286464577`*^9}, {3.7304730005261097`*^9, 3.730473028286953*^9}, {3.730473165469079*^9, 3.7304731907296753`*^9}, { 3.730473262001871*^9, 3.730473274038452*^9}, {3.7304734889172363`*^9, 3.730473897216794*^9}, {3.7304739304998903`*^9, 3.730473978157597*^9}, { 3.7304740246031437`*^9, 3.730474073718113*^9}, {3.730699421820129*^9, 3.730699434331204*^9}, {3.7307000704659033`*^9, 3.730700137029338*^9}, { 3.730717867517593*^9, 3.730717897313905*^9}, {3.7307179997262487`*^9, 3.7307180444027243`*^9}, {3.730718095815284*^9, 3.730718106996443*^9}, { 3.730718181611766*^9, 3.73071823571379*^9}, {3.730718269561252*^9, 3.7307185747411547`*^9}, {3.730718630861117*^9, 3.73071877672499*^9}, { 3.7307188481356277`*^9, 3.730719032538954*^9}, {3.730719086151222*^9, 3.7307191031610727`*^9}, {3.7307191451543016`*^9, 3.73071924249175*^9}, { 3.730719275830867*^9, 3.73071929512351*^9}, {3.73072261051311*^9, 3.730722610895196*^9}, {3.730722686983107*^9, 3.730722697479105*^9}, { 3.730723063752421*^9, 3.730723489998562*^9}, 3.730723562143485*^9, { 3.730723602711122*^9, 3.7307237059948072`*^9}, {3.730723811914316*^9, 3.730723812275568*^9}, {3.730723882887451*^9, 3.7307238884227552`*^9}, { 3.730723962528261*^9, 3.730723968102837*^9}, {3.730743428134062*^9, 3.7307434664599743`*^9}, {3.7307435310806713`*^9, 3.730743720527514*^9}, { 3.73074376514042*^9, 3.730743816853393*^9}, {3.730743851703231*^9, 3.73074385317306*^9}, {3.730743936795527*^9, 3.730743955441655*^9}, { 3.730743986959755*^9, 3.730743988372052*^9}, {3.730744069638027*^9, 3.7307440696391983`*^9}, {3.7307441294832478`*^9, 3.7307441307980833`*^9}, {3.730744207620818*^9, 3.7307446448289223`*^9}, { 3.730744692065959*^9, 3.730745001055625*^9}, {3.730745034598187*^9, 3.730745142952506*^9}, {3.730745237464044*^9, 3.7307453534202337`*^9}, { 3.730745554858809*^9, 3.7307457318670607`*^9}, 3.730745779447076*^9, 3.7307463098104362`*^9, {3.7307463418174047`*^9, 3.7307464978111143`*^9}, { 3.730746609398521*^9, 3.730746616875943*^9}, {3.730746803246716*^9, 3.730746869057675*^9}, {3.731648989333034*^9, 3.731649050935182*^9}, { 3.731650441382354*^9, 3.731650532117535*^9}, {3.731650582909533*^9, 3.7316505863899193`*^9}, {3.731650643061432*^9, 3.7316506489656343`*^9}, { 3.731655952174478*^9, 3.7316560220492268`*^9}, 3.731679840672846*^9, { 3.76190589474361*^9, 3.761905894744766*^9}, {3.762165780701968*^9, 3.762165815116897*^9}, 3.762166429300922*^9, {3.762166665735759*^9, 3.762166666748869*^9}, {3.762166778528432*^9, 3.762167242076942*^9}, { 3.7621672848229322`*^9, 3.7621673476568317`*^9}, {3.762167395057209*^9, 3.762167596401227*^9}, {3.7621676403744583`*^9, 3.762167644307859*^9}, { 3.762168053389967*^9, 3.762168333195463*^9}, {3.762168368182928*^9, 3.7621684634806128`*^9}, {3.762168493621961*^9, 3.762168627496191*^9}, { 3.762168700282529*^9, 3.7621687125947638`*^9}, {3.762168764495247*^9, 3.762168770683442*^9}, {3.7621688163982563`*^9, 3.762169206266201*^9}, { 3.762517123869533*^9, 3.762517125699654*^9}, {3.76251782534822*^9, 3.7625180841728573`*^9}, {3.7625181361821003`*^9, 3.762518142030562*^9}, { 3.826871717496863*^9, 3.826871731351355*^9}, {3.826871778784536*^9, 3.826871793619746*^9}, {3.8268718350834637`*^9, 3.826871883994739*^9}, { 3.826872031431641*^9, 3.826872041639058*^9}, {3.8274783685204077`*^9, 3.8274784499392023`*^9}, {3.827478482250605*^9, 3.8274784868395853`*^9}, { 3.827478528575521*^9, 3.827478715007001*^9}, {3.827478791937669*^9, 3.827478862550686*^9}, {3.827478898347739*^9, 3.82747889857821*^9}, { 3.827478937953767*^9, 3.827479242327297*^9}, {3.827479624187523*^9, 3.827479708254094*^9}, 3.827479835786558*^9, {3.827479866597816*^9, 3.82748004150036*^9}, {3.827480220624823*^9, 3.827480311051649*^9}, { 3.827480363948483*^9, 3.827480682220841*^9}, {3.827480715415736*^9, 3.827480792348997*^9}, {3.827480852926208*^9, 3.827480856592312*^9}, { 3.8274809345845222`*^9, 3.827481123290882*^9}, 3.827481179971355*^9},ExpressionUUID->"79e684cf-84b4-4b5c-945b-\ 53cf4b880d4f"], Cell[TextData[{ "It remains to consider the case where n is powerfree \n\n", StyleBox["Lemma: ", FontWeight->"Bold"], "If n is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "=", RowBox[{"p", " ", "r"}]}], ",", " ", RowBox[{ RowBox[{"with", " ", RowBox[{"gcd", "(", RowBox[{"p", ",", "r"}], ")"}]}], "=", "1"}], ",", " ", RowBox[{ RowBox[{"p", " ", "prime", " ", "and", " ", "r"}], ">", RowBox[{"1", " ", "odd", " ", RowBox[{"(", RowBox[{"and", " ", "square", " ", "free"}], ")"}], " ", "then", " "}]}]}], TraditionalForm]],ExpressionUUID-> "65abfdb8-c96d-4223-831c-e4004643c890"], "\n {x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "db96b61c-aef5-42d5-8b7b-fded3be4847a"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "0e8cc1b5-d4d5-4102-b991-f60af46ce06a"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "}"}], " ", "\[NotEqual]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"366bd8e0-a248-410e-a68b-d1d8b3a29eeb"], ".\n ", StyleBox["Proof:", FontWeight->"Bold"], " " }], "Text", CellChangeTimes->{{3.730098280080814*^9, 3.730098313972591*^9}, { 3.730098887164571*^9, 3.7300988990672703`*^9}, {3.730100945304451*^9, 3.730101060287492*^9}, {3.7301012654075403`*^9, 3.730101272618713*^9}, { 3.730101314233925*^9, 3.730101344927367*^9}, {3.730453661655797*^9, 3.730454088715506*^9}, {3.73045424059568*^9, 3.730454314329361*^9}, { 3.730472615364389*^9, 3.7304726286464577`*^9}, {3.7304730005261097`*^9, 3.730473028286953*^9}, {3.730473165469079*^9, 3.7304731907296753`*^9}, { 3.730473262001871*^9, 3.730473274038452*^9}, {3.7304734889172363`*^9, 3.730473897216794*^9}, {3.7304739304998903`*^9, 3.730473978157597*^9}, { 3.7304740246031437`*^9, 3.730474073718113*^9}, {3.730699421820129*^9, 3.730699434331204*^9}, {3.7307000704659033`*^9, 3.730700137029338*^9}, { 3.730717867517593*^9, 3.730717897313905*^9}, {3.7307179997262487`*^9, 3.7307180444027243`*^9}, {3.730718095815284*^9, 3.730718106996443*^9}, { 3.730718181611766*^9, 3.73071823571379*^9}, {3.730718269561252*^9, 3.7307185747411547`*^9}, {3.730718630861117*^9, 3.73071877672499*^9}, { 3.7307188481356277`*^9, 3.730719032538954*^9}, {3.730719086151222*^9, 3.7307191031610727`*^9}, {3.7307191451543016`*^9, 3.73071924249175*^9}, { 3.730719275830867*^9, 3.73071929512351*^9}, {3.73072261051311*^9, 3.730722610895196*^9}, {3.730722686983107*^9, 3.730722697479105*^9}, { 3.730723063752421*^9, 3.730723489998562*^9}, 3.730723562143485*^9, { 3.730723602711122*^9, 3.7307237059948072`*^9}, {3.730723811914316*^9, 3.730723812275568*^9}, {3.730723882887451*^9, 3.7307238884227552`*^9}, { 3.730723962528261*^9, 3.730723968102837*^9}, {3.730743428134062*^9, 3.7307434664599743`*^9}, {3.7307435310806713`*^9, 3.730743720527514*^9}, { 3.73074376514042*^9, 3.730743816853393*^9}, {3.730743851703231*^9, 3.73074385317306*^9}, {3.730743936795527*^9, 3.730743955441655*^9}, { 3.730743986959755*^9, 3.730743988372052*^9}, {3.730744069638027*^9, 3.7307440696391983`*^9}, {3.7307441294832478`*^9, 3.7307441307980833`*^9}, {3.730744207620818*^9, 3.7307446448289223`*^9}, { 3.730744692065959*^9, 3.730745001055625*^9}, {3.730745034598187*^9, 3.730745142952506*^9}, {3.730745237464044*^9, 3.7307453534202337`*^9}, { 3.730745554858809*^9, 3.7307457318670607`*^9}, 3.730745779447076*^9, 3.7307463098104362`*^9, {3.7307463418174047`*^9, 3.7307464978111143`*^9}, { 3.730746609398521*^9, 3.730746616875943*^9}, {3.730746803246716*^9, 3.730746869057675*^9}, {3.731648989333034*^9, 3.731649050935182*^9}, { 3.731650441382354*^9, 3.731650532117535*^9}, {3.731650582909533*^9, 3.7316505863899193`*^9}, {3.731650643061432*^9, 3.7316506489656343`*^9}, { 3.731655952174478*^9, 3.7316560220492268`*^9}, 3.731679840672846*^9, { 3.76190589474361*^9, 3.761905894744766*^9}, {3.762165780701968*^9, 3.762165815116897*^9}, 3.762166429300922*^9, {3.762166665735759*^9, 3.762166666748869*^9}, {3.762166778528432*^9, 3.762167242076942*^9}, { 3.7621672848229322`*^9, 3.7621673476568317`*^9}, {3.762167395057209*^9, 3.762167596401227*^9}, {3.7621676403744583`*^9, 3.762167644307859*^9}, { 3.762168053389967*^9, 3.762168333195463*^9}, {3.762168368182928*^9, 3.7621684634806128`*^9}, {3.762168493621961*^9, 3.762168627496191*^9}, { 3.762168700282529*^9, 3.7621687125947638`*^9}, {3.762168764495247*^9, 3.762168770683442*^9}, {3.7621688163982563`*^9, 3.762169206266201*^9}, { 3.762517123869533*^9, 3.762517125699654*^9}, {3.76251782534822*^9, 3.7625180841728573`*^9}, {3.7625181361821003`*^9, 3.762518142030562*^9}, { 3.826871717496863*^9, 3.826871731351355*^9}, {3.826871778784536*^9, 3.826871793619746*^9}, {3.8268718350834637`*^9, 3.826871883994739*^9}, { 3.826872031431641*^9, 3.826872041639058*^9}, {3.8274783685204077`*^9, 3.8274784499392023`*^9}, {3.827478482250605*^9, 3.8274784868395853`*^9}, { 3.827478528575521*^9, 3.827478715007001*^9}, {3.827478791937669*^9, 3.827478862550686*^9}, {3.827478898347739*^9, 3.82747889857821*^9}, { 3.827478937953767*^9, 3.827479242327297*^9}, {3.827479624187523*^9, 3.827479708254094*^9}, 3.827479835786558*^9, {3.827479866597816*^9, 3.82748004150036*^9}, {3.827480220624823*^9, 3.827480311051649*^9}, { 3.827480363948483*^9, 3.827480682220841*^9}, {3.827480715415736*^9, 3.827480792348997*^9}, {3.827480852926208*^9, 3.827480856592312*^9}, { 3.8274809345845222`*^9, 3.827481123290882*^9}, {3.827481184042129*^9, 3.827481196184445*^9}},ExpressionUUID->"6cd1e15e-92f7-408e-a049-\ 2c16a4a8ec1f"], Cell[TextData[{ "In this case we know that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], "\[TildeEqual]"}], TraditionalForm]],ExpressionUUID->"0db85d77-1a06-4b9f-aaf9-7dfc86cf1336"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]", SubscriptBox["\[DoubleStruckCapitalZ]", "r"]}], TraditionalForm]], ExpressionUUID->"3c5b7866-c37e-47a4-b363-e1cb212e91af"], " h:", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"2920d427-0fb0-475e-bf5a-4d6a0e0f2d94"], "\[RightArrow]", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]", SubscriptBox["\[DoubleStruckCapitalZ]", "r"]}], TraditionalForm]], ExpressionUUID->"1bedf271-4cf8-4945-b4f4-cf49f46a03b0"], "\n\nConsider a non-quadratic residue mod p (note that ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "\[Cross]"], TraditionalForm]],ExpressionUUID->"caa79407-400d-4f4f-922b-e87d6c274ec3"], " is cyclic and so it has generator \[Alpha], and odd powers of the \ generator are non-quadratic residues), say s, and 1 mod r\n\nTake x=h(s,1)\n\n\ ", Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "45e93539-85f7-4c4f-ba48-8b8de2354d4b"], " mod n we can work on ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], "\[Cross]", SubscriptBox["\[DoubleStruckCapitalZ]", "r"]}], TraditionalForm]], ExpressionUUID->"2197671a-88ef-4c0a-825e-c2b14a10d575"], " , so we have (", Cell[BoxData[ FormBox[ SuperscriptBox["s", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "c486c9e3-bd83-40c7-aa21-fd17ff8c43eb"], ",1)=(", Cell[BoxData[ FormBox[ SuperscriptBox["s", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], FontWeight->"Plain",ExpressionUUID-> "25028b2f-8fb9-4d09-9829-213b11fc8c2d"], ",1)=(-1,1) and so this is non-trivial root of 1 mod n, and therefore it is \ differente from 1 and -1 again and so\nx\[NotElement] SS(n)\n \n\n\n", StyleBox["Theorem: ", FontWeight->"Bold"], " Let n be an odd integer, the sets {x: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "="}], TraditionalForm]],ExpressionUUID-> "640f77c9-e1ed-4986-b02b-a22bfc9988d8"], Cell[BoxData[ FormBox[ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]], ExpressionUUID->"100a418a-08e7-4a48-b591-35b27a5f1c0a"], " mod ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "}"}], " ", "and", " ", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "n", "\[Cross]"]}], TraditionalForm]],ExpressionUUID->"88d7a9bb-8d7f-41df-b5bc-43de1eb3b199"], " are the same iff n is prime. Moreover, if n is not prime, at least (n-1)/2 \ elements of ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"bc529d03-7377-4d9b-9a30-80e0e17a810b"], " are such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", FractionBox["x", "n"], ")"}], "\[NotEqual]"}], TraditionalForm]], ExpressionUUID->"44095db5-ba77-493f-90fd-9bc4ecc26c21"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}]], " ", "mod", " ", "n"}], TraditionalForm]],ExpressionUUID->"883a3c8b-b691-446d-a152-09c560819bf3"], ".\n\n\n", StyleBox["Exercise", FontWeight->"Bold"], ". Use the above result to produce a ", StyleBox["Monte-Carlo", FontWeight->"Bold"], " polynomial-time algorithm to test primality. (BPP)" }], "Text", CellChangeTimes->{{3.730098280080814*^9, 3.730098313972591*^9}, { 3.730098887164571*^9, 3.7300988990672703`*^9}, {3.730100945304451*^9, 3.730101060287492*^9}, {3.7301012654075403`*^9, 3.730101272618713*^9}, { 3.730101314233925*^9, 3.730101344927367*^9}, {3.730453661655797*^9, 3.730454088715506*^9}, {3.73045424059568*^9, 3.730454314329361*^9}, { 3.730472615364389*^9, 3.7304726286464577`*^9}, {3.7304730005261097`*^9, 3.730473028286953*^9}, {3.730473165469079*^9, 3.7304731907296753`*^9}, { 3.730473262001871*^9, 3.730473274038452*^9}, {3.7304734889172363`*^9, 3.730473897216794*^9}, {3.7304739304998903`*^9, 3.730473978157597*^9}, { 3.7304740246031437`*^9, 3.730474073718113*^9}, {3.730699421820129*^9, 3.730699434331204*^9}, {3.7307000704659033`*^9, 3.730700137029338*^9}, { 3.730717867517593*^9, 3.730717897313905*^9}, {3.7307179997262487`*^9, 3.7307180444027243`*^9}, {3.730718095815284*^9, 3.730718106996443*^9}, { 3.730718181611766*^9, 3.73071823571379*^9}, {3.730718269561252*^9, 3.7307185747411547`*^9}, {3.730718630861117*^9, 3.73071877672499*^9}, { 3.7307188481356277`*^9, 3.730719032538954*^9}, {3.730719086151222*^9, 3.7307191031610727`*^9}, {3.7307191451543016`*^9, 3.73071924249175*^9}, { 3.730719275830867*^9, 3.73071929512351*^9}, {3.73072261051311*^9, 3.730722610895196*^9}, {3.730722686983107*^9, 3.730722697479105*^9}, { 3.730723063752421*^9, 3.730723489998562*^9}, 3.730723562143485*^9, { 3.730723602711122*^9, 3.7307237059948072`*^9}, {3.730723811914316*^9, 3.730723812275568*^9}, {3.730723882887451*^9, 3.7307238884227552`*^9}, { 3.730723962528261*^9, 3.730723968102837*^9}, {3.730743428134062*^9, 3.7307434664599743`*^9}, {3.7307435310806713`*^9, 3.730743720527514*^9}, { 3.73074376514042*^9, 3.730743816853393*^9}, {3.730743851703231*^9, 3.73074385317306*^9}, {3.730743936795527*^9, 3.730743955441655*^9}, { 3.730743986959755*^9, 3.730743988372052*^9}, {3.730744069638027*^9, 3.7307440696391983`*^9}, {3.7307441294832478`*^9, 3.7307441307980833`*^9}, {3.730744207620818*^9, 3.7307446448289223`*^9}, { 3.730744692065959*^9, 3.730745001055625*^9}, {3.730745034598187*^9, 3.730745142952506*^9}, {3.730745237464044*^9, 3.7307453534202337`*^9}, { 3.730745554858809*^9, 3.7307457318670607`*^9}, 3.730745779447076*^9, 3.7307463098104362`*^9, {3.7307463418174047`*^9, 3.7307464978111143`*^9}, { 3.730746609398521*^9, 3.730746616875943*^9}, {3.730746803246716*^9, 3.730746869057675*^9}, {3.731648989333034*^9, 3.731649050935182*^9}, { 3.731650441382354*^9, 3.731650532117535*^9}, {3.731650582909533*^9, 3.7316505863899193`*^9}, {3.731650643061432*^9, 3.7316506489656343`*^9}, { 3.731655952174478*^9, 3.7316560220492268`*^9}, 3.731679840672846*^9, { 3.76190589474361*^9, 3.761905894744766*^9}, {3.762165780701968*^9, 3.762165815116897*^9}, 3.762166429300922*^9, {3.762166665735759*^9, 3.762166666748869*^9}, {3.762166778528432*^9, 3.762167242076942*^9}, { 3.7621672848229322`*^9, 3.7621673476568317`*^9}, {3.762167395057209*^9, 3.762167596401227*^9}, {3.7621676403744583`*^9, 3.762167644307859*^9}, { 3.762168053389967*^9, 3.762168333195463*^9}, {3.762168368182928*^9, 3.7621684634806128`*^9}, {3.762168493621961*^9, 3.762168627496191*^9}, { 3.762168700282529*^9, 3.7621687125947638`*^9}, {3.762168764495247*^9, 3.762168770683442*^9}, {3.7621688163982563`*^9, 3.762169206266201*^9}, { 3.762517123869533*^9, 3.762517125699654*^9}, {3.76251782534822*^9, 3.7625180841728573`*^9}, {3.7625181361821003`*^9, 3.762518142030562*^9}, { 3.826871717496863*^9, 3.826871731351355*^9}, {3.826871778784536*^9, 3.826871793619746*^9}, {3.8268718350834637`*^9, 3.826871883994739*^9}, { 3.826872031431641*^9, 3.826872041639058*^9}, {3.8274783685204077`*^9, 3.8274784499392023`*^9}, {3.827478482250605*^9, 3.8274784868395853`*^9}, { 3.827478528575521*^9, 3.827478715007001*^9}, {3.827478791937669*^9, 3.827478862550686*^9}, {3.827478898347739*^9, 3.82747889857821*^9}, { 3.827478937953767*^9, 3.827479242327297*^9}, {3.827479624187523*^9, 3.827479708254094*^9}, 3.827479835786558*^9, {3.827479866597816*^9, 3.82748004150036*^9}, {3.827480220624823*^9, 3.827480311051649*^9}, { 3.827480363948483*^9, 3.827480682220841*^9}, {3.827480715415736*^9, 3.827480792348997*^9}, {3.827480852926208*^9, 3.827480856592312*^9}, { 3.8274809345845222`*^9, 3.827481123290882*^9}, {3.8274812088153973`*^9, 3.827481403248149*^9}, {3.827481436937585*^9, 3.827481528193301*^9}, { 3.82748178405649*^9, 3.827481785707685*^9}},ExpressionUUID->"b3fdb2ea-24e2-4e1f-a69b-\ b3ea41599c9c"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"SS", "=", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"n", ",", "t"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"b", ",", "i", ",", "x"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"b", "=", "True"}], ";", RowBox[{"i", "=", "1"}], ";", "\[IndentingNewLine]", RowBox[{"While", "[", RowBox[{ RowBox[{"b", " ", "&&", " ", RowBox[{"i", "\[LessEqual]", "t"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"2", ",", RowBox[{"n", "-", "2"}]}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"GCD", "[", RowBox[{"x", ",", "n"}], "]"}], "\[NotEqual]", "1"}], ",", RowBox[{"b", "=", "False"}], ",", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"JacobiSymbol", "[", RowBox[{"x", ",", "n"}], "]"}], ",", "n"}], "]"}], "\[NotEqual]", " ", RowBox[{"PowerMod", "[", RowBox[{"x", ",", RowBox[{ RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}], "/", "2"}], ",", "n"}], "]"}]}], ",", RowBox[{"b", "=", "False"}]}], "]"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"i", "++"}]}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", "b"}]}], "\[IndentingNewLine]", "]"}]}], "]"}]}], ";"}], "\[IndentingNewLine]"}]], "Input", CellChangeTimes->{{3.7625181430668592`*^9, 3.762518303768433*^9}, { 3.7625183343440733`*^9, 3.762518411139657*^9}, {3.762518471533469*^9, 3.762518476353162*^9}, {3.762518515718575*^9, 3.762518697379774*^9}, { 3.762518737282392*^9, 3.762518753133559*^9}, 3.826872062686605*^9, { 3.8274815359841337`*^9, 3.8274817471923933`*^9}, {3.8274818551048393`*^9, 3.8274818602405*^9}, {3.8274819178553057`*^9, 3.827481945378528*^9}},ExpressionUUID->"c9e5d8c6-f931-4d0b-878c-\ 49fc4fd3ed25"], Cell["\<\ The complexity of each test is cubic because of the JacobiSymbol!\ \>", "Text", CellChangeTimes->{{3.827481946933878*^9, 3.827481961863203*^9}},ExpressionUUID->"9b15fd4f-74f7-41ae-9c90-\ d9b8e5315e73"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"SS", "[", RowBox[{"97011687213", ",", "1000"}], "]"}]], "Input", CellChangeTimes->{{3.827481794431263*^9, 3.827481806542006*^9}, { 3.827481837743718*^9, 3.827481848258202*^9}}, CellLabel->"In[16]:=",ExpressionUUID->"5609280d-938c-4fc2-a3d7-0beb99f279f0"], Cell[BoxData["False"], "Output", CellChangeTimes->{{3.827481796534384*^9, 3.827481806923402*^9}, { 3.827481838305846*^9, 3.8274818488147297`*^9}}, CellLabel->"Out[16]=",ExpressionUUID->"1f94b94d-a9c8-4115-ba19-59b8323a7c20"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Prime", "[", "4000000000", "]"}]], "Input", CellChangeTimes->{{3.827481815261086*^9, 3.8274818311493397`*^9}}, CellLabel->"In[12]:=",ExpressionUUID->"970146ab-1040-4262-bcb1-cb8295bd4d52"], Cell[BoxData["97011687217"], "Output", CellChangeTimes->{{3.8274818213334503`*^9, 3.8274818338073883`*^9}}, CellLabel->"Out[12]=",ExpressionUUID->"e19ff616-4b88-4baf-a1ce-3df113f8abed"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"121348950495803948530985734987534534217133337", ",", RowBox[{"2", "*", "121348950495803948530985734987534534217133337"}]}], "}"}]}], "]"}]}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"EvenQ", "[", "x", "]"}], ",", RowBox[{"x", "++"}]}], "]"}], "\[IndentingNewLine]", RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"SS", "[", "x", "]"}], "\[NotEqual]", "True"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"121348950495803948530985734987534534217133337", ",", RowBox[{ "2", "*", "121348950495803948530985734987534534217133337"}]}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"EvenQ", "[", "x", "]"}], ",", RowBox[{"x", "++"}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}], "\[IndentingNewLine]", "\[IndentingNewLine]"}]}]], "Input", CellChangeTimes->{{3.7625181430668592`*^9, 3.762518303768433*^9}, { 3.7625183343440733`*^9, 3.762518411139657*^9}, {3.762518471533469*^9, 3.762518476353162*^9}, {3.762518515718575*^9, 3.762518697379774*^9}, { 3.762518737282392*^9, 3.762518753133559*^9}, 3.826872062686605*^9, { 3.8274815359841337`*^9, 3.8274815805628567`*^9}},ExpressionUUID->"ffb33b18-fe3b-44a5-a937-\ 97c0d3b8917f"], Cell[BoxData["182146606936967962790608208443438491738284892"], "Output", CellChangeTimes->{ 3.762518754008688*^9},ExpressionUUID->"b0af64a5-8fe8-479d-ab91-\ 45643221a05c"], Cell[BoxData["182146606936967962790608208443438491738284892"], "Output", CellChangeTimes->{ 3.762518754012726*^9},ExpressionUUID->"ca389d55-f64e-492b-9407-\ 4b1aa349f6ae"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["x"], "Input", CellChangeTimes->{ 3.762518709961076*^9},ExpressionUUID->"08e7fd02-0a25-4971-a5c0-\ b537b287dc6b"], Cell[BoxData["212405043499965463530200922709165586696326787"], "Output", CellChangeTimes->{ 3.762518411547669*^9, {3.762518509346302*^9, 3.762518580257839*^9}, { 3.7625187066238613`*^9, 3.762518710601968*^9}, 3.762518758413578*^9},ExpressionUUID->"e8d0ba1b-c666-4487-8b38-\ ebb0360588a9"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PrimeQ", "[", "x", "]"}]], "Input", CellChangeTimes->{{3.762518542001034*^9, 3.762518545374215*^9}, 3.762518717255783*^9},ExpressionUUID->"31197457-33bd-4615-b840-\ 46b238e7a5d5"], Cell[BoxData["True"], "Output", CellChangeTimes->{3.762518545665056*^9, 3.7625187181262608`*^9, 3.762518761086834*^9},ExpressionUUID->"a195dd41-9b52-4290-ac7b-\ 99814f084f70"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", "1"}], ",", "17"}], "]"}]], "Input", CellChangeTimes->{{3.7625182579536657`*^9, 3.7625182586756372`*^9}, { 3.762518361928319*^9, 3.762518364142425*^9}, {3.762518496811591*^9, 3.7625185011741953`*^9}},ExpressionUUID->"ed5b1265-bdd9-429d-8f79-\ 4609688e45a9"], Cell[BoxData["16"], "Output", CellChangeTimes->{ 3.7625185029711123`*^9},ExpressionUUID->"85bbb99a-d9a2-41ed-bb90-\ 49a157751545"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Prime Number Theorem and applications", "Subsubsection", CellChangeTimes->{{3.730699977293998*^9, 3.730700008765477*^9}},ExpressionUUID->"4f1d0cf2-a833-4ba0-92c2-\ a89c574bb67a"], Cell[TextData[{ "\nThe prime number theorem states the following\n\n", StyleBox["Theorem[Prime Number Theorem] ", FontWeight->"Bold"], "Let \[Pi](n)=|{i:i\[LessEqual]n and i is prime}|, then\n", Cell[BoxData[ FormBox[ SubscriptBox["lim", RowBox[{"n", "\[RightArrow]", "\[Infinity]"}]], TraditionalForm]], ExpressionUUID->"7e7555bf-02c6-4314-9344-42bfe6d14352"], Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"\[Pi]", RowBox[{"(", "n", ")"}]}], RowBox[{"n", "/", RowBox[{"ln", "(", "n", ")"}]}]], TraditionalForm]],ExpressionUUID-> "bdb74c88-1656-4f91-a99b-f13b14bc1d57"], "=1\n\nIt would be fun to prove this theorem, but it would take too much \ time in this course. This gives us the following approximation \[Pi](n)\ \[TildeTilde]", Cell[BoxData[ FormBox[ RowBox[{"n", "/", RowBox[{"ln", "(", "n", ")"}]}], TraditionalForm]],ExpressionUUID-> "c0a91a63-c480-4780-a8aa-76038ad95b1a"], ".\n\nThis theorem states that between 2n and n there are approximately\n\n\ 1111..1111\n1000..0000\n\n", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"2", "n"}], RowBox[{"(", RowBox[{ RowBox[{"ln", "(", "n", ")"}], "+", RowBox[{"ln", "(", "2", ")"}]}], ")"}]], TraditionalForm]], ExpressionUUID->"81192a27-f96d-41b8-a9e1-a59c2d2c496b"], "-", Cell[BoxData[ FormBox[ FractionBox["n", RowBox[{"ln", "(", "n", ")"}]], TraditionalForm]],ExpressionUUID-> "7fbc6230-bf3b-487c-a885-a6b0dd8c8a34"], "\[TildeTilde] ", Cell[BoxData[ FormBox["\[LineSeparator]", TraditionalForm]],ExpressionUUID-> "fb2961b5-be3d-4234-8818-6cce22ddbfc3"], " primes which is means that if we choose randomly an odd number we obtain a \ prime number in expected O(log(n)) time! \n\nAnd so ", StyleBox["RSA keys can be found efficiently", FontWeight->"Bold"] }], "Text", CellChangeTimes->{{3.730700149213853*^9, 3.73070027345462*^9}, { 3.730700526918103*^9, 3.730700782564204*^9}, {3.730719694387163*^9, 3.730719694387281*^9}, {3.7625189100803537`*^9, 3.762518912188102*^9}, { 3.827482047202331*^9, 3.827482095054412*^9}, {3.827482131767516*^9, 3.8274821431420727`*^9}, {3.832869118002784*^9, 3.832869120437831*^9}, { 3.832869156901149*^9, 3.832869180452003*^9}},ExpressionUUID->"ee0eecea-f024-4e29-86aa-\ bd197678064b"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{ RowBox[{ RowBox[{"PrimePi", "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"x", "/", RowBox[{"Log", "[", "x", "]"}]}], ")"}]}], ",", RowBox[{"{", RowBox[{"x", ",", "10", ",", "500000"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.730701002342147*^9, 3.730701063702352*^9}, { 3.730701099201583*^9, 3.730701158022395*^9}, 3.7625192802772427`*^9},ExpressionUUID->"1cf72445-6fa1-4f40-9b61-\ fce94708cc9c"], Cell[BoxData[ GraphicsBox[{{{}, {}, {RGBColor[0.368417, 0.506779, 0.709798], AbsoluteThickness[1.6], Opacity[ 1.], LineBox[CompressedData[" 1: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 G6Pp/YfeqzJwKPYsFXzjA+fi0TbRihML56jw9F9m6xDa4adb8HEXKtQHiH2/ hef3MH4u8voCFQL/JBbtR4dmC+aqXKJCWbrKRq1g4vMwc+1EdyrYGFDnifru nUr9wONJhX+TQWkh6Py6UXt7byqcGjP/eI9Yn2s2L2rzxfZ9/Bs3gW7297uh HkAFTbHRdznonr5XMqlBmH8zZY7E/fuwBrtCIBT7d+59rAd6JvHIPucwnP/C zz9U0fx/sgY7rlGh4+vxw7/weKbFb3et6zi/VeemifZJPtEUyoyiguGScxte Y1yJFZYqfAPXrxHDnXh+0jj/TvVSLBUWNyltyCD277crXn2Mo8JaPdPnk2jL 9acP6yZQofXp/ThiPz4VXvDrURKuZ/mvT5PRriMLIawUKlBTHKay8XyBu/XE vFKp8F24Zynx/BadEZ03cI8KOo9iP0uhU/h6dQwzqCBO3jhQgMfnHJPuLHhA hY/HdjtsIJ5fnjmfFc2mAk1y9hXx/PFyZfnigBwqvLO4sIzYPzu8+GOH86hw zvic5RZiP+7eK2dSQIUzntODdTj/k1sSKp8WUaH4Fzn2ALGfxg2aSJRge3vk zOlo6tT6r6GlVHjDvrRICb3igMfln+VU4Dv99dQj9Lr8WmHzKirsE1A0tEer U4XvVT2jgqtFn8ss5r+eo4WadC2Od0VLRQjatCmtKaKOCnUNZAYflreT+3Fk qgH3tx3sayZo51C134deUcFeqdVXC621PE9i9jXub+WqJevQQlnSxjdaqNB/ d6+ZG7pX/Y7H+jYq3HrGHHqOzn7Fznj5ngorVimPEPuVh3VE2/EOKryge3gk ond/51u0uJsKz9pc/nxFc7291iX24v67P7mfhxgfod/mm/swn2wEGleii+44 BLX2U+Hr6oKcrehApYHHZwepsHD3oJgM2uSZ1cdlQ1Q4Lqm6lLieSJi0ke4N U0HwE00/Fev/2a+/WfM7Fea3X2SKY7zyfM2xrjEqyHv7bzPEeDiveuTFCSqc 9+nLvIW2vvm4nPqbCjVbhEQOouWkZL89nKaCEafT+jOO32xxCmvXHBUMfj69 +g/dsIu7o3+eCt2L32lXoGM7rjt6/aOCuUsh6zL6+OmlCdwlNJj4dX5wDbHe 57zrC3hpEGfrqOFEzPfVqV/GS2nga6cqo4h+K+q4aliABpmWZjuJ611K9qBh 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 "]], LineBox[{{13993.397624419913`, 1.1263934607356219`}, { 14146.486091811581`, 1.1241814072067815`}, {14312.730390952289`, 1.1218419949547767`}, {14478.974690092995`, 1.1222098518310415`}, { 14645.218989233701`, 1.1232372633846504`}, {14811.463288374409`, 1.1242558148908681`}, {14977.707587515117`, 1.125265647653226}, { 15143.951886655825`, 1.1243601276561532`}, {15310.196185796533`, 1.125371500424165}, {15414.68115933348, 1.1263934607356219`}}], LineBox[{{11489.83227852511, 1.1263934607356219`}, {11652.821604700966`, 1.1241278910151642`}, {11819.065903841674`, 1.1234810417113235`}, { 11985.310202982382`, 1.1260029805076956`}, {12151.55450212309, 1.1253851351039446`}, {12317.798801263798`, 1.1247996363727462`}, { 12484.043100404504`, 1.125000566618121}, {12556.421563916072`, 1.1263934607356219`}}], LineBox[{{15544.229409623984`, 1.1263934607356219`}, { 15642.684784077948`, 1.1255161298445178`}, {15708.196191866065`, 1.1263934607356219`}}], LineBox[{{13530.37915328281, 1.1263934607356219`}, {13647.753194389457`, 1.1246088671954204`}, {13772.855794583136`, 1.1263934607356219`}}], LineBox[{{96.56191995450773, 1.070028069614835}, {129.18863617434118`, 1.1263934607356219`}}]}}, {}, {}}, AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], Axes->{True, True}, AxesLabel->{None, None}, AxesOrigin->{0, 1.070028069614835}, DisplayFunction->Identity, Frame->{{False, False}, {False, False}}, FrameLabel->{{None, None}, {None, None}}, FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, GridLines->{None, None}, GridLinesStyle->Directive[ GrayLevel[0.5, 0.4]], ImagePadding->All, Method->{ "DefaultBoundaryStyle" -> Automatic, "DefaultMeshStyle" -> AbsolutePointSize[6], "ScalingFunctions" -> None, "CoordinatesToolOptions" -> {"DisplayFunction" -> ({ (Part[{{Identity, Identity}, {Identity, Identity}}, 1, 2][#]& )[ Part[#, 1]], (Part[{{Identity, Identity}, {Identity, Identity}}, 2, 2][#]& )[ Part[#, 2]]}& ), "CopiedValueFunction" -> ({ (Part[{{Identity, Identity}, {Identity, Identity}}, 1, 2][#]& )[ Part[#, 1]], (Part[{{Identity, Identity}, {Identity, Identity}}, 2, 2][#]& )[ Part[#, 2]]}& )}}, PlotRange->{{10, 500000}, {1.070028069614835, 1.1263934607356219`}}, PlotRangeClipping->True, PlotRangePadding->{{ Scaled[0.02], Scaled[0.02]}, { Scaled[0.05], Scaled[0.05]}}, Ticks->{Automatic, Automatic}]], "Output", CellChangeTimes->{ 3.730719579079307*^9, {3.762519277416294*^9, 3.762519281260234*^9}},ExpressionUUID->"c5effa46-e2e7-4d6c-831b-\ 837d2f2159eb"] }, Open ]] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Attacks to RSA", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}},ExpressionUUID->"d44f1847-4b15-46d6-b114-\ aaf0c3dc57d1"], Cell[CellGroupData[{ Cell["Knowing \[Phi](n) or the decrypting exponent", "Subsubsection", CellChangeTimes->{{3.730701408897525*^9, 3.730701418247243*^9}, { 3.731675095429552*^9, 3.7316751027713747`*^9}, 3.8280821581044493`*^9},ExpressionUUID->"5ea3337a-3e48-49be-aea0-\ 0ad91fe97eea"], Cell[TextData[{ "Notice that if one known \n\[Phi](n)=|{a:a"8c323637-b13d-40a5-bda1-910063efc461"], ", not only it is possible to get the private key from the public by using \ Extended Euclides Algorithm, but it is also possible to factor n." }], "Text", CellChangeTimes->{{3.730701425417585*^9, 3.730701487583293*^9}, { 3.731675125036337*^9, 3.7316751744011507`*^9}, 3.832870392579825*^9},ExpressionUUID->"fce0ceb3-8afa-4c54-be69-\ 166d836cdbb3"], Cell[BoxData[ RowBox[{"Clear", "[", RowBox[{"n", ",", "p", ",", "q"}], "]"}]], "Input", CellChangeTimes->{{3.7316751905515547`*^9, 3.73167520847198*^9}},ExpressionUUID->"8479b522-b145-4c79-b0b2-\ e6051351e912"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"n", "==", RowBox[{"p", "*", "q"}]}], ",", RowBox[{ RowBox[{"\[Phi]", "[", "n", "]"}], "==", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}]}], "}"}], ",", RowBox[{"{", RowBox[{"p", ",", "q"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.7307014891066647`*^9, 3.730701538862301*^9}}, CellLabel->"In[13]:=",ExpressionUUID->"976e3f98-64f1-4b54-8fba-b9d9a515a006"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"p", "\[Rule]", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "+", "n", "-", SqrtBox[ RowBox[{ RowBox[{ RowBox[{"-", "4"}], " ", "n"}], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "n", "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}], "2"]}]], "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}]}]}], ",", RowBox[{"q", "\[Rule]", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "+", "n", "+", SqrtBox[ RowBox[{ RowBox[{ RowBox[{"-", "4"}], " ", "n"}], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "n", "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}], "2"]}]], "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}]}]}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"p", "\[Rule]", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "+", "n", "+", SqrtBox[ RowBox[{ RowBox[{ RowBox[{"-", "4"}], " ", "n"}], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "n", "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}], "2"]}]], "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}]}]}], ",", RowBox[{"q", "\[Rule]", RowBox[{ FractionBox["1", "2"], " ", RowBox[{"(", RowBox[{"1", "+", "n", "-", SqrtBox[ RowBox[{ RowBox[{ RowBox[{"-", "4"}], " ", "n"}], "+", SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", "n", "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}], "2"]}]], "-", RowBox[{"\[Phi]", "[", "n", "]"}]}], ")"}]}]}]}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.828082507571603*^9}, CellLabel->"Out[13]=",ExpressionUUID->"95fe22ce-e5ba-4354-a488-b66cd20ef0d9"] }, Open ]], Cell[TextData[{ "As we shall see, it is also possible to factor n if one knows the ", StyleBox["a", FontWeight->"Bold"], " b=1 mod \[Phi](n), even if \[Phi](n) is not known.\n\nThis has important \ applications, since as far as the decrypting exponent is revealed, one has to \ ", StyleBox["change n", FontWeight->"Bold"], " and ", StyleBox["not just a.", FontWeight->"Bold"], "\n\nObserve that\n", Cell[BoxData[ RowBox[{ SuperscriptBox["w", "ab"], "=", RowBox[{"w", " ", "mod", " ", "n"}]}]],ExpressionUUID-> "2b3877fb-43ef-47c7-b79d-230e8fd0f10b"], " (assuming gcd(w,n)=1, if not we have broken RSA)\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["w", RowBox[{"ab", "-", "1"}]], "=", RowBox[{"1", " ", "mod", " ", "n", " ", "for", " ", "all", " ", "w"}]}], TraditionalForm]],ExpressionUUID->"32f885f9-80c3-4b84-aaa8-d90774cf8054"], " where gcd(w,n)=1\nand moreover\n\nab-1=0 mod \[Phi](n)=(p-1)(q-1) and so \ \[Phi](n) is even\n\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["w", RowBox[{"\[Phi]", "(", "n", ")"}]], "=", RowBox[{ RowBox[{ "1", " ", "mod", " ", "n", " ", "since", " ", "w", " ", "is", " ", RowBox[{"gdc", "(", RowBox[{"w", ",", "n"}], ")"}]}], "=", RowBox[{"1", " ", RowBox[{"(", RowBox[{"by", " ", "Euler", " ", "Thm"}], ")"}]}]}]}], TraditionalForm]],ExpressionUUID->"54dc4022-c368-4b10-ba8a-2412b98138dd"], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"ab", "-", "1"}], "=", RowBox[{ SuperscriptBox["2", "k"], "r"}]}], TraditionalForm]],ExpressionUUID-> "bc4ebf60-72ac-4255-bd16-21268e875bcc"], " with r odd. Clearly, if one knows ", StyleBox["a", FontWeight->"Bold"], " and ", StyleBox["b", FontWeight->"Bold"], " it is easy to get k and r (note that k is always >0)\n\nThe idea to factor \ n by knowing ", StyleBox["a", FontWeight->"Bold"], " and ", StyleBox["b.\n\n", FontWeight->"Bold"], "1) We generate a random w (which will be coprime with n with very high \ probability)\n\n", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["w", RowBox[{ SuperscriptBox["2", "k"], "r"}]], "=", RowBox[{"1", " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID-> "b0635b83-e0cd-4b63-80f9-0af1e3c60459"], "\n\n2) find the least e such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["w", RowBox[{ SuperscriptBox["2", "e"], "r"}]], "=", RowBox[{"1", " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID-> "ebc63d6b-d215-4637-b080-c4e8d1cee5b3"], " , with high probability e>0 and so ", Cell[BoxData[ FormBox[ SuperscriptBox["w", RowBox[{ SuperscriptBox["2", "e"], RowBox[{"r", "/", "2"}]}]], TraditionalForm]],ExpressionUUID-> "544f9ed0-f4c3-4e11-b61e-f7dcc4d2e922"], " is a square root of 1, with also high probability ", Cell[BoxData[ FormBox[ SuperscriptBox["w", RowBox[{ SuperscriptBox["2", "e"], RowBox[{"r", "/", "2"}]}]], TraditionalForm]],ExpressionUUID-> "51f5681b-1081-4468-abc4-c51a6bdc59da"], "\[NotEqual]-1, and so it is a non-trivial root 1 mod n, and so, gcd (", Cell[BoxData[ FormBox[ SuperscriptBox["w", RowBox[{ SuperscriptBox["2", "e"], RowBox[{"r", "/", "2"}]}]], TraditionalForm]],ExpressionUUID-> "539eacd0-d15a-499d-9940-fc4c9c074574"], "+1,n)=p or q\n\n3) if two fails we need to try another w" }], "Text", CellChangeTimes->{{3.7307103083586607`*^9, 3.730710367184066*^9}, { 3.731656111495164*^9, 3.73165634164727*^9}, {3.731667933122548*^9, 3.731667971970492*^9}, 3.7316752317202187`*^9, {3.731675343382332*^9, 3.731675361766364*^9}, {3.731675394955802*^9, 3.7316754988218603`*^9}, { 3.731675545831934*^9, 3.731675600312167*^9}, {3.828075455750752*^9, 3.8280754602825203`*^9}, {3.828082110938036*^9, 3.828082113515957*^9}, { 3.8280826641727543`*^9, 3.82808282075913*^9}, {3.828082868338822*^9, 3.8280829694939337`*^9}, {3.828083003532885*^9, 3.82808320824993*^9}, 3.832869200867641*^9},ExpressionUUID->"6a5f4ba0-e23d-49ec-bbae-\ 227b6a4d6132"], Cell[BoxData["\[IndentingNewLine]"], "Input", CellChangeTimes->{ 3.8280827080586987`*^9},ExpressionUUID->"12e88a43-b72f-4382-ad30-\ df1b0ffc36d6"], Cell["\<\ Consider the following example;\ \>", "Text", CellChangeTimes->{{3.73166764540209*^9, 3.7316676565762873`*^9}},ExpressionUUID->"5c1dabf1-e6ff-4751-8cef-\ fe4e730ccc72"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "1023400", "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"q", "=", RowBox[{"Prime", "[", "10342320", "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "=", RowBox[{"p", "*", "q"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"a", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "}"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"EvenQ", "[", "a", "]"}], ",", RowBox[{"a", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "+", "1"}], ",", "n"}], "]"}]}]}], "]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"b", "=", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"GCD", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}], "\[Equal]", "1"}], ",", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}], ",", RowBox[{"Print", "[", "\"\\"", "]"}]}], "]"}]}], ";"}]}]}]], "Input", CellChangeTimes->{{3.731656342842661*^9, 3.731656432007832*^9}, { 3.731657467049313*^9, 3.731657490160932*^9}, 3.731667664288785*^9, { 3.762522467921419*^9, 3.762522486465774*^9}, {3.762522810620874*^9, 3.762522812541185*^9}}, CellLabel->"In[20]:=",ExpressionUUID->"e9e69c76-d48c-426c-b248-7c624385a837"], Cell[BoxData["2631617822942705"], "Output", CellChangeTimes->{ 3.762522813005513*^9, {3.828083285357609*^9, 3.828083288721974*^9}}, CellLabel->"Out[24]=",ExpressionUUID->"fe92852c-ced2-4901-91e0-4fc1be876579"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["a"], "Input", CellChangeTimes->{3.8280832911407757`*^9}, CellLabel->"In[26]:=",ExpressionUUID->"6d846dfe-88c6-4ff3-a003-8e34e6ab3997"], Cell[BoxData["2631617822942705"], "Output", CellChangeTimes->{3.82808329159278*^9}, CellLabel->"Out[26]=",ExpressionUUID->"0ee172b8-f4f2-472c-ba2e-794e17fbf1bc"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["b"], "Input", CellChangeTimes->{3.828083294773548*^9}, CellLabel->"In[27]:=",ExpressionUUID->"e60c8ee6-ca7f-452f-a2b4-28bbabd1f148"], Cell[BoxData["230948547604001"], "Output", CellChangeTimes->{3.8280832954206*^9}, CellLabel->"Out[27]=",ExpressionUUID->"a32705d4-4a3d-4176-bdba-16e9b776fad2"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["p"], "Input", CellChangeTimes->{3.828083307869011*^9}, CellLabel->"In[28]:=",ExpressionUUID->"cec36afa-62fc-4b8a-816e-4aa7bb41681d"], Cell[BoxData["15871949"], "Output", CellChangeTimes->{3.828083308470476*^9}, CellLabel->"Out[28]=",ExpressionUUID->"67a6617a-bda2-4258-9b44-c25f85013f73"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["q"], "Input", CellChangeTimes->{3.828083309880542*^9}, CellLabel->"In[29]:=",ExpressionUUID->"94f02339-d415-42b6-a729-d1ce24b73ce3"], Cell[BoxData["185939179"], "Output", CellChangeTimes->{3.828083310862287*^9}, CellLabel->"Out[29]=",ExpressionUUID->"ea2ad4db-5555-4760-8bc8-eea458e5dbcf"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "*", "b"}], ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.828083321269318*^9, 3.828083332755464*^9}}, CellLabel->"In[30]:=",ExpressionUUID->"1b83cb6c-d309-47a9-b084-b0930057d0f1"], Cell[BoxData["1"], "Output", CellChangeTimes->{3.8280833346532288`*^9}, CellLabel->"Out[30]=",ExpressionUUID->"b9c9c291-083a-4312-ab93-fc77df0c200b"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"r", "=", RowBox[{ RowBox[{"a", "*", "b"}], "-", "1"}]}], ";", RowBox[{"k", "=", "0"}], ";"}], "\[IndentingNewLine]", RowBox[{"While", "[", RowBox[{ RowBox[{"EvenQ", "[", "r", "]"}], ",", RowBox[{ RowBox[{"k", "++"}], ";", RowBox[{"r", "=", RowBox[{"r", "/", "2"}]}]}]}], "]"}], "\[IndentingNewLine]", RowBox[{"Print", "[", RowBox[{ "\"\\"", ",", "a", ",", "\"\< b=\>\"", ",", "b", ",", "\"\< r=\>\"", ",", "r", ",", "\"\< k=\>\"", ",", "k"}], "]"}]}], "Input", CellChangeTimes->{{3.828083357574369*^9, 3.828083447356536*^9}}, CellLabel->"In[31]:=",ExpressionUUID->"c54f3ee8-9a5a-49b3-8880-a52500e9d281"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"a=\"\>", "\[InvisibleSpace]", "2631617822942705", "\[InvisibleSpace]", "\<\" b=\"\>", "\[InvisibleSpace]", "230948547604001", "\[InvisibleSpace]", "\<\" r=\"\>", "\[InvisibleSpace]", "37985519628588798792178235169", "\[InvisibleSpace]", "\<\" k=\"\>", "\[InvisibleSpace]", "4"}], SequenceForm[ "a=", 2631617822942705, " b=", 230948547604001, " r=", 37985519628588798792178235169, " k=", 4], Editable->False]], "Print", CellChangeTimes->{3.8280834497466717`*^9}, CellLabel-> "During evaluation of \ In[31]:=",ExpressionUUID->"5b0d9ae8-f02c-4ce1-ac28-e0c5e278bfe4"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"a", "*", "b"}], "-", "1"}], "\[Equal]", RowBox[{ RowBox[{"2", "^", "k"}], "*", "r"}]}]], "Input", CellChangeTimes->{{3.828083466844643*^9, 3.828083477749434*^9}}, CellLabel->"In[34]:=",ExpressionUUID->"ca3421b1-5cc7-4821-801a-fe5965fadd36"], Cell[BoxData["True"], "Output", CellChangeTimes->{3.828083478218449*^9}, CellLabel->"Out[34]=",ExpressionUUID->"c70e7c8c-36df-4994-842e-b595b33846f5"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"w", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"2", ",", RowBox[{"n", "-", "2"}]}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.828083485327927*^9, 3.828083515313312*^9}}, CellLabel->"In[35]:=",ExpressionUUID->"1b41873d-dd13-4bac-8dc4-b906ee427b8c"], Cell[BoxData["1561618586184410"], "Output", CellChangeTimes->{3.82808351729563*^9}, CellLabel->"Out[35]=",ExpressionUUID->"9deb49d6-ca39-48ad-be95-e2a273722534"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GCD", "[", RowBox[{"w", ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.828083523647894*^9, 3.828083530844874*^9}}, CellLabel->"In[36]:=",ExpressionUUID->"47ec05e7-40e4-4809-8112-65419f7a5479"], Cell[BoxData["1"], "Output", CellChangeTimes->{3.8280835312346697`*^9}, CellLabel->"Out[36]=",ExpressionUUID->"9ef80867-2121-4d87-bacb-16039f2e1266"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"w", ",", RowBox[{"2", "*", "r"}], ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.828083540201639*^9, 3.82808356675517*^9}}, CellLabel->"In[40]:=",ExpressionUUID->"b5e1fece-978d-4394-bb8d-c9dad9291f14"], Cell[BoxData["2542681642806738"], "Output", CellChangeTimes->{{3.828083546457445*^9, 3.828083567181603*^9}}, CellLabel->"Out[40]=",ExpressionUUID->"8dfd432c-f38b-48d9-a7ca-f47d48825f1b"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"-", "1"}], ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.828083572343339*^9, 3.8280835822747917`*^9}}, CellLabel->"In[42]:=",ExpressionUUID->"b6deba84-4eb4-4907-8b86-a895461161a6"], Cell[BoxData["2951217166189870"], "Output", CellChangeTimes->{{3.828083579757749*^9, 3.828083582740797*^9}}, CellLabel->"Out[42]=",ExpressionUUID->"1ad3f161-4420-47cc-8e51-883af73d5778"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"GCD", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"w", ",", RowBox[{"2", "*", "r"}], ",", "n"}], "]"}], "+", "1"}], ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.8280835925557623`*^9, 3.82808360677853*^9}}, CellLabel->"In[43]:=",ExpressionUUID->"a4533cfc-8a74-46d4-9cdf-15dba324244d"], Cell[BoxData["15871949"], "Output", CellChangeTimes->{3.828083607211516*^9}, CellLabel->"Out[43]=",ExpressionUUID->"88c84d3c-65a9-45bc-8a94-3af2d51c2189"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["p"], "Input", CellChangeTimes->{3.828083609972563*^9}, CellLabel->"In[44]:=",ExpressionUUID->"37b491d0-a63b-40dc-9425-e5d455272956"], Cell[BoxData["15871949"], "Output", CellChangeTimes->{3.8280836105498543`*^9}, CellLabel->"Out[44]=",ExpressionUUID->"354c1fdf-ca82-42ab-b251-f3d3bdc6e1c3"] }, Open ]], Cell[TextData[{ StyleBox["Exercise:", FontWeight->"Bold"], " Recall what is a ", StyleBox["Las Vegas Algorithm", FontWeight->"Bold"], ", show that from a Las Vegas algorithm it is always possible to construct a \ Monte-Carlo algorithm. The other way around is an open problem! \n\n", StyleBox["Definition ", FontWeight->"Bold"], " A Las-Vegas decision algorithm A for a set B is a algorithm with access to \ a random oracle (one has access to a sequence of independent fair coins - \ i.i.d Bern(1/2)) such that it outcomes 0,1,or Fail.\n\nIf A(x)=1, then x\ \[Element] B for sure\nIf A(x)=0, then x\[NotElement]B for sure\n\ P(A(x)=Fail)<1/3\n\n(Complexity Class RP\[Subset]BPP)" }], "Text", CellChangeTimes->{{3.7316683288851843`*^9, 3.731668380238202*^9}, { 3.7316759962743673`*^9, 3.7316760029545393`*^9}, {3.731676165109138*^9, 3.731676255377076*^9}, {3.73167628723878*^9, 3.731676329454565*^9}, 3.731676432422566*^9, {3.828082123570204*^9, 3.828082132718485*^9}, { 3.82808400666177*^9, 3.8280840068848963`*^9}},ExpressionUUID->"29c69e73-dea1-4d73-bac8-\ 3f791c5978f3"], Cell[TextData[{ StyleBox["Exercise: ", FontWeight->"Bold"], "Construct a Las Vegas algorithm to factor n knowing both the public a and \ private key b. \n" }], "Text", CellChangeTimes->{{3.7316679988689213`*^9, 3.7316680302391663`*^9}, { 3.731668391782465*^9, 3.731668409910349*^9}, {3.7316766753054132`*^9, 3.73167668026245*^9}, 3.828084054341408*^9},ExpressionUUID->"0db117bb-8844-4188-bd2e-\ 7cb05a5fd35d"], Cell[BoxData[ RowBox[{ RowBox[{"Fact", "=", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"a", ",", "b", ",", "n"}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"r", ",", "k", ",", "w", ",", "e", ",", "f", ",", "c"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"r", "=", RowBox[{ RowBox[{"a", "*", "b"}], "-", "1"}]}], ";", RowBox[{"k", "=", "0"}], ";", "\[IndentingNewLine]", RowBox[{"While", "[", RowBox[{ RowBox[{"EvenQ", "[", "r", "]"}], ",", RowBox[{ RowBox[{"k", "++"}], ";", RowBox[{"r", "=", RowBox[{"r", "/", "2"}]}]}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"w", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"e", "=", "0"}], ";", "\[IndentingNewLine]", RowBox[{"c", "=", "False"}], ";", "\[IndentingNewLine]", RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"e", "\[LessEqual]", "k"}], " ", "&&", " ", RowBox[{"!", "c"}]}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"f", "=", RowBox[{"GCD", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"w", ",", RowBox[{ RowBox[{"(", RowBox[{"2", "^", "e"}], ")"}], "*", "r"}], ",", "n"}], "]"}], "+", "1"}], ",", "n"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"f", "\[NotEqual]", "1"}], " ", "&&", " ", RowBox[{"f", "\[NotEqual]", "n"}]}], ",", RowBox[{ RowBox[{"Print", "[", "f", "]"}], ";", RowBox[{"c", "=", "True"}]}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"e", "++"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"!", "c"}], ",", RowBox[{"Print", "[", "\"\\"", "]"}]}], "]"}], ";"}]}], "\[IndentingNewLine]", "]"}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.8280840605821543`*^9, 3.8280843640243597`*^9}, { 3.828084401103818*^9, 3.828084404116187*^9}, {3.828084434813952*^9, 3.828084504665824*^9}}, CellLabel->"In[58]:=",ExpressionUUID->"b5f1881d-d51c-46ca-bf19-57f60941416f"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Fact", "[", RowBox[{"a", ",", "b", ",", "n"}], "]"}]], "Input", CellChangeTimes->{{3.82808436628633*^9, 3.8280843769095488`*^9}}, CellLabel->"In[65]:=",ExpressionUUID->"ebc97199-e94c-490b-a1a2-49a8d35a66e0"], Cell[BoxData["185939179"], "Print", CellChangeTimes->{{3.828084377320937*^9, 3.828084405793548*^9}, 3.828084473474291*^9, {3.828084508063054*^9, 3.828084516842752*^9}}, CellLabel-> "During evaluation of \ In[65]:=",ExpressionUUID->"7ff84fa7-b790-4ec9-a07f-b9fe0c2a15d7"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["p"], "Input", CellChangeTimes->{3.828084390424428*^9}, CellLabel->"In[56]:=",ExpressionUUID->"73dbf0d1-0048-4368-942c-e936a1368367"], Cell[BoxData["15871949"], "Output", CellChangeTimes->{3.828084390985754*^9, 3.8280844755334387`*^9}, CellLabel->"Out[56]=",ExpressionUUID->"e95a96fc-23c7-4023-98d9-b21cc7a55b61"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["q"], "Input", CellChangeTimes->{3.828084391700054*^9}, CellLabel->"In[57]:=",ExpressionUUID->"041c7a23-b671-4404-888b-f9b14a9cfad9"], Cell[BoxData["185939179"], "Output", CellChangeTimes->{3.828084392185176*^9, 3.828084476138877*^9}, CellLabel->"Out[57]=",ExpressionUUID->"341a14d4-3cf3-448a-b7e9-4aeb75220f2c"] }, Open ]], Cell[TextData[{ "\n", StyleBox["Theorem: ", FontWeight->"Bold"], "The factoring Las Vegas Algorithm will fail with probability smaller than \ 1/2.\n\n", StyleBox["Proof: ", FontWeight->"Bold"], " It follows from the fact that w is random and so ", Cell[BoxData[ FormBox[ SuperscriptBox["w", RowBox[{ SuperscriptBox["2", "e"], "r"}]], TraditionalForm]],ExpressionUUID-> "00df5e20-0967-43d1-9800-8c83e0db9f37"], " is a random square root of 1, which implies that it has 1/2 probability of \ being a non trivial root since there are four square roots of 1 and two are \ non-trivial.\n\n" }], "Text", CellChangeTimes->{{3.731667984284346*^9, 3.7316679938883743`*^9}, { 3.731668043040187*^9, 3.7316680485195436`*^9}, {3.731668289231367*^9, 3.731668301590687*^9}, {3.731668414374304*^9, 3.7316686626941423`*^9}, { 3.731677006108363*^9, 3.7316771859269953`*^9}, {3.731677216871482*^9, 3.73167796913043*^9}, {3.731678106027753*^9, 3.731678116951968*^9}, { 3.7316781759654713`*^9, 3.73167820175838*^9}, {3.73167824658537*^9, 3.7316783557811747`*^9}, {3.7316783893307943`*^9, 3.731678404589126*^9}, { 3.79481205046389*^9, 3.794812050464253*^9}, {3.794812470481431*^9, 3.794812507883863*^9}, {3.7948125941019287`*^9, 3.7948126559821377`*^9}, { 3.794812688480534*^9, 3.794812760223654*^9}, {3.794812875499969*^9, 3.794813182438891*^9}, {3.794813215630052*^9, 3.794813216018791*^9}, { 3.794813258257505*^9, 3.794813423840796*^9}, {3.794815885240069*^9, 3.794815886698394*^9}, 3.8280757623708487`*^9, 3.828082148604245*^9, { 3.828084529969933*^9, 3.828084652944223*^9}, {3.8328207175604753`*^9, 3.8328207187043953`*^9}, {3.832869240794022*^9, 3.832869240975069*^9}},ExpressionUUID->"8fc66401-edff-48a9-8e00-\ a3c1eef79a1a"] }, Open ]], Cell[CellGroupData[{ Cell["Partial knowledge of the message", "Subsubsection", CellChangeTimes->{{3.730701408897525*^9, 3.730701418247243*^9}, { 3.7307102180213213`*^9, 3.730710224761119*^9}},ExpressionUUID->"447ed595-e672-4a56-97f5-\ 88293ba2af0d"], Cell[TextData[{ "Assume that one has access to an oracle that given a ciphertext y=", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "a"], " ", "mod", " ", "n"}], TraditionalForm]], ExpressionUUID->"8f6252cc-053b-4d83-8384-0505b29c3d01"], " as knowledge of the parity of x Even[y]=1 iff x is even. Then it is \ possible to decipher without knowing the private key any message.\n\nThe \ reason for this is due to the homomorphic properties of RSA, namely that \ enc(2x)=enc(2)enc(x).\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "a"], SuperscriptBox["m", "a"]}], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"x", " ", "m"}], ")"}], "a"], " ", "mod", " ", "n"}]}], TraditionalForm]],ExpressionUUID->"49772c1f-3e1d-43e9-9dbf-41b2d8dc9c26"], "\n\nLet n be odd, an element x in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "n"], TraditionalForm]], ExpressionUUID->"9c3b791f-4b0f-4d5d-874e-bfa27e563571"], " , is even iff ", Cell[BoxData[ FormBox[ RowBox[{"x", "*", SuperscriptBox["2", RowBox[{"-", "1", " "}]], "mod", " ", "n"}], TraditionalForm]], ExpressionUUID->"d93e99af-2448-4ca3-bfcd-7f7c899a5267"], " is smaller to n/2, or in other words, x=2y for some y {{3.7307102310959253`*^9, 3.730710303584755*^9}, 3.730710383978573*^9, {3.730711216939683*^9, 3.730711468861391*^9}, { 3.73071150208505*^9, 3.730711521110211*^9}, {3.730711580224648*^9, 3.7307117711740637`*^9}, {3.730711804466599*^9, 3.730711841985641*^9}, { 3.7307119006592407`*^9, 3.730711957810911*^9}, {3.730711999443636*^9, 3.73071209399893*^9}, {3.730712155194419*^9, 3.730712156252866*^9}, { 3.7307121866043663`*^9, 3.7307121953931313`*^9}, 3.731669419080405*^9, { 3.731669793805752*^9, 3.731669843476338*^9}, {3.7316786573081923`*^9, 3.7316786819883003`*^9}, {3.7316788742655973`*^9, 3.731678903974774*^9}, { 3.731678949422381*^9, 3.731679016558848*^9}},ExpressionUUID->"62a9d781-a800-45ff-b02c-\ f8f2ed65cee8"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "1000", "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"q", "=", RowBox[{"Prime", "[", "1020", "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "=", RowBox[{"p", "*", "q"}]}], ";"}]}], "Input", CellChangeTimes->{{3.7316694474535027`*^9, 3.73166945163708*^9}},ExpressionUUID->"871409c9-a208-4b17-9661-\ 3f3fb133b36a"], Cell[CellGroupData[{ Cell[BoxData["n"], "Input", CellChangeTimes->{{3.762521570327166*^9, 3.762521570990553*^9}},ExpressionUUID->"fe578f82-388c-415a-86e4-\ 1c540dd28feb"], Cell[BoxData["64231009"], "Output", CellChangeTimes->{ 3.762521571360498*^9},ExpressionUUID->"f84c13fd-767a-4026-8d16-\ c5a4f60d025a"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"x", "=", RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{"-", "1"}], ",", "n"}], "]"}]}]], "Input", CellChangeTimes->{{3.731669466837748*^9, 3.731669476213056*^9}},ExpressionUUID->"ac94f889-b501-4abc-a3b8-\ 1777b7b09a63"], Cell[BoxData["32115505"], "Output", CellChangeTimes->{3.7316694764783897`*^9, 3.7316790912978992`*^9, 3.762521577943416*^9, 3.76252161856301*^9},ExpressionUUID->"1511d221-0533-4c0f-be66-399bea8770c8"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"z", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"0", ",", RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}]}], "\[IndentingNewLine]", RowBox[{"EvenQ", "[", "z", "]"}], "\[IndentingNewLine]", RowBox[{"(", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "*", "z"}], ",", "n"}], "]"}], "<", RowBox[{"n", "/", "2"}]}], ")"}]}], "Input", CellChangeTimes->{{3.731669508829236*^9, 3.731669520621194*^9}, { 3.731669593147608*^9, 3.731669612693056*^9}, 3.731679133236245*^9, { 3.762521604010247*^9, 3.76252160654525*^9}, {3.7625216629025393`*^9, 3.7625216903100653`*^9}},ExpressionUUID->"79ac9b9f-a854-4c7c-92f8-\ 1cfac4b12920"], Cell[BoxData["28706023"], "Output", CellChangeTimes->{{3.731669595126836*^9, 3.731669628439804*^9}, 3.73167909275628*^9, {3.731679130279633*^9, 3.731679134898202*^9}, { 3.7625215870656843`*^9, 3.76252169095611*^9}},ExpressionUUID->"ba1d555b-c7f0-4fa6-bab4-\ d2aafce07e31"], Cell[BoxData["False"], "Output", CellChangeTimes->{{3.731669595126836*^9, 3.731669628439804*^9}, 3.73167909275628*^9, {3.731679130279633*^9, 3.731679134898202*^9}, { 3.7625215870656843`*^9, 3.762521690963923*^9}},ExpressionUUID->"a5059256-04a6-472a-9412-\ 75bded7a46c4"], Cell[BoxData["False"], "Output", CellChangeTimes->{{3.731669595126836*^9, 3.731669628439804*^9}, 3.73167909275628*^9, {3.731679130279633*^9, 3.731679134898202*^9}, { 3.7625215870656843`*^9, 3.762521690970251*^9}},ExpressionUUID->"ce30003d-c5e0-4304-ac8a-\ f36ef89cf142"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"y", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"0", ",", RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}]}], "\n", RowBox[{ RowBox[{"EvenQ", "[", "y", "]"}], "\[Equal]", RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "*", "x", "*", "y"}], ",", "n"}], "]"}], "<", RowBox[{"n", "/", "4"}]}], "||", RowBox[{ RowBox[{"n", "/", "2"}], "<", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "*", "x", "*", "y"}], ",", "n"}], "]"}], "<", RowBox[{"3", RowBox[{"n", "/", "4"}]}]}]}], ")"}]}]}], "Input", CellChangeTimes->{{3.731669508829236*^9, 3.731669520621194*^9}, { 3.731669593147608*^9, 3.731669612693056*^9}, {3.7316697004850597`*^9, 3.731669752069634*^9}},ExpressionUUID->"f390b46e-8501-4880-b5e7-\ e2e8683bfb5a"], Cell[BoxData["31782897"], "Output", CellChangeTimes->{{3.731669595126836*^9, 3.7316696284512*^9}, { 3.731669732244426*^9, 3.731669757495141*^9}, {3.731679156393838*^9, 3.731679158312235*^9}},ExpressionUUID->"b3875274-c2c3-471a-b043-\ f405415e5091"], Cell[BoxData["True"], "Output", CellChangeTimes->{{3.731669595126836*^9, 3.7316696284512*^9}, { 3.731669732244426*^9, 3.731669757495141*^9}, {3.731679156393838*^9, 3.7316791583204327`*^9}},ExpressionUUID->"58fcf6d4-ca62-4b49-a077-\ f6f3d661eda9"] }, Open ]], Cell[TextData[{ StyleBox["Exercise", FontWeight->"Bold"], " Write a program to break RSA using Even or Half." }], "Text", CellChangeTimes->{{3.7307102310959253`*^9, 3.730710303584755*^9}, 3.730710383978573*^9, {3.730711216939683*^9, 3.730711468861391*^9}, { 3.73071150208505*^9, 3.730711521110211*^9}, {3.730711580224648*^9, 3.7307117711740637`*^9}, {3.730711804466599*^9, 3.730711841985641*^9}, { 3.7307119006592407`*^9, 3.730711957810911*^9}, {3.730711999443636*^9, 3.73071209399893*^9}, {3.730712155194419*^9, 3.730712156252866*^9}, { 3.7307121866043663`*^9, 3.7307121953931313`*^9}, 3.7316694235086203`*^9},ExpressionUUID->"4a4ad690-964c-438d-b5db-\ 424aefe6e222"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "1000", "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"q", "=", RowBox[{"Prime", "[", "1020", "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "=", RowBox[{"p", "*", "q"}]}], ";"}]}], "Input", CellChangeTimes->{{3.7316704851702013`*^9, 3.731670492461604*^9}},ExpressionUUID->"c9c0def6-913a-40c4-a2f8-\ e2f355046dff"], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"Random", "[", RowBox[{"Integer", ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "}"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{ RowBox[{"EvenQ", "[", "a", "]"}], ",", RowBox[{"a", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "+", "1"}], ",", "n"}], "]"}]}]}], "]"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"b", "=", RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"GCD", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}], "\[Equal]", "1"}], ",", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}], ",", RowBox[{"Print", "[", "\"\\"", "]"}]}], "]"}]}], ";"}]}], "Input",\ CellChangeTimes->{{3.7625217468718443`*^9, 3.762521762803011*^9}, { 3.762521805081212*^9, 3.762521806957765*^9}},ExpressionUUID->"b78b73ff-f781-470f-8f34-\ 02a94a0616dd"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", " ", "b"}], " ", ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.7316791771535*^9, 3.731679194448659*^9}},ExpressionUUID->"e65296b2-d5c3-49cf-b6ae-\ 87da18777b0e"], Cell[BoxData["1"], "Output", CellChangeTimes->{{3.731679177994179*^9, 3.7316791948260098`*^9}, 3.76252171439682*^9},ExpressionUUID->"6235513a-134c-4923-9b75-\ 08725e131232"] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"Oracle", "[", "y_", "]"}], ":=", RowBox[{"If", "[", RowBox[{ RowBox[{"EvenQ", "[", RowBox[{"PowerMod", "[", RowBox[{"y", ",", "b", ",", "n"}], "]"}], "]"}], ",", "0", ",", "1"}], "]"}]}]], "Input", CellChangeTimes->{{3.7316705120429783`*^9, 3.731670559598605*^9}, { 3.7316705947028503`*^9, 3.73167060006148*^9}},ExpressionUUID->"b589cd58-ef5e-4a25-8217-\ 9d4e40c7f906"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Oracle", "[", RowBox[{"PowerMod", "[", RowBox[{"1234319", ",", "a", ",", "n"}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.731670548963111*^9, 3.7316705509982023`*^9}, { 3.7316792080064993`*^9, 3.731679233740425*^9}, {3.7625218668861217`*^9, 3.762521873282012*^9}},ExpressionUUID->"02320cbb-0036-480a-b37a-\ 28a5d3930cee"], Cell[BoxData["1"], "Output", CellChangeTimes->{ 3.731670602107869*^9, 3.731672583821883*^9, {3.731679205447688*^9, 3.7316792343769608`*^9}, {3.7625218644600697`*^9, 3.7625218734835987`*^9}},ExpressionUUID->"52e56225-4fb1-4cb9-b9d9-\ cf2dc9ddf673"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"y", "=", RowBox[{"PowerMod", "[", RowBox[{"3345234", ",", "a", ",", "n"}], "]"}]}], "\[IndentingNewLine]", RowBox[{ RowBox[{"enc", "[", "x_", "]"}], ":=", RowBox[{"PowerMod", "[", RowBox[{"x", ",", "a", ",", "n"}], "]"}]}]}], "Input", CellChangeTimes->{{3.731672622409678*^9, 3.7316726427276583`*^9}, { 3.731672701488937*^9, 3.73167271408039*^9}, {3.731672865479731*^9, 3.731672865543168*^9}, {3.731679245811776*^9, 3.731679247250716*^9}, { 3.731679341653674*^9, 3.7316793421649*^9}, 3.7316794157303267`*^9, { 3.7625219287496653`*^9, 3.762521942112664*^9}},ExpressionUUID->"7a6e0f61-9783-436a-83c9-\ 4355a85e3831"], Cell[BoxData["63617557"], "Output", CellChangeTimes->{ 3.731672643075569*^9, 3.731672715616618*^9, 3.731672866017086*^9, 3.731679247848915*^9, 3.731679342695807*^9, 3.731679416255519*^9, 3.762521878679532*^9, {3.7625219294064827`*^9, 3.762521942688889*^9}},ExpressionUUID->"4b0e897f-ec5a-4c41-bfa7-\ 71d3a04ed52c"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"limsup", "=", RowBox[{"n", "-", "1"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"liminf", "=", "1"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"med", "=", RowBox[{ RowBox[{"(", RowBox[{"limsup", "+", "liminf"}], ")"}], "/", "2"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"i", "=", "1"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"While", "[", RowBox[{ RowBox[{ RowBox[{"limsup", "-", "liminf"}], ">", "1"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Oracle", "[", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"enc", "[", RowBox[{"2", "^", "i"}], "]"}], "*", "y"}], ",", "n"}], "]"}], "]"}], "\[Equal]", "0"}], ",", RowBox[{"limsup", "=", "med"}], ",", RowBox[{"liminf", "=", "med"}]}], "]"}], "\[IndentingNewLine]", RowBox[{"i", "++"}]}], ";", "\[IndentingNewLine]", RowBox[{"med", "=", RowBox[{"N", "[", RowBox[{ RowBox[{"(", RowBox[{"limsup", "+", "liminf"}], ")"}], "/", "2"}], "]"}]}], ";"}]}], "\[IndentingNewLine]", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{"Floor", "[", "liminf", "]"}], "\[IndentingNewLine]"}], "Input", CellChangeTimes->{{3.731672587967808*^9, 3.731672605446138*^9}, { 3.731672650239275*^9, 3.731672858047449*^9}},ExpressionUUID->"00149e93-4dab-4b95-b392-\ 74db7292bc1b"], Cell[BoxData["3345234"], "Output", CellChangeTimes->{ 3.731672647710052*^9, 3.7316728063950453`*^9, {3.731672858864841*^9, 3.731672866911632*^9}, {3.731679335673677*^9, 3.731679343761396*^9}, { 3.731679402728014*^9, 3.7316794185214653`*^9}, {3.7625219239012814`*^9, 3.762521943831848*^9}},ExpressionUUID->"210169d2-4a7d-4805-aee3-\ 4ce4cf23d564"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["\<\ Wiener\[CloseCurlyQuote]s attack \ \>", "Section", CellChangeTimes->{{3.730701391810192*^9, 3.7307014019614162`*^9}, { 3.732259304144038*^9, 3.7322593079905977`*^9}, {3.828073825644149*^9, 3.828073838564611*^9}, {3.8280738844291687`*^9, 3.8280738848950567`*^9}, 3.832820878728228*^9},ExpressionUUID->"4557e171-c9f4-462b-a47a-\ 2c886401460f"], Cell["\<\ To perform Wiener\[CloseCurlyQuote]s attack we need to introduce some basic \ concepts in number theory.\ \>", "Text", CellChangeTimes->{{3.8328208845088367`*^9, 3.832820914253991*^9}, { 3.8328704265916653`*^9, 3.832870427265539*^9}},ExpressionUUID->"56753f2b-0d3f-469d-a16b-\ ac6072abee6b"], Cell[TextData[{ StyleBox["Definition", FontWeight->"Bold"], " Given a real number r, its (in)finite continued fraction expansion is the \ (in)finite sequence of integers ", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "04679b2b-9508-4881-8df5-30220842fcc4"], ",...,", Cell[BoxData[ FormBox[ SubscriptBox["a", "n"], TraditionalForm]],ExpressionUUID-> "bfb6ecab-ec43-45e4-b5fc-9b25385f88bf"], "(,...) such that \n1) ", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "db30097d-d6d7-4840-a3f5-9f97a6c2c2cb"], " is an integer and ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]],ExpressionUUID-> "3b4e8a83-0672-4078-ae08-5ffaf1ece36e"], " is a positive integer for all i\[GreaterEqual]1\n\n2) r=", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "a7ac4ade-1b01-4422-b229-db1338146575"], "+ ", Cell[BoxData[ FormBox[ FractionBox["1", RowBox[{ SubscriptBox["a", "1"], "+", FractionBox["1", RowBox[{ SubscriptBox["a", "2"], "+", FractionBox["1", RowBox[{ RowBox[{ SubscriptBox["a", "3"], "+"}], "..."}]]}]]}]], TraditionalForm]], ExpressionUUID->"91b4aff6-da84-436d-b305-738859e4c418"], "\n\nWe denote a continued fraction by r=[", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "5d3eb9ea-099e-424a-b6c1-0b48efff2a91"], ";", Cell[BoxData[ FormBox[ SubscriptBox["a", "1"], TraditionalForm]],ExpressionUUID-> "312f75cc-4a26-4045-8d31-3f04516a52b6"], ",...,", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "n"], "(", ","}], TraditionalForm]],ExpressionUUID-> "dae55488-d8a0-4108-9087-0fe97801d32f"], "...)]\n\n", StyleBox["Proposition", FontWeight->"Bold"], " Every finite continued fraction represents a rational number, and every \ rational number can be represented by precisely ", StyleBox["two different finite continued fractions", FontWeight->"Bold"], ". \n\nx=[", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "ebf1747a-1ffa-45c7-9eae-dac2139899ac"], ";", Cell[BoxData[ FormBox[ SubscriptBox["a", "1"], TraditionalForm]],ExpressionUUID-> "e60d68fb-b9d9-462e-b175-9fdca8454e81"], ",...,", Cell[BoxData[ FormBox[ SubscriptBox["a", "n"], TraditionalForm]],ExpressionUUID-> "21065596-fb77-419d-b403-7a2629078369"], ",1] or x=[", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "af1b763b-6bda-420f-9905-8d87c80b7638"], ";", Cell[BoxData[ FormBox[ SubscriptBox["a", "1"], TraditionalForm]],ExpressionUUID-> "f21257cc-d522-4599-9eab-d4e17a94567c"], ",...,", Cell[BoxData[ FormBox[ SubscriptBox["a", "n"], TraditionalForm]],ExpressionUUID-> "02c9a4a9-f4e6-4d41-aef6-a8fb46a3dbc2"], "+1] (the final element in the shortest representation is therefore always \ greater than 1)" }], "Text", CellChangeTimes->{{3.828073908135356*^9, 3.828074016141918*^9}, { 3.8280740676302233`*^9, 3.8280741672375717`*^9}, {3.828074220216837*^9, 3.8280742730517282`*^9}, {3.82807432846483*^9, 3.828074414514114*^9}, { 3.828074455851823*^9, 3.828074461129848*^9}, {3.8280749624922533`*^9, 3.828075060631586*^9}, {3.832869291625736*^9, 3.832869291834549*^9}},ExpressionUUID->"bff6a59e-9aff-49f7-8576-\ 52f8364c05a3"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFraction", "[", "5798934850", "]"}]], "Input", CellChangeTimes->{{3.8280744651359253`*^9, 3.8280744851521873`*^9}, { 3.828085228309067*^9, 3.828085251991899*^9}}, CellLabel->"In[29]:=",ExpressionUUID->"bfb3a49e-2799-4248-8154-0e6b7fd691c4"], Cell[BoxData[ RowBox[{"{", "5798934850", "}"}]], "Output", CellChangeTimes->{3.832869312262588*^9}, CellLabel->"Out[29]=",ExpressionUUID->"b4e789ac-6ed6-4cfe-8576-a78fec2ef424"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFraction", "[", "5798934850.453463", "]"}]], "Input", CellChangeTimes->{{3.832869326077146*^9, 3.832869327196681*^9}}, CellLabel->"In[30]:=",ExpressionUUID->"e4d00e8c-1013-411b-9d07-e863c8ee92f3"], Cell[BoxData[ RowBox[{"{", RowBox[{ "5798934850", ",", "2", ",", "4", ",", "1", ",", "6", ",", "1", ",", "4"}], "}"}]], "Output", CellChangeTimes->{{3.832869305742112*^9, 3.8328693277914457`*^9}}, CellLabel->"Out[30]=",ExpressionUUID->"cb281060-ce41-4cc0-a91d-3f81d4ef0412"] }, Open ]], Cell[TextData[{ StyleBox["Proposition ", FontWeight->"Bold"], "Every infinite continued fraction represents an irrational number and any \ irrational number can be represented by exactly one infinite continued \ fraction." }], "Text", CellChangeTimes->{{3.8280745483680553`*^9, 3.828074631090578*^9}},ExpressionUUID->"c1c6d30c-5006-4c48-bf7c-\ e513863245dd"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFraction", "[", RowBox[{ RowBox[{"Sqrt", "[", "2", "]"}], ",", "100"}], "]"}]], "Input", CellChangeTimes->{{3.82807464842618*^9, 3.828074652774466*^9}, 3.828085322285336*^9}, CellLabel->"In[73]:=",ExpressionUUID->"a431956d-924e-4f35-87ca-6eb2aef3a0f6"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2", ",", "2"}], "}"}]], "Output", CellChangeTimes->{ 3.828074653253044*^9, {3.8280853189265537`*^9, 3.8280853225332947`*^9}}, CellLabel->"Out[73]=",ExpressionUUID->"aaf77cbd-3f62-4a33-b54e-f27d3e4edf8a"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFraction", "[", RowBox[{ RowBox[{"Sqrt", "[", "909", "]"}], ",", "100"}], "]"}]], "Input", CellChangeTimes->{ 3.828074661003284*^9, {3.82808532552577*^9, 3.828085351525927*^9}}, CellLabel->"In[77]:=",ExpressionUUID->"e05391d8-23ac-45be-9b06-83ba9803a907"], Cell[BoxData[ RowBox[{"{", RowBox[{ "30", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2", ",", "6", ",", "2", ",", "1", ",", "6", ",", "60", ",", "6", ",", "1", ",", "2"}], "}"}]], "Output", CellChangeTimes->{ 3.828074661330172*^9, {3.828085325935*^9, 3.828085351760315*^9}}, CellLabel->"Out[77]=",ExpressionUUID->"675783c5-91be-4693-bad8-b28407fcc615"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ContinuedFraction", "[", RowBox[{"Pi", ",", "100"}], "]"}]], "Input", CellChangeTimes->{{3.8280746673533497`*^9, 3.828074667479249*^9}, { 3.82808538400196*^9, 3.828085398279064*^9}, 3.832869351562004*^9}, CellLabel->"In[31]:=",ExpressionUUID->"5895d1b9-ba25-4557-aaa0-5b9f622206ff"], Cell[BoxData[ RowBox[{"{", RowBox[{ "3", ",", "7", ",", "15", ",", "1", ",", "292", ",", "1", ",", "1", ",", "1", ",", "2", ",", "1", ",", "3", ",", "1", ",", "14", ",", "2", ",", "1", ",", "1", ",", "2", ",", "2", ",", "2", ",", "2", ",", "1", ",", "84", ",", "2", ",", "1", ",", "1", ",", "15", ",", "3", ",", "13", ",", "1", ",", "4", ",", "2", ",", "6", ",", "6", ",", "99", ",", "1", ",", "2", ",", "2", ",", "6", ",", "3", ",", "5", ",", "1", ",", "1", ",", "6", ",", "8", ",", "1", ",", "7", ",", "1", ",", "2", ",", "3", ",", "7", ",", "1", ",", "2", ",", "1", ",", "1", ",", "12", ",", "1", ",", "1", ",", "1", ",", "3", ",", "1", ",", "1", ",", "8", ",", "1", ",", "1", ",", "2", ",", "1", ",", "6", ",", "1", ",", "1", ",", "5", ",", "2", ",", "2", ",", "3", ",", "1", ",", "2", ",", "4", ",", "4", ",", "16", ",", "1", ",", "161", ",", "45", ",", "1", ",", "22", ",", "1", ",", "2", ",", "2", ",", "1", ",", "4", ",", "1", ",", "2", ",", "24", ",", "1", ",", "2", ",", "1", ",", "3", ",", "1", ",", "2", ",", "1", ",", "1", ",", "10"}], "}"}]], "Output", CellChangeTimes->{ 3.828074667906899*^9, {3.828085379962674*^9, 3.828085399029941*^9}, 3.8328693521029367`*^9}, CellLabel->"Out[31]=",ExpressionUUID->"d27fb0e0-12fc-4c49-b419-65175b316392"] }, Open ]], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], "Let r=[", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]],ExpressionUUID-> "1b989d98-b6c3-4e23-9e3e-96744e8db888"], ";", Cell[BoxData[ FormBox[ SubscriptBox["a", "1"], TraditionalForm]],ExpressionUUID-> "d53fe289-abba-41b9-a246-ea9b54216ff3"], ",...,", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "n"], "(", ","}], TraditionalForm]],ExpressionUUID-> "d73c7573-aa7b-45e8-af39-287b7e655d12"], "...)], then a ", StyleBox["convergent", FontWeight->"Bold"], " of r is any rational number ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["q", "k"], "=", RowBox[{"[", RowBox[{ RowBox[{ FormBox[ SubscriptBox["a", "0"], TraditionalForm], ";", FormBox[ SubscriptBox["a", "1"], TraditionalForm]}], ",", "...", ",", FormBox[ SubscriptBox["a", "k"], TraditionalForm]}], "]"}]}], TraditionalForm]],ExpressionUUID-> "68beb050-d55a-413d-83a8-68e7b0c39c9b"], " where k ranges from 0 to n for rational r, and from 0 to \[Infinity] for \ irrational r." }], "Text", CellChangeTimes->{{3.8280746965380077`*^9, 3.8280748480301027`*^9}},ExpressionUUID->"96023ccb-61b5-4fac-aacb-\ 21efc5cc847a"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Convergents", "[", RowBox[{"521", "/", "437"}], "]"}]], "Input", CellChangeTimes->{{3.828074858533258*^9, 3.82807486854993*^9}, 3.8280854896364202`*^9}, CellLabel->"In[81]:=",ExpressionUUID->"4f80850b-1b2d-4d15-8bb7-700f60dd3db8"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", FractionBox["6", "5"], ",", FractionBox["25", "21"], ",", FractionBox["31", "26"], ",", FractionBox["521", "437"]}], "}"}]], "Output", CellChangeTimes->{{3.828074865229753*^9, 3.828074869066197*^9}, 3.828085490424922*^9}, CellLabel->"Out[81]=",ExpressionUUID->"bee9af0b-123d-4701-b772-d40c99981a87"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", RowBox[{ RowBox[{ RowBox[{"Convergents", "[", RowBox[{"Pi", ",", "20"}], "]"}], "[", RowBox[{"[", RowBox[{"-", "1"}], "]"}], "]"}], ",", "100"}], "]"}]], "Input", CellChangeTimes->{{3.8280748752078543`*^9, 3.828074876434147*^9}, { 3.828085513083417*^9, 3.828085548282955*^9}}, CellLabel->"In[89]:=",ExpressionUUID->"ec0febbd-067f-48e0-8540-66f201341f8c"], Cell[BoxData["3.\ 141592653589793238493875058011560625968327386656178201437773861193884154270529\ 3873379387969364322526931134432555955`100."], "Output", CellChangeTimes->{ 3.82807487664937*^9, {3.828085498221263*^9, 3.828085548486825*^9}}, CellLabel->"Out[89]=",ExpressionUUID->"19771cee-1f2a-464e-b32c-8f2bc5c7571c"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", FractionBox["1146408", "364913"], "]"}]], "Input", CellChangeTimes->{{3.82808550440847*^9, 3.828085507418632*^9}}, CellLabel->"In[83]:=",ExpressionUUID->"6025f8f9-6e05-448f-b4ad-d3393ae57b42"], Cell[BoxData["3.141592653591404`"], "Output", CellChangeTimes->{3.828085508007896*^9}, CellLabel->"Out[83]=",ExpressionUUID->"fc518acc-98ab-4737-b9b9-652824e041fc"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", RowBox[{"Pi", ",", "100"}], "]"}]], "Input", CellChangeTimes->{{3.8280855405087147`*^9, 3.8280855516326513`*^9}}, CellLabel->"In[90]:=",ExpressionUUID->"a34d0d28-3e34-492d-83bb-c0231f98418a"], Cell[BoxData["3.\ 141592653589793238462643383279502884197169399375105820974944592307816406286208\ 9986280348253421170679821480865132823`100."], "Output", CellChangeTimes->{{3.8280855445048437`*^9, 3.8280855518604183`*^9}}, CellLabel->"Out[90]=",ExpressionUUID->"50122c8f-f7eb-4d39-8ada-f5c42fc498a0"] }, Open ]], Cell["\<\ This is the famous Continuous Fraction Theorem, which is the central result \ for Wiener\[CloseCurlyQuote]s attack (and it is also important in Shor\ \[CloseCurlyQuote]s algorithm that breaks RSA with a quantum computer)\ \>", "Text", CellChangeTimes->{{3.832820924865629*^9, 3.832820962117118*^9}, { 3.832869387973138*^9, 3.832869412377952*^9}},ExpressionUUID->"d0ec2062-9e35-48ab-a98f-\ 71323a4da2d3"], Cell[TextData[{ StyleBox["Theorem[CFT]", FontWeight->"Bold"], " Let x be a rational number and let p/q be such that\n|x-p/q|< ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{"(", RowBox[{"2", SuperscriptBox["q", "2"]}]}]}], TraditionalForm]],ExpressionUUID-> "fde84bec-941c-4ad3-964d-fc7230187ed5"], "). Then p/q is a convergent of x. " }], "Text", CellChangeTimes->{{3.732259312864345*^9, 3.732259326454741*^9}, { 3.732259417950569*^9, 3.7322594364466467`*^9}},ExpressionUUID->"07f3f79c-0c7a-45d2-8f3b-\ f4cac32e10c5"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Convergents", "[", RowBox[{ SubsuperscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "4"], " ", RowBox[{"1", "/", RowBox[{"2", "^", RowBox[{"(", RowBox[{"2", "i"}], ")"}]}]}]}], "]"}]], "Input", CellChangeTimes->{{3.7322595257452507`*^9, 3.732259615358712*^9}, { 3.7322596506621733`*^9, 3.732259679861919*^9}, {3.7322597141345453`*^9, 3.732259743661865*^9}, {3.732259820902175*^9, 3.7322598256215477`*^9}, 3.732259862781741*^9, {3.7322772571342*^9, 3.732277269157857*^9}},ExpressionUUID->"e05fb9c4-b0ab-4db0-b9d9-\ 8f00ebd8ebdf"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", FractionBox["1", "3"], ",", FractionBox["85", "256"]}], "}"}]], "Output", CellChangeTimes->{ 3.7322595347050457`*^9, 3.732259611568056*^9, {3.732259661443788*^9, 3.732259680307762*^9}, {3.732259714874588*^9, 3.7322597443924103`*^9}, { 3.73225982183461*^9, 3.732259825978725*^9}, 3.732259863213818*^9, { 3.732277259247211*^9, 3.7322772696605463`*^9}},ExpressionUUID->"2f5cb64d-a33b-4887-a637-\ fc9b96100e35"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Prime", "[", "14", "]"}]], "Input", CellChangeTimes->{{3.828075150130254*^9, 3.8280751533639297`*^9}, { 3.828085710663783*^9, 3.8280857109669333`*^9}}, CellLabel->"In[93]:=",ExpressionUUID->"4dc10073-6ad9-46ef-a3dd-eaa457f418ed"], Cell[BoxData["43"], "Output", CellChangeTimes->{ 3.828075153655761*^9, {3.828085682602357*^9, 3.828085711752841*^9}}, CellLabel->"Out[93]=",ExpressionUUID->"e5bc8a8f-60bb-4a7f-a163-a707760ed3b5"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", RowBox[{"10", "/", "43"}], "]"}]], "Input", CellChangeTimes->{{3.82807516663844*^9, 3.828075173690443*^9}, { 3.8280857153588333`*^9, 3.828085715427607*^9}, {3.828085751152508*^9, 3.828085761750094*^9}},ExpressionUUID->"f64f777d-571c-48d3-ad66-\ 4d8e716130b3"], Cell[BoxData["0.\ 232558139534883720930232558139534883720930232558139534883720930232558139534883\ 7209302325581395348837209302325581395`100."], "Output", CellChangeTimes->{ 3.8280751740898037`*^9, {3.8280856876274633`*^9, 3.82808571632047*^9}, 3.828085753092019*^9}, CellLabel->"Out[96]=",ExpressionUUID->"91db147c-bdad-4dfc-b8cf-90f4ea4681c2"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Convergents", "[", RowBox[{"232558", "/", "1000000"}], "]"}]], "Input", CellChangeTimes->{{3.828075182469043*^9, 3.828075194931966*^9}, 3.828085728847234*^9}, CellLabel->"In[95]:=",ExpressionUUID->"57abca48-3071-4f7f-9a41-ecbdf2cea78e"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", FractionBox["1", "4"], ",", FractionBox["3", "13"], ",", FractionBox["10", "43"], ",", FractionBox["38753", "166638"], ",", FractionBox["38763", "166681"], ",", FractionBox["116279", "500000"]}], "}"}]], "Output", CellChangeTimes->{3.828075195208943*^9, 3.828085733615206*^9}, CellLabel->"Out[95]=",ExpressionUUID->"a1aa6433-d289-4f3b-8fad-da3b711b20a9"] }, Open ]], Cell[BoxData["\[IndentingNewLine]"], "Input", CellChangeTimes->{ 3.8280751222433653`*^9},ExpressionUUID->"f9a999ef-0814-4ca8-a9f6-\ f64f4a86c052"], Cell[TextData[{ StyleBox["Theorem[Wiener]", FontWeight->"Bold"], " Let n=pq, with q "1a9402fb-3ca7-4632-ab1a-7a09b4dbde13"], " then it is possible to recover", StyleBox[" b", FontSlant->"Italic"], " (private key) from ", StyleBox["a (public key) ", FontSlant->"Italic"], "(through the CFT). \n\n", StyleBox["Proof", FontWeight->"Bold"], ": Note q<", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]],ExpressionUUID-> "b8edff9b-0678-435f-b545-931cf5be380f"], " and moreover a*b=1 mod \[Phi](n) and so, there is k such that \ ab-k\[Phi](n)=1. Moreover,\n\n|", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FractionBox["a", RowBox[{"\[Phi]", "(", "n", ")"}]], "-", FractionBox["k", "b"]}], "|"}], "=", FractionBox["1", RowBox[{"b\[Phi]", "(", "n", ")"}]]}], TraditionalForm]],ExpressionUUID-> "438b1d72-30ed-4031-b02f-8ab7bfafbb6f"], ". The idea is approximate \[Phi](n) =(p-1)(q-1) with n=p*q and check \ conditions for which k/b is a convergent.\n\nSince \[Phi](n)=n-p-q+1 and q<", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]],ExpressionUUID-> "85d1915c-e2f8-4205-b8c8-1ba41e7f80d5"], " and p<2", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]],ExpressionUUID-> "c220e984-9ca1-40f1-b575-d3b5cd56bef0"], ", we get that p+q-1<3", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]],ExpressionUUID-> "be30935d-d0ca-47c7-a59e-1edf0b193b02"], " and so,\n|n-\[Phi](n)|<3", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]],ExpressionUUID-> "f7f6d8e8-f42e-4727-9e5d-0b47da4175f1"], "\n\nwe also know that n=\[Phi](n)+p+q-1\n\n|", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox["a", "n"], "-", FractionBox["k", "b"]}], "|"}], TraditionalForm]],ExpressionUUID-> "9423decd-6293-4352-9e81-3b17a972e353"], "=|", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox[ RowBox[{"ab", "-", "kn"}], "nb"], "|"}], "="}], TraditionalForm]], ExpressionUUID->"4495cfce-ce8a-4ba5-91b3-c302b0405854"], "|", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"ab", "-", RowBox[{"k\[Phi]", "(", "n", ")"}], "-", "kp", "-", "kq", "+", "k"}], "nb"], TraditionalForm]],ExpressionUUID-> "9193ac09-d793-4f88-94eb-fea73ec43b87"], "|=|", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"1", "-", "kp", "-", "kq", "+", "k"}], "nb"], TraditionalForm]], ExpressionUUID->"781fac38-d17f-44a5-ae61-104790eb075a"], "|=|", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"1", "-", RowBox[{"k", "(", RowBox[{"p", "+", "q", "-", "1"}], ")"}]}], "nb"], TraditionalForm]], ExpressionUUID->"792266d2-c0db-4972-ac6b-c29e8b2476a7"], "|<|", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"1", "-", RowBox[{"3", "k", SqrtBox["n"]}]}], "nb"], TraditionalForm]],ExpressionUUID-> "d5ab5c61-f790-41ca-b100-42b0d4e0d574"], "|<|", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"3", " ", "k", SqrtBox["n"]}], "nb"], TraditionalForm]],ExpressionUUID-> "585ca866-4e89-4e63-b58f-964102a53316"], "|=", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"3", " ", "k"}], RowBox[{ SqrtBox["n"], "b"}]], TraditionalForm]],ExpressionUUID-> "04bc591d-7ea6-4167-9e0a-0ea993f17ad1"], " (it remains to show that ", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"3", " ", "k"}], RowBox[{ SqrtBox["n"], "b"}]], TraditionalForm]],ExpressionUUID-> "8cdc0ad5-ba37-43c8-bb21-86c73509ab4b"], "< ", Cell[BoxData[ FormBox[ FractionBox["1", RowBox[{"2", SuperscriptBox["b", "2"]}]], TraditionalForm]],ExpressionUUID-> "03ad2394-a496-4f0e-98af-d2d3eb527d91"], ")\n\nk\[Phi](n)=ab-1 "12940b92-94d7-4287-a4ef-685920d20340"], "\n\n", Cell[BoxData[ FormBox[ FractionBox[ RowBox[{"3", " ", "k"}], RowBox[{ SqrtBox["n"], "b"}]], TraditionalForm]],ExpressionUUID-> "513c12c7-491a-4cbf-a450-8b417153975b"], "<", Cell[BoxData[ FormBox[ FractionBox[ SuperscriptBox["n", RowBox[{"1", "/", "4"}]], RowBox[{ SqrtBox["n"], "b"}]], TraditionalForm]],ExpressionUUID-> "8ee74069-24d5-414e-a43e-4c9f50ee261b"], "=", Cell[BoxData[ FormBox[ FractionBox["1", RowBox[{"b", " ", SuperscriptBox["n", RowBox[{"1", "/", "4"}]]}]], TraditionalForm]],ExpressionUUID-> "deccd221-52b0-4e4b-8519-82896abcab6d"], "\n\nsince b<", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["1", "3"], SuperscriptBox["n", RowBox[{"1", "/", "4"}]]}], TraditionalForm]],ExpressionUUID-> "7a1d9c95-81a7-46ab-af88-c74362e4c266"], " so 2b < ", Cell[BoxData[ FormBox[ SuperscriptBox["n", RowBox[{"1", "/", "4"}]], TraditionalForm]],ExpressionUUID-> "cd4a0d41-982b-49e3-97aa-ee67042dbc21"], " so 1/(2b) > 1/", Cell[BoxData[ FormBox[ SuperscriptBox["n", RowBox[{"1", "/", "4"}]], TraditionalForm]],ExpressionUUID-> "dbd645fc-f5f3-48eb-959e-89e56e9a5fa8"], " \n\nthus, ", Cell[BoxData[ FormBox[ FractionBox["1", RowBox[{"b", " ", SuperscriptBox["n", RowBox[{"1", "/", "4"}]]}]], TraditionalForm]],ExpressionUUID-> "1bd8f8de-d6ff-435d-88a2-af6831b539ce"], "<", Cell[BoxData[ FormBox[ FractionBox["1", RowBox[{"2", SuperscriptBox["b", "2"]}]], TraditionalForm]],ExpressionUUID-> "6f76ddf6-171f-4607-afd5-7ff7ec36ba60"], " which then by the CFT implies that k/b is a convergent of a/n.\n\n\n\n", StyleBox["Other attacks:", FontWeight->"Bold"], "\n\[Phi](n)\[TildeTilde]n-2", Cell[BoxData[ FormBox[ SqrtBox["n"], TraditionalForm]],ExpressionUUID-> "09f18410-9847-4087-b042-793e2d6c2e6a"] }], "Text", CellChangeTimes->{{3.732259505773*^9, 3.732259510326062*^9}, { 3.732259944191101*^9, 3.732260121532444*^9}, {3.732260211781416*^9, 3.732260317268262*^9}, {3.732260354181355*^9, 3.732260428046105*^9}, { 3.732260590061512*^9, 3.7322606332543163`*^9}, {3.7322822636114893`*^9, 3.732282282040546*^9}, {3.732282342112108*^9, 3.732282565294962*^9}, { 3.732282607446836*^9, 3.732282665499722*^9}, {3.732282712663553*^9, 3.732282725608322*^9}, {3.732282769956465*^9, 3.7322827750183887`*^9}, { 3.732282820761324*^9, 3.732282826937999*^9}, {3.732282891870565*^9, 3.732282930597324*^9}, {3.732283060843026*^9, 3.7322831394223633`*^9}, { 3.7322831899925632`*^9, 3.732283220554534*^9}, {3.7322832716728783`*^9, 3.7322834837677307`*^9}, 3.732423202316828*^9, {3.828075243034018*^9, 3.828075245178629*^9}, {3.828075322789344*^9, 3.828075331630978*^9}, 3.8280822402331047`*^9, {3.8280859230017853`*^9, 3.828085944678073*^9}, { 3.8280859828090067`*^9, 3.828086177315461*^9}, {3.828086232005048*^9, 3.828086420786193*^9}, {3.828086459496608*^9, 3.8280866892913103`*^9}, { 3.828086733058962*^9, 3.828087027041452*^9}, {3.828089680642356*^9, 3.828089683641972*^9}, {3.8280900809366217`*^9, 3.828090097843103*^9}, { 3.83286950165553*^9, 3.832869520468526*^9}, {3.832870439557373*^9, 3.832870471925511*^9}},ExpressionUUID->"5c1addba-e6c4-4743-af13-\ 54889d095f12"], Cell[BoxData[ FormBox["", TraditionalForm]], "Input", CellChangeTimes->{ 3.7322833261777*^9, {3.732283403112484*^9, 3.732283405084189*^9}},ExpressionUUID->"5adb2045-a971-4201-8cc4-\ f521a45c550a"], Cell[TextData[StyleBox["Example", FontWeight->"Bold"]], "Text", CellChangeTimes->{{3.73227677264122*^9, 3.732276800885976*^9}},ExpressionUUID->"83f3b8cc-6500-4de6-9844-\ 370017887349"], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"p", "=", RowBox[{"Prime", "[", "104500", "]"}]}], "\[IndentingNewLine]", RowBox[{"q", "=", RowBox[{"Prime", "[", "100895", "]"}]}], "\[IndentingNewLine]", RowBox[{"n", "=", RowBox[{"p", "*", "q"}]}]}], "Input", CellChangeTimes->{{3.732276802021884*^9, 3.732276811218172*^9}, { 3.73228220455501*^9, 3.73228221435614*^9}, {3.732289539261932*^9, 3.732289541953127*^9}, {3.828087208590172*^9, 3.82808720889151*^9}, { 3.828087257454084*^9, 3.8280872661419*^9}, {3.8280873187859507`*^9, 3.828087318867531*^9}}, CellLabel-> "In[133]:=",ExpressionUUID->"dc833b00-73d7-4e83-a98c-89c3f96a0c61"], Cell[BoxData["1363367"], "Output", CellChangeTimes->{ 3.732276811550749*^9, {3.732282208673444*^9, 3.732282215349792*^9}, { 3.7322895333778353`*^9, 3.732289542467576*^9}, 3.732291043427039*^9, 3.7324232382315893`*^9, 3.828087166653389*^9, 3.828087209665152*^9, 3.8280872670989733`*^9, 3.828087319680624*^9}, CellLabel-> "Out[133]=",ExpressionUUID->"97cf53a1-c955-4efc-ab2f-55868ddcfd4e"], Cell[BoxData["1312277"], "Output", CellChangeTimes->{ 3.732276811550749*^9, {3.732282208673444*^9, 3.732282215349792*^9}, { 3.7322895333778353`*^9, 3.732289542467576*^9}, 3.732291043427039*^9, 3.7324232382315893`*^9, 3.828087166653389*^9, 3.828087209665152*^9, 3.8280872670989733`*^9, 3.8280873196818113`*^9}, CellLabel-> "Out[134]=",ExpressionUUID->"ac28cd03-a1fe-4e84-848d-6165589e183b"], Cell[BoxData["1789115156659"], "Output", CellChangeTimes->{ 3.732276811550749*^9, {3.732282208673444*^9, 3.732282215349792*^9}, { 3.7322895333778353`*^9, 3.732289542467576*^9}, 3.732291043427039*^9, 3.7324232382315893`*^9, 3.828087166653389*^9, 3.828087209665152*^9, 3.8280872670989733`*^9, 3.828087319683878*^9}, CellLabel-> "Out[135]=",ExpressionUUID->"a7ab8eed-d5e3-436d-a0a1-ab629da689ee"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"N", "[", RowBox[{ RowBox[{"1", "/", "3"}], RowBox[{"n", "^", RowBox[{"(", RowBox[{"1", "/", "4"}], ")"}]}]}], "]"}]], "Input", CellChangeTimes->{{3.73227681685915*^9, 3.732276843660657*^9}}, CellLabel-> "In[211]:=",ExpressionUUID->"51603f77-84bd-4d20-8c05-fdb83cc55219"], Cell[BoxData["385.5123709886236`"], "Output", CellChangeTimes->{3.8280871724232607`*^9, 3.828087210543824*^9, 3.828087281579351*^9, 3.82808732171974*^9, 3.828087945083956*^9}, CellLabel-> "Out[211]=",ExpressionUUID->"c4d31f07-b65b-485e-b1b3-9a5ee687b497"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{"b", "=", "151593"}], "\[IndentingNewLine]", RowBox[{"a", "=", RowBox[{"PowerMod", "[", RowBox[{"b", ",", RowBox[{"-", "1"}], ",", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}]}]}], "]"}]}]}], "Input", CellChangeTimes->{{3.732276851943399*^9, 3.732276882564973*^9}, { 3.732289584196384*^9, 3.732289607141233*^9}, {3.7322896419438353`*^9, 3.732289662980551*^9}, {3.732289697112116*^9, 3.7322896997575827`*^9}, 3.732290694763453*^9, {3.732290733690646*^9, 3.732290733871113*^9}, { 3.732290869392089*^9, 3.732290872248595*^9}, {3.7322909172861633`*^9, 3.732290989258312*^9}, {3.732291038066319*^9, 3.732291038466275*^9}, { 3.732337120101622*^9, 3.732337126386842*^9}, {3.732337221946684*^9, 3.732337240429439*^9}, {3.732423224860351*^9, 3.732423224897541*^9}, { 3.828087198115999*^9, 3.82808722902105*^9}, {3.828087271952159*^9, 3.828087341551386*^9}, {3.828087403433981*^9, 3.828087403968658*^9}, { 3.828087440399922*^9, 3.82808748566108*^9}, {3.828087635609627*^9, 3.82808763584814*^9}, {3.828087693376569*^9, 3.828087761380342*^9}, { 3.828087952298107*^9, 3.8280879545581284`*^9}, 3.8280901487045927`*^9}, CellLabel-> "In[215]:=",ExpressionUUID->"4013d986-a627-4523-8087-931626c53d30"], Cell[BoxData["151593"], "Output", CellChangeTimes->{{3.828087182790595*^9, 3.828087229411001*^9}, { 3.828087276710751*^9, 3.828087341757514*^9}, 3.828087404470221*^9, { 3.828087441869135*^9, 3.828087486442376*^9}, 3.828087636318268*^9, { 3.828087693776457*^9, 3.828087761898519*^9}, 3.828087955004559*^9, 3.8280901498949203`*^9}, CellLabel-> "Out[215]=",ExpressionUUID->"7363d6e6-5e10-4f8e-9125-ae6801769c6a"], Cell[BoxData["429642864505"], "Output", CellChangeTimes->{{3.828087182790595*^9, 3.828087229411001*^9}, { 3.828087276710751*^9, 3.828087341757514*^9}, 3.828087404470221*^9, { 3.828087441869135*^9, 3.828087486442376*^9}, 3.828087636318268*^9, { 3.828087693776457*^9, 3.828087761898519*^9}, 3.828087955004559*^9, 3.828090149896504*^9}, CellLabel-> "Out[216]=",ExpressionUUID->"026c3dc8-d937-41be-8141-065ec46c718f"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"FactorInteger", "[", "251597", "]"}]], "Input", CellChangeTimes->{{3.828087505741803*^9, 3.8280875665886106`*^9}, 3.828087652144999*^9, {3.828087720290344*^9, 3.828087720369629*^9}}, CellLabel-> "In[192]:=",ExpressionUUID->"92453346-cf07-4bb1-942a-2e0a11e0ed5b"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"23", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"10939", ",", "1"}], "}"}]}], "}"}]], "Output", CellChangeTimes->{{3.828087516402766*^9, 3.828087567315474*^9}, 3.8280876527295313`*^9, 3.828087720784876*^9}, CellLabel-> "Out[192]=",ExpressionUUID->"bdcb3bd7-6758-4015-bf24-3806b011f389"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"151593", "/", "23"}]], "Input", CellChangeTimes->{{3.828087578132621*^9, 3.828087630709655*^9}, { 3.828087723057357*^9, 3.8280877244930468`*^9}}, CellLabel-> "In[193]:=",ExpressionUUID->"1c37bf75-2d0e-45fe-b8d1-8bae9f074be7"], Cell[BoxData["6591"], "Output", CellChangeTimes->{{3.828087580725525*^9, 3.828087631072941*^9}, 3.828087724934989*^9}, CellLabel-> "Out[193]=",ExpressionUUID->"ed7586cd-ad3e-4255-a4f7-267a4a971a57"] }, Open ]], Cell[BoxData[ RowBox[{"n", "-", RowBox[{"EulerPhi", "[", "n", "]"}]}]], "Input", CellChangeTimes->{{3.8280877784044323`*^9, 3.828087791333706*^9}}, CellLabel-> "In[202]:=",ExpressionUUID->"bee21985-8a4b-4c56-b1ae-620161e36f03"], Cell[BoxData[ RowBox[{"2675643", "\[IndentingNewLine]", "\[IndentingNewLine]"}]], "Input", CellChangeTimes->{{3.828087800328638*^9, 3.82808782790541*^9}},ExpressionUUID->"e179ad91-f53d-40e3-8aff-\ 8fd8f2f7c57e"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Convergents", "[", RowBox[{ RowBox[{"a", "/", "n"}], ",", "20"}], "]"}]], "Input", CellChangeTimes->{{3.828087424684052*^9, 3.828087435482287*^9}, 3.828087595998581*^9, {3.8280876633810167`*^9, 3.828087685360957*^9}, { 3.828087745497827*^9, 3.828087754241061*^9}, {3.828087869358774*^9, 3.828087929502288*^9}, 3.828087961315235*^9}, CellLabel-> "In[217]:=",ExpressionUUID->"1d9d052c-95f9-4b53-8778-a9899bc0610b"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", FractionBox["1", "4"], ",", FractionBox["6", "25"], ",", FractionBox["67", "279"], ",", FractionBox["1145", "4768"], ",", FractionBox["1212", "5047"], ",", FractionBox["12053", "50191"], ",", FractionBox["13265", "55238"], ",", FractionBox["118173", "492095"], ",", FractionBox["485957", "2023618"], ",", FractionBox["604130", "2515713"], ",", FractionBox["6527257", "27180748"], ",", FractionBox["91985728", "383046185"], ",", FractionBox["558441625", "2325457858"], ",", FractionBox["650427353", "2708504043"], ",", FractionBox["4461005743", "18576482116"], ",", FractionBox["5111433096", "21284986159"], ",", FractionBox["9572438839", "39861468275"], ",", FractionBox["14683871935", "61146454434"], ",", FractionBox["82991798514", "345593740445"]}], "}"}]], "Output", CellChangeTimes->{{3.828087896216301*^9, 3.828087961783031*^9}, 3.828090154916471*^9}, CellLabel-> "Out[217]=",ExpressionUUID->"fe041bee-dd26-42c3-ba3a-3859c00b5dc1"] }, Open ]], Cell[BoxData[{ RowBox[{"b", "=", "19"}], "\[IndentingNewLine]", RowBox[{"a", "=", RowBox[{"PowerMod", "[", RowBox[{"b", ",", RowBox[{"-", "1"}], ",", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Prime", "[", "1000", "]"}], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ RowBox[{"Prime", "[", "1005", "]"}], "-", "1"}], ")"}]}]}], "]"}]}]}], "Input", CellChangeTimes->{{3.73227719297856*^9, 3.7322771985147448`*^9}},ExpressionUUID->"b4bd3927-af46-44f6-9c6e-\ 6a594d49556e"] }, Open ]] }, Open ]] }, WindowSize->{1344, 1238}, WindowMargins->{{Automatic, 13}, {999, Automatic}}, PrintingCopies->1, PrintingPageRange->{1, Automatic}, Magnification:>1.5 Inherited, FrontEndVersion->"12.1 for Mac OS X x86 (64-bit) (June 19, 2020)", StyleDefinitions->"Default.nb", ExpressionUUID->"3d2d1f3d-001d-407f-874e-b9017cc60350" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[558, 20, 147, 3, 78, "Input",ExpressionUUID->"46321f9b-daab-4715-b1e3-8a28b1f44d77"], Cell[708, 25, 32338, 499, 273, "Input",ExpressionUUID->"3741c1dc-4876-4d91-b1a8-b4e6426795c8"], Cell[33049, 526, 182, 3, 103, "Chapter",ExpressionUUID->"593644f5-8844-4583-bafc-9db5a522d8d5"], Cell[CellGroupData[{ Cell[33256, 533, 318, 5, 84, "Chapter",ExpressionUUID->"54c4424a-d883-4fe4-850c-86c79f6f79db"], Cell[CellGroupData[{ Cell[33599, 542, 573, 9, 101, "Section",ExpressionUUID->"383abcf7-f5f6-4483-a1f5-79c8e60fc8fc"], Cell[34175, 553, 3526, 83, 820, "Text",ExpressionUUID->"2fb89456-433e-465a-be37-d26bbf7145e3"] }, Open ]], Cell[CellGroupData[{ Cell[37738, 641, 625, 9, 101, "Section",ExpressionUUID->"e37b483f-5d8b-46e1-b021-ea2ff3113515"], Cell[38366, 652, 1263, 33, 234, "Text",ExpressionUUID->"df4990e0-3e40-435e-b9b8-8cbb2c933dc1"], Cell[CellGroupData[{ Cell[39654, 689, 159, 3, 81, "Subsection",ExpressionUUID->"929264a8-c59a-4e95-bdbc-1f29b0afb16e"], Cell[39816, 694, 7178, 203, 858, "Text",ExpressionUUID->"a134f073-5d84-42ae-8134-edd44c2b8868"], Cell[46997, 899, 408, 12, 46, "Input",ExpressionUUID->"a93ac17d-3664-452e-9186-29960f97abe4"], Cell[47408, 913, 744, 22, 46, "Input",ExpressionUUID->"eee6fec9-04f4-4174-a25d-a67eaa15844c"], Cell[CellGroupData[{ Cell[48177, 939, 347, 10, 46, "Input",ExpressionUUID->"536f3dff-2145-4fb5-be88-7029ee150a42"], Cell[48527, 951, 201, 5, 52, "Output",ExpressionUUID->"3491174d-cf79-450e-88a8-8484aa96cfab"] }, Open ]], Cell[48743, 959, 7079, 184, 1313, "Text",ExpressionUUID->"9e1ce0c5-2b9d-48b9-9dce-7be4504ca090"], Cell[CellGroupData[{ Cell[55847, 1147, 585, 12, 46, "Input",ExpressionUUID->"f1ab865f-a087-41b4-af00-6401593281bd"], Cell[56435, 1161, 608, 11, 52, "Output",ExpressionUUID->"98c412a0-7e22-479e-916c-005411aa0475"] }, Open ]], Cell[57058, 1175, 410, 12, 46, "Input",ExpressionUUID->"a0a98574-a10e-4ae5-9e9c-3e492cc31c29"], Cell[57471, 1189, 179, 3, 53, "Text",ExpressionUUID->"95d79517-0675-4149-97ca-a085cb5dc107"], Cell[CellGroupData[{ Cell[57675, 1196, 192, 4, 46, "Input",ExpressionUUID->"dd999049-0c7a-4582-bd32-031c95d83505"], Cell[57870, 1202, 131, 3, 52, "Output",ExpressionUUID->"cbf44ee4-c58b-45bf-ba2e-914e787bbac5"] }, Open ]], Cell[CellGroupData[{ Cell[58038, 1210, 233, 6, 46, "Input",ExpressionUUID->"79dadf5c-1941-44ef-838f-74fbfc58ae34"], Cell[58274, 1218, 130, 3, 52, "Output",ExpressionUUID->"60902794-3eae-43c1-9210-d351503b2da0"] }, Open ]], Cell[58419, 1224, 1571, 44, 163, "Text",ExpressionUUID->"910cc155-3bf9-4a6b-ba98-1c21a60a1952"], Cell[CellGroupData[{ Cell[60015, 1272, 278, 6, 78, "Input",ExpressionUUID->"875cb4cb-8c25-4fa9-94c9-8b1cf096faef"], Cell[60296, 1280, 172, 3, 52, "Output",ExpressionUUID->"4b266bee-d56f-4f89-a67f-49524ecfbc99"], Cell[60471, 1285, 172, 3, 52, "Output",ExpressionUUID->"36a7b425-824a-4352-b794-a65305dcd3da"] }, Open ]], Cell[CellGroupData[{ Cell[60680, 1293, 206, 5, 46, "Input",ExpressionUUID->"2d044899-0247-4053-b9b9-5a6343c223c5"], Cell[60889, 1300, 154, 3, 52, "Output",ExpressionUUID->"c24ca290-6754-4f35-819e-fe0203992896"] }, Open ]], Cell[CellGroupData[{ Cell[61080, 1308, 272, 6, 46, "Input",ExpressionUUID->"e1e46e76-404a-46cf-9f5e-aabc775b3941"], Cell[61355, 1316, 156, 3, 52, "Output",ExpressionUUID->"90ea62de-e817-45f0-bf60-84ba2f59b464"] }, Open ]], Cell[61526, 1322, 5304, 152, 833, "Text",ExpressionUUID->"39b1b228-a500-4115-aaf8-dc3267dcf361"], Cell[CellGroupData[{ Cell[66855, 1478, 953, 26, 78, "Input",ExpressionUUID->"594d4df4-1d4f-4be8-97a6-99aba41eaf19"], Cell[67811, 1506, 236, 4, 52, "Output",ExpressionUUID->"f271908b-31f8-4539-b5b2-b5f5dd8c56e2"], Cell[68050, 1512, 236, 4, 52, "Output",ExpressionUUID->"3f97ae02-fb51-4c46-a0fb-c54f8cef0eb1"] }, Open ]], Cell[CellGroupData[{ Cell[68323, 1521, 419, 10, 46, "Input",ExpressionUUID->"da3fec29-674b-4b9e-9968-0927729a5ec5"], Cell[68745, 1533, 361, 6, 52, "Output",ExpressionUUID->"7719ce68-4f06-4a2a-b346-aa011344eb65"] }, Open ]], Cell[CellGroupData[{ Cell[69143, 1544, 262, 6, 46, "Input",ExpressionUUID->"22bf3961-6db1-4583-ba62-df02279c3c1f"], Cell[69408, 1552, 332, 6, 52, "Output",ExpressionUUID->"491e914b-4d65-47c2-b987-eef72182f5d5"] }, Open ]], Cell[CellGroupData[{ Cell[69777, 1563, 362, 8, 46, "Input",ExpressionUUID->"ab1ba616-3a44-4567-b2a9-aff6f31eef2c"], Cell[70142, 1573, 258, 4, 52, "Output",ExpressionUUID->"a6fc92fc-8179-4cd0-91dc-70fa6b4e10e8"] }, Open ]], Cell[CellGroupData[{ Cell[70437, 1582, 219, 5, 46, "Input",ExpressionUUID->"0f86434e-81dc-4c2b-b377-c74762a83f13"], Cell[70659, 1589, 141, 3, 52, "Output",ExpressionUUID->"108d72a4-d6cb-46bb-9c7c-24a563415cac"] }, Open ]], Cell[CellGroupData[{ Cell[70837, 1597, 234, 5, 46, "Input",ExpressionUUID->"59775cc7-a75c-4bf0-982a-68cbb940abd2"], Cell[71074, 1604, 134, 2, 52, "Output",ExpressionUUID->"38e1d6d2-d8fb-4205-bfb3-9755aa88f0c6"] }, Open ]], Cell[71223, 1609, 474, 14, 78, "Input",ExpressionUUID->"6dee4910-8aec-4e90-bc3b-6c3d04cb812d"], Cell[CellGroupData[{ Cell[71722, 1627, 211, 4, 46, "Input",ExpressionUUID->"b5c322ef-ed54-479c-857a-466b14fe9d9e"], Cell[71936, 1633, 214, 4, 52, "Output",ExpressionUUID->"3103e743-7429-47b0-bb7a-692412710bd6"] }, Open ]], Cell[CellGroupData[{ Cell[72187, 1642, 364, 7, 46, "Input",ExpressionUUID->"1631249c-e8e9-42ce-be8e-3368b083c61b"], Cell[72554, 1651, 333, 6, 52, "Output",ExpressionUUID->"bd62b1f2-615e-477a-95a0-d23fe420aa56"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[72936, 1663, 173, 3, 81, "Subsection",ExpressionUUID->"0de0b75a-094f-4883-bc35-4876e47d98c8"], Cell[73112, 1668, 3940, 102, 611, "Text",ExpressionUUID->"94169efc-6cb3-429e-b95e-1b02f23c2572"], Cell[77055, 1772, 3665, 87, 454, "Input",ExpressionUUID->"5baefc6a-f49f-4706-ad4f-046af33c8b4d"], Cell[80723, 1861, 273, 6, 53, "Text",ExpressionUUID->"f6eeb6a4-3ffe-4a4a-a7a5-32f47fd6bd64"], Cell[CellGroupData[{ Cell[81021, 1871, 332, 7, 78, "Input",ExpressionUUID->"7a322199-3bf7-4a90-aa0e-ac920459650f"], Cell[81356, 1880, 180, 2, 52, "Output",ExpressionUUID->"7d371d94-ff42-4a2d-9f84-9d2741c8b1a2"] }, Open ]], Cell[81551, 1885, 463, 13, 46, "Input",ExpressionUUID->"f16e24dc-3a70-4f9f-8001-12f086465ab1"], Cell[CellGroupData[{ Cell[82039, 1902, 217, 5, 46, "Input",ExpressionUUID->"53e8d73b-8332-4d14-8768-9696d3cc2e19"], Cell[82259, 1909, 154, 3, 52, "Output",ExpressionUUID->"50b09fe9-29c2-40ac-b07e-7091bad890b8"] }, Open ]], Cell[82428, 1915, 4146, 116, 987, "Text",ExpressionUUID->"27d7eb9e-6c30-4e66-a4d1-c1144c820cdc"], Cell[86577, 2033, 202, 3, 53, "Text",ExpressionUUID->"27863268-840f-46fa-b9c8-e2b8802d6786"], Cell[CellGroupData[{ Cell[86804, 2040, 793, 21, 78, "Input",ExpressionUUID->"17766144-9ccd-48ee-a903-37938139ff66"], Cell[87600, 2063, 345, 8, 52, "Output",ExpressionUUID->"a021f1d0-c92b-4551-b473-6440acd8c918"] }, Open ]], Cell[87960, 2074, 239, 5, 46, "Input",ExpressionUUID->"3c88c30d-9bba-4ae4-a1bf-0b34ab2a6e8a"], Cell[88202, 2081, 2012, 60, 193, "Text",ExpressionUUID->"769300d0-2812-423b-9bc5-815286c9d711"], Cell[CellGroupData[{ Cell[90239, 2145, 306, 7, 46, "Input",ExpressionUUID->"0b5cc38a-04e2-48a4-aa6e-8dfdbe2efba6"], Cell[90548, 2154, 572, 18, 68, "Output",ExpressionUUID->"44855722-e094-4ed0-b9a3-915f2a26b837"] }, Open ]], Cell[91135, 2175, 176, 3, 53, "Text",ExpressionUUID->"61b24a3a-0ebd-443c-9728-9302e08127c9"], Cell[91314, 2180, 787, 24, 126, "Input",ExpressionUUID->"3c354a52-829b-4509-b030-e72d06dbe10e"], Cell[92104, 2206, 214, 4, 53, "Text",ExpressionUUID->"4345ae84-3919-419d-8afd-1ec6594f0d0b"], Cell[CellGroupData[{ Cell[92343, 2214, 503, 12, 46, "Input",ExpressionUUID->"4312db05-aace-44e9-b78a-3eaac84d811d"], Cell[92849, 2228, 176, 2, 52, "Output",ExpressionUUID->"71d9fc1d-d68b-47a5-b17d-b9944bab255c"] }, Open ]], Cell[CellGroupData[{ Cell[93062, 2235, 544, 14, 78, "Input",ExpressionUUID->"f4ec049d-b5e2-4ff0-bb1d-fc309b9490cf"], Cell[93609, 2251, 176, 2, 52, "Output",ExpressionUUID->"dead3d6d-5106-4457-8a8b-0e662d757c7a"] }, Open ]], Cell[93800, 2256, 291, 6, 53, "Text",ExpressionUUID->"1aa1e753-fac5-4040-b877-35fabc53aecb"], Cell[94094, 2264, 356, 8, 46, "Input",ExpressionUUID->"83ffb510-63d5-46bc-b2c4-285410777d9f"], Cell[94453, 2274, 267, 6, 53, "Text",ExpressionUUID->"66174ab0-d8e8-4705-9ae6-c6384f446be1"], Cell[CellGroupData[{ Cell[94745, 2284, 412, 9, 46, "Input",ExpressionUUID->"3de8237d-8683-444d-9f9e-53ca403e57a3"], Cell[95160, 2295, 588, 19, 86, "Output",ExpressionUUID->"5f23f720-c4d0-4cf2-90bb-20d3a031ebd4"] }, Open ]], Cell[95763, 2317, 202, 3, 53, "Text",ExpressionUUID->"55e6f266-8abe-42b1-bfd3-c18d9a73b9e8"], Cell[CellGroupData[{ Cell[95990, 2324, 667, 21, 94, "Input",ExpressionUUID->"8c2b86c3-9418-43ad-922c-f57ebef3416d"], Cell[96660, 2347, 739, 27, 87, "Output",ExpressionUUID->"53249cf5-8978-420c-a53b-c7bd28b2efac"] }, Open ]], Cell[97414, 2377, 916, 31, 94, "Input",ExpressionUUID->"0d37cc03-8039-4aad-82be-ddc5f9f05047"], Cell[CellGroupData[{ Cell[98355, 2412, 240, 4, 46, "Input",ExpressionUUID->"29342228-8361-45c4-9ebd-f47f6f8a5dc9"], Cell[98598, 2418, 250, 3, 52, "Output",ExpressionUUID->"06352ee8-d2bd-4e49-bea3-5eb951bf3d70"] }, Open ]], Cell[CellGroupData[{ Cell[98885, 2426, 354, 11, 69, "Input",ExpressionUUID->"891b5bba-b1ad-44f7-adbd-bb56ea37c3de"], Cell[99242, 2439, 166, 2, 52, "Output",ExpressionUUID->"68ba3ec1-05b2-41ef-93ed-aa4bb67553ac"] }, Open ]], Cell[CellGroupData[{ Cell[99445, 2446, 299, 9, 56, "Input",ExpressionUUID->"672e7ee8-f1a6-420e-a964-fb5af0dbaea2"], Cell[99747, 2457, 173, 3, 52, "Output",ExpressionUUID->"9cc4a3a0-5dd5-45d7-915f-1c99e812b711"] }, Open ]], Cell[99935, 2463, 763, 18, 59, "Text",ExpressionUUID->"440cbf97-e086-4ead-bab6-79672fef11cc"], Cell[100701, 2483, 1778, 41, 260, "Text",ExpressionUUID->"7b59f010-82ce-4c45-a04d-481b221ca877"], Cell[CellGroupData[{ Cell[102504, 2528, 175, 3, 67, "Subsubsection",ExpressionUUID->"bf9f6c2d-d20e-4cff-94aa-fe4135ab8f55"], Cell[102682, 2533, 688, 18, 46, "Input",ExpressionUUID->"3dbda3e0-a826-4188-9521-a4f21ca162ad"], Cell[103373, 2553, 217, 5, 46, "Input",ExpressionUUID->"1124d9da-b6b4-43f4-a7ac-a0697f22f0c8"], Cell[103593, 2560, 1209, 21, 571, "Text",ExpressionUUID->"00ec4ccd-cb63-4e01-9057-439ec6acdf15"], Cell[104805, 2583, 205, 4, 46, "Input",ExpressionUUID->"e66a3df3-2959-4df4-b7b9-a0f1834d8ba2"], Cell[105013, 2589, 2439, 61, 239, "Input",ExpressionUUID->"eba12171-3a78-48fe-8f57-a482fd2cb2fb"], Cell[107455, 2652, 379, 11, 191, "Text",ExpressionUUID->"48181bfd-e6e2-4fdd-8e5e-ee88c39eb3cd"], Cell[107837, 2665, 377, 9, 46, "Input",ExpressionUUID->"4bd351d8-d6b5-4479-b7e8-6c46d05c76a2"], Cell[CellGroupData[{ Cell[108239, 2678, 415, 7, 46, "Input",ExpressionUUID->"e08f62e6-17dd-413d-a3fb-ec8a3e594185"], Cell[108657, 2687, 353, 5, 52, "Output",ExpressionUUID->"878526cc-fc47-45bb-aca6-e1be2008c152"] }, Open ]], Cell[109025, 2695, 210, 4, 53, "Text",ExpressionUUID->"0a3b5cec-4026-41dc-ad3c-058e79958fa0"], Cell[CellGroupData[{ Cell[109260, 2703, 237, 5, 46, "Input",ExpressionUUID->"6db3fe84-385e-43c8-a7be-4639b1168e10"], Cell[109500, 2710, 151, 2, 52, "Output",ExpressionUUID->"14463ed0-b48d-43f3-b306-424f49fb5723"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[109700, 2718, 168, 3, 67, "Subsubsection",ExpressionUUID->"cdc4575c-abd4-4cf2-8ccc-af102e853bc0"], Cell[109871, 2723, 798, 14, 122, "Text",ExpressionUUID->"43e2fb16-904b-4574-b203-6f3045178301"], Cell[110672, 2739, 1145, 30, 54, "Text",ExpressionUUID->"60f831ce-9258-4094-a997-b3e04c0013af"], Cell[CellGroupData[{ Cell[111842, 2773, 505, 13, 78, "Input",ExpressionUUID->"7170d50c-a4a0-49ad-9b21-419720ac0b30"], Cell[112350, 2788, 319, 6, 52, "Output",ExpressionUUID->"ef828736-7a67-4af6-a226-3c73ffbf7e64"] }, Open ]], Cell[112684, 2797, 3272, 62, 434, "Text",ExpressionUUID->"3ec046b4-0713-4a7a-a2ab-dde5c10ef4cf"], Cell[115959, 2861, 2433, 70, 303, "Text",ExpressionUUID->"80ef880b-5099-4ef7-9e6d-2e3b1bb415fd"], Cell[118395, 2933, 1435, 36, 332, "Text",ExpressionUUID->"add155b8-d5cc-471a-bd54-49d0b0b50e4e"], Cell[119833, 2971, 1615, 36, 504, "Text",ExpressionUUID->"d7916c62-73bc-49bd-93fa-40cc5bee2826"], Cell[CellGroupData[{ Cell[121473, 3011, 288, 6, 46, "Input",ExpressionUUID->"fbc121ad-5ba7-4341-a127-8b304504ba43"], Cell[121764, 3019, 180, 2, 52, "Output",ExpressionUUID->"ef68af12-09d4-42df-8057-81212ae49427"] }, Open ]], Cell[CellGroupData[{ Cell[121981, 3026, 508, 13, 46, "Input",ExpressionUUID->"315b8ec8-be97-49ef-8b64-ec77273dd391"], Cell[CellGroupData[{ Cell[122514, 3043, 176, 4, 36, "Print",ExpressionUUID->"ef3e2968-5ec9-4492-8c72-112e69bdb372"], Cell[122693, 3049, 179, 4, 36, "Print",ExpressionUUID->"1dffa995-91b6-444e-8a0c-2fd1e9814464"], Cell[122875, 3055, 181, 4, 36, "Print",ExpressionUUID->"5e64c237-be7a-483a-befa-c72849929fd7"], Cell[123059, 3061, 181, 4, 36, "Print",ExpressionUUID->"78bc9cf9-686f-40a3-94e3-505e61d3ff39"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[123289, 3071, 257, 5, 46, "Input",ExpressionUUID->"55757345-c8e5-40ff-bfd9-3656e68075f3"], Cell[123549, 3078, 176, 2, 52, "Output",ExpressionUUID->"3a7ad223-eb75-42c7-aeb1-fad198f5a7af"] }, Open ]], Cell[CellGroupData[{ Cell[123762, 3085, 184, 3, 46, "Input",ExpressionUUID->"d53250da-4dd6-4aa6-a3fa-0fb05822b58d"], Cell[123949, 3090, 178, 2, 52, "Output",ExpressionUUID->"7265b21c-e9c0-427b-9101-07100e7395a3"] }, Open ]], Cell[124142, 3095, 4189, 94, 402, "Text",ExpressionUUID->"733edd89-147a-4f9b-a129-c73cce87ea27"], Cell[128334, 3191, 5227, 121, 582, "Text",ExpressionUUID->"26bf7c40-91d7-4aaf-9818-bb8787cead16"], Cell[133564, 3314, 5514, 133, 353, "Text",ExpressionUUID->"7109aa57-8e45-44fe-9e11-84da786acd62"], Cell[139081, 3449, 2911, 87, 434, "Text",ExpressionUUID->"282a484e-606e-45d3-9f0d-d4dff408657f"], Cell[141995, 3538, 2432, 68, 238, "Text",ExpressionUUID->"d8106451-efd9-4619-8651-b6339fff7abd"], Cell[144430, 3608, 6158, 182, 384, "Text",ExpressionUUID->"3452cd46-f705-4bdf-8c00-18abac406218"], Cell[150591, 3792, 1370, 31, 163, "Text",ExpressionUUID->"3bdf3a2f-03f4-4673-af03-837bccbc0d3d"], Cell[151964, 3825, 4352, 104, 544, "Input",ExpressionUUID->"0c1a3090-bb77-48e4-980c-8d09454f40ff"], Cell[CellGroupData[{ Cell[156341, 3933, 262, 4, 46, "Input",ExpressionUUID->"687c1b68-7931-4d17-8c98-33dba62fa729"], Cell[156606, 3939, 173, 2, 52, "Output",ExpressionUUID->"e11e4479-14cd-4b36-ab4f-d4af35985060"] }, Open ]], Cell[CellGroupData[{ Cell[156816, 3946, 265, 4, 46, "Input",ExpressionUUID->"9b037b1c-910e-4798-b93f-7722c4cb5546"], Cell[157084, 3952, 173, 2, 52, "Output",ExpressionUUID->"65a6ea01-7b3c-4664-9d8b-6e910b04a0d5"] }, Open ]], Cell[157272, 3957, 1913, 54, 169, "Text",ExpressionUUID->"e95cf6d4-bb2a-4323-8ec9-3c95bdf96572"], Cell[159188, 4013, 10046, 258, 855, "Text",ExpressionUUID->"46424d0c-217d-4771-9307-5af2b0703a0b"], Cell[169237, 4273, 8586, 216, 392, "Text",ExpressionUUID->"8348ff72-9092-43c7-b6be-deb9265da026"], Cell[177826, 4491, 12250, 332, 1305, "Text",ExpressionUUID->"79e684cf-84b4-4b5c-945b-53cf4b880d4f"], Cell[190079, 4825, 6028, 111, 198, "Text",ExpressionUUID->"6cd1e15e-92f7-408e-a049-2c16a4a8ec1f"], Cell[196110, 4938, 8713, 184, 663, "Text",ExpressionUUID->"b3fdb2ea-24e2-4e1f-a69b-b3ea41599c9c"], Cell[204826, 5124, 2568, 60, 388, "Input",ExpressionUUID->"c9e5d8c6-f931-4d0b-878c-49fc4fd3ed25"], Cell[207397, 5186, 215, 5, 53, "Text",ExpressionUUID->"9b15fd4f-74f7-41ae-9c90-d9b8e5315e73"], Cell[CellGroupData[{ Cell[207637, 5195, 285, 5, 46, "Input",ExpressionUUID->"5609280d-938c-4fc2-a3d7-0beb99f279f0"], Cell[207925, 5202, 228, 3, 52, "Output",ExpressionUUID->"1f94b94d-a9c8-4115-ba19-59b8323a7c20"] }, Open ]], Cell[CellGroupData[{ Cell[208190, 5210, 214, 3, 46, "Input",ExpressionUUID->"970146ab-1040-4262-bcb1-cb8295bd4d52"], Cell[208407, 5215, 187, 2, 52, "Output",ExpressionUUID->"e19ff616-4b88-4baf-a1ce-3df113f8abed"] }, Open ]], Cell[CellGroupData[{ Cell[208631, 5222, 1649, 39, 388, "Input",ExpressionUUID->"ffb33b18-fe3b-44a5-a937-97c0d3b8917f"], Cell[210283, 5263, 174, 3, 52, "Output",ExpressionUUID->"b0af64a5-8fe8-479d-ab91-45643221a05c"], Cell[210460, 5268, 174, 3, 52, "Output",ExpressionUUID->"ca389d55-f64e-492b-9407-4b1aa349f6ae"] }, Open ]], Cell[CellGroupData[{ Cell[210671, 5276, 129, 3, 46, "Input",ExpressionUUID->"08e7fd02-0a25-4971-a5c0-b537b287dc6b"], Cell[210803, 5281, 298, 5, 52, "Output",ExpressionUUID->"e8d0ba1b-c666-4487-8b38-ebb0360588a9"] }, Open ]], Cell[CellGroupData[{ Cell[211138, 5291, 208, 4, 46, "Input",ExpressionUUID->"31197457-33bd-4615-b840-46b238e7a5d5"], Cell[211349, 5297, 179, 3, 52, "Output",ExpressionUUID->"a195dd41-9b52-4290-ac7b-99814f084f70"] }, Open ]], Cell[CellGroupData[{ Cell[211565, 5305, 326, 7, 46, "Input",ExpressionUUID->"ed5b1265-bdd9-429d-8f79-4609688e45a9"], Cell[211894, 5314, 133, 3, 52, "Output",ExpressionUUID->"85bbb99a-d9a2-41ed-bb90-49a157751545"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[212076, 5323, 188, 3, 67, "Subsubsection",ExpressionUUID->"4f1d0cf2-a833-4ba0-92c2-a89c574bb67a"], Cell[212267, 5328, 2309, 59, 690, "Text",ExpressionUUID->"ee0eecea-f024-4e29-86aa-bd197678064b"], Cell[CellGroupData[{ Cell[214601, 5391, 491, 13, 46, "Input",ExpressionUUID->"1cf72445-6fa1-4f40-9b61-fce94708cc9c"], Cell[215095, 5406, 60697, 1008, 343, "Output",ExpressionUUID->"c5effa46-e2e7-4d6c-831b-837d2f2159eb"] }, Open ]] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[275865, 6422, 161, 3, 101, "Section",ExpressionUUID->"d44f1847-4b15-46d6-b114-aaf0c3dc57d1"], Cell[CellGroupData[{ Cell[276051, 6429, 272, 4, 67, "Subsubsection",ExpressionUUID->"5ea3337a-3e48-49be-aea0-0ad91fe97eea"], Cell[276326, 6435, 802, 20, 124, "Text",ExpressionUUID->"fce0ceb3-8afa-4c54-be69-166d836cdbb3"], Cell[277131, 6457, 218, 5, 46, "Input",ExpressionUUID->"8479b522-b145-4c79-b0b2-e6051351e912"], Cell[CellGroupData[{ Cell[277374, 6466, 580, 17, 46, "Input",ExpressionUUID->"976e3f98-64f1-4b54-8fba-b9d9a515a006"], Cell[277957, 6485, 2163, 65, 118, "Output",ExpressionUUID->"95fe22ce-e5ba-4354-a488-b66cd20ef0d9"] }, Open ]], Cell[280135, 6553, 4137, 117, 881, "Text",ExpressionUUID->"6a5f4ba0-e23d-49ec-bbae-227b6a4d6132"], Cell[284275, 6672, 149, 3, 78, "Input",ExpressionUUID->"12e88a43-b72f-4382-ad30-df1b0ffc36d6"], Cell[284427, 6677, 183, 6, 88, "Text",ExpressionUUID->"5c1dabf1-e6ff-4751-8cef-fe4e730ccc72"], Cell[CellGroupData[{ Cell[284635, 6687, 1991, 59, 233, "Input",ExpressionUUID->"e9e69c76-d48c-426c-b248-7c624385a837"], Cell[286629, 6748, 213, 3, 52, "Output",ExpressionUUID->"fe92852c-ced2-4901-91e0-4fc1be876579"] }, Open ]], Cell[CellGroupData[{ Cell[286879, 6756, 150, 2, 46, "Input",ExpressionUUID->"6d846dfe-88c6-4ff3-a003-8e34e6ab3997"], Cell[287032, 6760, 163, 2, 52, "Output",ExpressionUUID->"0ee172b8-f4f2-472c-ba2e-794e17fbf1bc"] }, Open ]], Cell[CellGroupData[{ Cell[287232, 6767, 148, 2, 46, "Input",ExpressionUUID->"e60c8ee6-ca7f-452f-a2b4-28bbabd1f148"], Cell[287383, 6771, 161, 2, 52, "Output",ExpressionUUID->"a32705d4-4a3d-4176-bdba-16e9b776fad2"] }, Open ]], Cell[CellGroupData[{ Cell[287581, 6778, 148, 2, 46, "Input",ExpressionUUID->"cec36afa-62fc-4b8a-816e-4aa7bb41681d"], Cell[287732, 6782, 156, 2, 52, "Output",ExpressionUUID->"67a6617a-bda2-4258-9b44-c25f85013f73"] }, Open ]], Cell[CellGroupData[{ Cell[287925, 6789, 148, 2, 46, "Input",ExpressionUUID->"94f02339-d415-42b6-a729-d1ce24b73ce3"], Cell[288076, 6793, 157, 2, 52, "Output",ExpressionUUID->"ea2ad4db-5555-4760-8bc8-eea458e5dbcf"] }, Open ]], Cell[CellGroupData[{ Cell[288270, 6800, 369, 10, 46, "Input",ExpressionUUID->"1b83cb6c-d309-47a9-b084-b0930057d0f1"], Cell[288642, 6812, 151, 2, 52, "Output",ExpressionUUID->"b9c9c291-083a-4312-ab93-fc77df0c200b"] }, Open ]], Cell[CellGroupData[{ Cell[288830, 6819, 695, 18, 109, "Input",ExpressionUUID->"c54f3ee8-9a5a-49b3-8880-a52500e9d281"], Cell[289528, 6839, 642, 14, 36, "Print",ExpressionUUID->"5b0d9ae8-f02c-4ce1-ac28-e0c5e278bfe4"] }, Open ]], Cell[CellGroupData[{ Cell[290207, 6858, 295, 7, 46, "Input",ExpressionUUID->"ca3421b1-5cc7-4821-801a-fe5965fadd36"], Cell[290505, 6867, 152, 2, 52, "Output",ExpressionUUID->"c70e7c8c-36df-4994-842e-b595b33846f5"] }, Open ]], Cell[CellGroupData[{ Cell[290694, 6874, 335, 8, 46, "Input",ExpressionUUID->"1b41873d-dd13-4bac-8dc4-b906ee427b8c"], Cell[291032, 6884, 163, 2, 52, "Output",ExpressionUUID->"9deb49d6-ca39-48ad-be95-e2a273722534"] }, Open ]], Cell[CellGroupData[{ Cell[291232, 6891, 224, 4, 46, "Input",ExpressionUUID->"47ec05e7-40e4-4809-8112-65419f7a5479"], Cell[291459, 6897, 151, 2, 52, "Output",ExpressionUUID->"9ef80867-2121-4d87-bacb-16039f2e1266"] }, Open ]], Cell[CellGroupData[{ Cell[291647, 6904, 262, 5, 46, "Input",ExpressionUUID->"b5e1fece-978d-4394-bb8d-c9dad9291f14"], Cell[291912, 6911, 188, 2, 52, "Output",ExpressionUUID->"8dfd432c-f38b-48d9-a7ca-f47d48825f1b"] }, Open ]], Cell[CellGroupData[{ Cell[292137, 6918, 245, 5, 46, "Input",ExpressionUUID->"b6deba84-4eb4-4907-8b86-a895461161a6"], Cell[292385, 6925, 188, 2, 52, "Output",ExpressionUUID->"1ad3f161-4420-47cc-8e51-883af73d5778"] }, Open ]], Cell[CellGroupData[{ Cell[292610, 6932, 352, 9, 46, "Input",ExpressionUUID->"a4533cfc-8a74-46d4-9cdf-15dba324244d"], Cell[292965, 6943, 156, 2, 52, "Output",ExpressionUUID->"88c84d3c-65a9-45bc-8a94-3af2d51c2189"] }, Open ]], Cell[CellGroupData[{ Cell[293158, 6950, 148, 2, 46, "Input",ExpressionUUID->"37b491d0-a63b-40dc-9425-e5d455272956"], Cell[293309, 6954, 158, 2, 52, "Output",ExpressionUUID->"354c1fdf-ca82-42ab-b251-f3d3bdc6e1c3"] }, Open ]], Cell[293482, 6959, 1104, 22, 398, "Text",ExpressionUUID->"29c69e73-dea1-4d73-bac8-3f791c5978f3"], Cell[294589, 6983, 425, 10, 88, "Text",ExpressionUUID->"0db117bb-8844-4188-bd2e-7cb05a5fd35d"], Cell[295017, 6995, 2748, 70, 419, "Input",ExpressionUUID->"b5f1881d-d51c-46ca-bf19-57f60941416f"], Cell[CellGroupData[{ Cell[297790, 7069, 236, 4, 46, "Input",ExpressionUUID->"ebc97199-e94c-490b-a1a2-49a8d35a66e0"], Cell[298029, 7075, 278, 5, 36, "Print",ExpressionUUID->"7ff84fa7-b790-4ec9-a07f-b9fe0c2a15d7"] }, Open ]], Cell[CellGroupData[{ Cell[298344, 7085, 148, 2, 46, "Input",ExpressionUUID->"73dbf0d1-0048-4368-942c-e936a1368367"], Cell[298495, 7089, 180, 2, 52, "Output",ExpressionUUID->"e95a96fc-23c7-4023-98d9-b21cc7a55b61"] }, Open ]], Cell[CellGroupData[{ Cell[298712, 7096, 148, 2, 46, "Input",ExpressionUUID->"041c7a23-b671-4404-888b-f9b14a9cfad9"], Cell[298863, 7100, 179, 2, 52, "Output",ExpressionUUID->"341a14d4-3cf3-448a-b7e9-4aeb75220f2c"] }, Open ]], Cell[299057, 7105, 1791, 35, 261, "Text",ExpressionUUID->"8fc66401-edff-48a9-8e00-a3c1eef79a1a"] }, Open ]], Cell[CellGroupData[{ Cell[300885, 7145, 234, 4, 67, "Subsubsection",ExpressionUUID->"447ed595-e672-4a56-97f5-88293ba2af0d"], Cell[301122, 7151, 2597, 54, 741, "Text",ExpressionUUID->"62a9d781-a800-45ff-b02c-f8f2ed65cee8"], Cell[303722, 7207, 428, 12, 109, "Input",ExpressionUUID->"871409c9-a208-4b17-9661-3f3fb133b36a"], Cell[CellGroupData[{ Cell[304175, 7223, 153, 3, 46, "Input",ExpressionUUID->"fe578f82-388c-415a-86e4-1c540dd28feb"], Cell[304331, 7228, 137, 3, 52, "Output",ExpressionUUID->"f84c13fd-767a-4026-8d16-c5a4f60d025a"] }, Open ]], Cell[CellGroupData[{ Cell[304505, 7236, 264, 7, 46, "Input",ExpressionUUID->"ac94f889-b501-4abc-a3b8-1777b7b09a63"], Cell[304772, 7245, 207, 3, 52, "Output",ExpressionUUID->"1511d221-0533-4c0f-be66-399bea8770c8"] }, Open ]], Cell[CellGroupData[{ Cell[305016, 7253, 728, 18, 109, "Input",ExpressionUUID->"79ac9b9f-a854-4c7c-92f8-1cfac4b12920"], Cell[305747, 7273, 284, 5, 52, "Output",ExpressionUUID->"ba1d555b-c7f0-4fa6-bab4-d2aafce07e31"], Cell[306034, 7280, 282, 5, 52, "Output",ExpressionUUID->"a5059256-04a6-472a-9412-75bded7a46c4"], Cell[306319, 7287, 282, 5, 52, "Output",ExpressionUUID->"ce30003d-c5e0-4304-ac8a-f36ef89cf142"] }, Open ]], Cell[CellGroupData[{ Cell[306638, 7297, 891, 26, 78, "Input",ExpressionUUID->"f390b46e-8501-4880-b5e7-e2e8683bfb5a"], Cell[307532, 7325, 254, 4, 52, "Output",ExpressionUUID->"b3875274-c2c3-471a-b043-f405415e5091"], Cell[307789, 7331, 252, 4, 52, "Output",ExpressionUUID->"58fcf6d4-ca62-4b49-a077-f6f3d661eda9"] }, Open ]], Cell[308056, 7338, 698, 13, 53, "Text",ExpressionUUID->"4a4ad690-964c-438d-b5db-424aefe6e222"], Cell[308757, 7353, 429, 12, 109, "Input",ExpressionUUID->"c9c0def6-913a-40c4-a2f8-e2f355046dff"], Cell[309189, 7367, 1393, 46, 109, "Input",ExpressionUUID->"b78b73ff-f781-470f-8f34-02a94a0616dd"], Cell[CellGroupData[{ Cell[310607, 7417, 353, 11, 46, "Input",ExpressionUUID->"e65296b2-d5c3-49cf-b6ae-87da18777b0e"], Cell[310963, 7430, 178, 3, 52, "Output",ExpressionUUID->"6235513a-134c-4923-9b75-08725e131232"] }, Open ]], Cell[311156, 7436, 438, 12, 46, "Input",ExpressionUUID->"b589cd58-ef5e-4a25-8217-9d4e40c7f906"], Cell[CellGroupData[{ Cell[311619, 7452, 361, 7, 46, "Input",ExpressionUUID->"02320cbb-0036-480a-b37a-28a5d3930cee"], Cell[311983, 7461, 258, 5, 52, "Output",ExpressionUUID->"52e56225-4fb1-4cb9-b9d9-cf2dc9ddf673"] }, Open ]], Cell[CellGroupData[{ Cell[312278, 7471, 675, 14, 78, "Input",ExpressionUUID->"7a6e0f61-9783-436a-83c9-4355a85e3831"], Cell[312956, 7487, 329, 6, 52, "Output",ExpressionUUID->"4b0e897f-ec5a-4c41-bfa7-71d3a04ed52c"] }, Open ]], Cell[CellGroupData[{ Cell[313322, 7498, 1564, 45, 357, "Input",ExpressionUUID->"00149e93-4dab-4b95-b392-74db7292bc1b"], Cell[314889, 7545, 360, 6, 52, "Output",ExpressionUUID->"210169d2-4a7d-4805-aee3-4ce4cf23d564"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[315310, 7558, 364, 8, 158, "Section",ExpressionUUID->"4557e171-c9f4-462b-a47a-2c886401460f"], Cell[315677, 7568, 307, 7, 53, "Text",ExpressionUUID->"56753f2b-0d3f-469d-a16b-ac6072abee6b"], Cell[315987, 7577, 3450, 105, 472, "Text",ExpressionUUID->"bff6a59e-9aff-49f7-8576-52f8364c05a3"], Cell[CellGroupData[{ Cell[319462, 7686, 277, 4, 46, "Input",ExpressionUUID->"bfb3a49e-2799-4248-8154-0e6b7fd691c4"], Cell[319742, 7692, 180, 3, 52, "Output",ExpressionUUID->"b4e789ac-6ed6-4cfe-8576-a78fec2ef424"] }, Open ]], Cell[CellGroupData[{ Cell[319959, 7700, 231, 3, 46, "Input",ExpressionUUID->"e4d00e8c-1013-411b-9d07-e863c8ee92f3"], Cell[320193, 7705, 285, 6, 52, "Output",ExpressionUUID->"cb281060-ce41-4cc0-a91d-3f81d4ef0412"] }, Open ]], Cell[320493, 7714, 366, 9, 88, "Text",ExpressionUUID->"c1c6d30c-5006-4c48-bf7c-e513863245dd"], Cell[CellGroupData[{ Cell[320884, 7727, 297, 6, 46, "Input",ExpressionUUID->"a431956d-924e-4f35-87ca-6eb2aef3a0f6"], Cell[321184, 7735, 1282, 19, 115, "Output",ExpressionUUID->"aaf77cbd-3f62-4a33-b54e-f27d3e4edf8a"] }, Open ]], Cell[CellGroupData[{ Cell[322503, 7759, 298, 6, 46, "Input",ExpressionUUID->"e05391d8-23ac-45be-9b06-83ba9803a907"], Cell[322804, 7767, 1288, 19, 115, "Output",ExpressionUUID->"675783c5-91be-4693-bad8-b28407fcc615"] }, Open ]], Cell[CellGroupData[{ Cell[324129, 7791, 314, 5, 46, "Input",ExpressionUUID->"5895d1b9-ba25-4557-aaa0-5b9f622206ff"], Cell[324446, 7798, 1322, 20, 115, "Output",ExpressionUUID->"d27fb0e0-12fc-4c49-b419-65175b316392"] }, Open ]], Cell[325783, 7821, 1298, 45, 89, "Text",ExpressionUUID->"96023ccb-61b5-4fac-aacb-21efc5cc847a"], Cell[CellGroupData[{ Cell[327106, 7870, 263, 5, 46, "Input",ExpressionUUID->"4f80850b-1b2d-4d15-8bb7-700f60dd3db8"], Cell[327372, 7877, 370, 9, 69, "Output",ExpressionUUID->"bee9af0b-123d-4701-b772-d40c99981a87"] }, Open ]], Cell[CellGroupData[{ Cell[327779, 7891, 418, 10, 46, "Input",ExpressionUUID->"ec0febbd-067f-48e0-8540-66f201341f8c"], Cell[328200, 7903, 322, 5, 84, "Output",ExpressionUUID->"19771cee-1f2a-464e-b32c-8f2bc5c7571c"] }, Open ]], Cell[CellGroupData[{ Cell[328559, 7913, 230, 4, 69, "Input",ExpressionUUID->"6025f8f9-6e05-448f-b4ad-d3393ae57b42"], Cell[328792, 7919, 166, 2, 52, "Output",ExpressionUUID->"fc518acc-98ab-4737-b9b9-652824e041fc"] }, Open ]], Cell[CellGroupData[{ Cell[328995, 7926, 229, 4, 46, "Input",ExpressionUUID->"a34d0d28-3e34-492d-83bb-c0231f98418a"], Cell[329227, 7932, 302, 4, 84, "Output",ExpressionUUID->"50122c8f-f7eb-4d39-8ada-f5c42fc498a0"] }, Open ]], Cell[329544, 7939, 420, 8, 88, "Text",ExpressionUUID->"d0ec2062-9e35-48ab-a98f-71323a4da2d3"], Cell[329967, 7949, 560, 16, 91, "Text",ExpressionUUID->"07f3f79c-0c7a-45d2-8f3b-f4cac32e10c5"], Cell[CellGroupData[{ Cell[330552, 7969, 598, 14, 55, "Input",ExpressionUUID->"e05fb9c4-b0ab-4db0-b9d9-8f00ebd8ebdf"], Cell[331153, 7985, 481, 11, 69, "Output",ExpressionUUID->"2f5cb64d-a33b-4887-a637-fc9b96100e35"] }, Open ]], Cell[CellGroupData[{ Cell[331671, 8001, 257, 4, 46, "Input",ExpressionUUID->"4dc10073-6ad9-46ef-a3dd-eaa457f418ed"], Cell[331931, 8007, 199, 3, 52, "Output",ExpressionUUID->"e5bc8a8f-60bb-4a7f-a163-a707760ed3b5"] }, Open ]], Cell[CellGroupData[{ Cell[332167, 8015, 301, 6, 46, "Input",ExpressionUUID->"f64f777d-571c-48d3-ad66-4d8e716130b3"], Cell[332471, 8023, 352, 6, 84, "Output",ExpressionUUID->"91db147c-bdad-4dfc-b8cf-90f4ea4681c2"] }, Open ]], Cell[CellGroupData[{ Cell[332860, 8034, 269, 5, 46, "Input",ExpressionUUID->"57abca48-3071-4f7f-9a41-ecbdf2cea78e"], Cell[333132, 8041, 429, 10, 69, "Output",ExpressionUUID->"a1aa6433-d289-4f3b-8fad-da3b711b20a9"] }, Open ]], Cell[333576, 8054, 149, 3, 78, "Input",ExpressionUUID->"f9a999ef-0814-4ca8-a9f6-f64f4a86c052"], Cell[333728, 8059, 7603, 234, 993, "Text",ExpressionUUID->"5c1addba-e6c4-4743-af13-54889d095f12"], Cell[341334, 8295, 204, 5, 41, "Input",ExpressionUUID->"5adb2045-a971-4201-8cc4-f521a45c550a"], Cell[341541, 8302, 189, 4, 53, "Text",ExpressionUUID->"83f3b8cc-6500-4de6-9844-370017887349"], Cell[CellGroupData[{ Cell[341755, 8310, 636, 13, 109, "Input",ExpressionUUID->"dc833b00-73d7-4e83-a98c-89c3f96a0c61"], Cell[342394, 8325, 404, 7, 52, "Output",ExpressionUUID->"97cf53a1-c955-4efc-ab2f-55868ddcfd4e"], Cell[342801, 8334, 406, 7, 52, "Output",ExpressionUUID->"ac28cd03-a1fe-4e84-848d-6165589e183b"], Cell[343210, 8343, 410, 7, 52, "Output",ExpressionUUID->"a7ab8eed-d5e3-436d-a0a1-ab629da689ee"] }, Open ]], Cell[CellGroupData[{ Cell[343657, 8355, 319, 9, 46, "Input",ExpressionUUID->"51603f77-84bd-4d20-8c05-fdb83cc55219"], Cell[343979, 8366, 262, 4, 52, "Output",ExpressionUUID->"c4d31f07-b65b-485e-b1b3-9a5ee687b497"] }, Open ]], Cell[CellGroupData[{ Cell[344278, 8375, 1351, 25, 78, "Input",ExpressionUUID->"4013d986-a627-4523-8087-931626c53d30"], Cell[345632, 8402, 426, 7, 52, "Output",ExpressionUUID->"7363d6e6-5e10-4f8e-9125-ae6801769c6a"], Cell[346061, 8411, 430, 7, 52, "Output",ExpressionUUID->"026c3dc8-d937-41be-8141-065ec46c718f"] }, Open ]], Cell[CellGroupData[{ Cell[346528, 8423, 294, 5, 46, "Input",ExpressionUUID->"92453346-cf07-4bb1-942a-2e0a11e0ed5b"], Cell[346825, 8430, 375, 10, 52, "Output",ExpressionUUID->"bdcb3bd7-6758-4015-bf24-3806b011f389"] }, Open ]], Cell[CellGroupData[{ Cell[347237, 8445, 255, 5, 46, "Input",ExpressionUUID->"1c37bf75-2d0e-45fe-b8d1-8bae9f074be7"], Cell[347495, 8452, 206, 4, 52, "Output",ExpressionUUID->"ed7586cd-ad3e-4255-a4f7-267a4a971a57"] }, Open ]], Cell[347716, 8459, 235, 5, 46, "Input",ExpressionUUID->"bee21985-8a4b-4c56-b1ae-620161e36f03"], Cell[347954, 8466, 216, 4, 109, "Input",ExpressionUUID->"e179ad91-f53d-40e3-8aff-8fd8f2f7c57e"], Cell[CellGroupData[{ Cell[348195, 8474, 457, 9, 46, "Input",ExpressionUUID->"1d9d052c-95f9-4b53-8778-a9899bc0610b"], Cell[348655, 8485, 1070, 25, 121, "Output",ExpressionUUID->"fe041bee-dd26-42c3-ba3a-3859c00b5dc1"] }, Open ]], Cell[349740, 8513, 528, 16, 78, "Input",ExpressionUUID->"b4bd3927-af46-44f6-9c6e-6a594d49556e"] }, Open ]] }, Open ]] } ] *)