{"id":424,"date":"2026-02-15T22:21:16","date_gmt":"2026-02-15T14:21:16","guid":{"rendered":"http:\/\/www.triode.cc\/?p=424"},"modified":"2026-02-15T22:21:17","modified_gmt":"2026-02-15T14:21:17","slug":"echnp","status":"publish","type":"post","link":"https:\/\/www.triode.cc\/index.php\/2026\/02\/15\/echnp\/","title":{"rendered":"\u692d\u5706\u66f2\u7ebf\u9690\u85cf\u6570\u95ee\u9898\uff08Elliptic Curve Hidden Number Problem\uff09"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u53c2\u8003\u8d44\u6599\uff1a<a href=\"https:\/\/www.math.auckland.ac.nz\/~sgal018\/BarakShaniPhD.pdf\">Hidden Number Problems<\/a><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u95ee\u9898\u7b80\u8ff0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\\(\\text{ECHNP}\\)<\/h3>\n\n\n\n<p>\u7ed9\u5b9a\u8d28\u6570\\(p\\)\u3001\u4e00\u6b63\u6574\u6570\\(m\\)\u3001\u4e00\\(\\mathbb{F}_{p^m}\\)\u4e0a\u7684\u692d\u5706\u66f2\u7ebf\\(E\\)\uff0c\u70b9\\(Q\\in{E}\\)\uff0c\u4ee5\u53ca\u7531\\(Q\\)\u751f\u6210\u7684\u70b9\\(R\\in{\\langle Q\\rangle}\\)\uff0c\u8bbe\\(f\\)\u4e3a\u4e00\u4e2a\\(E\\)\u4e0a\u7684\u51fd\u6570\uff0c\\(P\\)\u4e3a\\(E\\)\u4e0a\u4e00\u672a\u77e5\u70b9\uff0c\u5e76\u8bbe\u4e00\u9884\u8a00\u673a\\(\\mathcal{O}_{P,R}(t)\\)\uff0c\u5176\u8f93\u5165\u4e3a\\(t\\)\uff0c\u8f93\u51fa\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>\\mathcal{O}_{P,R}(t)=f(P+tR) <br>$$ <\/p>\n\n\n\n<p>\u90a3\u4e48\u692d\u5706\u66f2\u7ebf\u9690\u85cf\u6570\u95ee\u9898\uff08\\(\\text{ECHNP}\\)\uff09\u5219\u662f\u901a\u8fc7\u9884\u8a00\u673a\\(\\mathcal{O}_{P,R}(t)\\)\u7684\u82e5\u5e72\u4e2a\u8f93\u51fa\u6765\u6062\u590d\u70b9\\(P\\).<br>\u800c\u5bf9\u4e8e\\(m=1\\)\uff0c\u4e14\u51fd\u6570\\(f(X)=\\text{MSB}_k(X_{\\psi})\\)\uff08\u5373\u53d6\u70b9\\(X\\)\u7684\\(\\psi\\)-\u5750\u6807\u7684\u9ad8\\(k\\)\u4f4d\uff0c\u5176\u4e2d\\(\\psi\\in{x,y}\\)\uff09\uff0c\u5219\u6709\\(\\text{ECHNP}_{\\psi}\\)\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\\(\\text{ECHNP}_{\\psi}\\)<\/h3>\n\n\n\n<p>\u7ed9\u5b9a\u8d28\u6570\\(p\\)\u3001\u6b63\u6574\u6570\\(k\\)\u3001\u4e00\\(\\mathbb{F}_{p}\\)\u4e0a\u7684\u692d\u5706\u66f2\u7ebf\\(E\\)\uff0c\u70b9\\(Q\\in{E}\\)\uff0c\u4ee5\u53ca\u7531\\(Q\\)\u751f\u6210\u7684\u70b9\\(R\\in{\\langle Q\\rangle}\\)\uff0c\u8bbe\\(P\\)\u4e3a\\(E\\)\u4e0a\u4e00\u672a\u77e5\u70b9\uff0c\u5e76\u8bbe\u4e00\u9884\u8a00\u673a\\(\\mathcal{O}_{P,R}(t)\\)\uff0c\u5176\u8f93\u5165\u4e3a\\(t\\)\uff0c\u8f93\u51fa\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>\\mathcal{O}_{P,R}(t)=\\text{MSB}_k((P+tR)_{\\psi})<br>$$<\/p>\n\n\n\n<p>\u90a3\u4e48\\(\\text{ECHNP}_{\\psi}\\)\u5219\u662f\u901a\u8fc7\u9884\u8a00\u673a\\(\\mathcal{O}_{P,R}(t)\\)\u7684\u82e5\u5e72\u4e2a\u8f93\u51fa\u6765\u6062\u590d\u70b9\\(P\\).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6c42\u89e3\\(\\text{ECHNP}_{x}\\)<\/h2>\n\n\n\n<p>\u5b58\u5728\u4e00\u79cd\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u7b97\u6cd5\u6765\u6c42\u89e3\\(k>\\frac{5}{6}\\log{p}\\)\u60c5\u51b5\u4e0b\u7684\\(\\text{ECHNP}_{x}\\).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u4ee5\u4e0b\u8ba8\u8bba\u5747\u5efa\u7acb\u5728Weierstrass\u65b9\u7a0b\u5b9a\u4e49\u7684\u692d\u5706\u66f2\u7ebf\u4e0a.<\/p>\n<\/blockquote>\n\n\n\n<p>\u6839\u636e\u692d\u5706\u66f2\u7ebf\u76f8\u5f02\u70b9\u7684\u52a0\u6cd5\u53ef\u4ee5\u77e5\u9053\uff0c\u5bf9\u4e8e\u66f2\u7ebf\u4e0a\u4e24\u76f8\u5f02\u70b9\\(P(x_P,y_P),Q(x_Q,y_Q)\\)\uff0c\u5176\u548c\\(P+Q\\)\u7684\u6a2a\u5750\u6807\u8ba1\u7b97\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>$$<br>x_{P+Q}=\\left(\\frac{y_Q-y_P}{x_Q-x_P}\\right)^2-x_P-x_Q<br>$$<\/p>\n\n\n\n<p>\u6240\u4ee5\u53ef\u4ee5\u77e5\u9053\uff1a<\/p>\n\n\n\n<p>$$<br>\\mathcal{O}_{P,R}(t)=\\text{MSB}_k((P+tR)_{x})=\\text{MSB}_k\\left(\\left(\\frac{y_{tR}-y_P}{x_{tR}-x_P}\\right)^2-x_P-x_{tR}\\mod{p}\\right)<br>$$<\/p>\n\n\n\n<p>\u800cMSB\u4e5f\u53ef\u4ee5\u7b49\u4ef7\u4e8e\u51cf\u53bb\u4e00\u4e2a\u8f83\u5c0f\u91cf\\(e\\)\uff0c\u90a3\u4e48\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>\\mathcal{O}_{P,R}(t)=\\text{MSB}_k\\left(\\left(\\frac{y_{tR}-y_P}{x_{tR}-x_P}\\right)^2-x_P-x_{tR}\\mod{p}\\right)=\\left(\\frac{y_{tR}-y_P}{x_{tR}-x_P}\\right)^2-x_P-x_{tR}-e\\mod{p}<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(|e|\\le p\/2^{k+1}\\)\uff0c\u6211\u4eec\u4ee4\\(h=\\mathcal{O}_{P,R}(t)\\)\uff0c\u5219\u53ef\u4ee5\u5f97\u5230\uff1a <\/p>\n\n\n\n<p>$$ <br>h\\equiv\\left(\\frac{y_{tR}-y_P}{x_{tR}-x_P}\\right)^2-x_P-x_{tR}-e\\pmod{p}<br>$$<\/p>\n\n\n\n<p>\u53ef\u5c06\\(x\\)\u5750\u6807\u4e0e\\(y\\)\u5750\u6807\u5206\u522b\u79fb\u5230\u7b49\u53f7\u4e24\u8fb9\uff1a<\/p>\n\n\n\n<p>$$<br>(h+x_P+x_{tR}+e)(x_{tR}-x_P)^2\\equiv(y_{tR}-y_P)^2\\equiv y_{tR}^2-2y_{tR}y_{P}+y_{P}^2\\pmod{p}<br>$$<\/p>\n\n\n\n<p>\u800c\u56e0\u4e3a\\(y_P^2\\equiv x_P^3+ax_P+b\\pmod{p}\\)\uff0c\u5219\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>(h+x_P+x_{tR}+e)(x_{tR}-x_P)^2\\equiv(y_{tR}-y_P)^2\\equiv y_{tR}^2-2y_{tR}y_{P}+x_P^3+ax_P+b\\pmod{p}<br>$$<\/p>\n\n\n\n<p>\u7136\u800c\u4e0a\u9762\u6709\u6211\u4eec\u5e76\u4e0d\u671f\u671b\u51fa\u73b0\u7684\\(y_P\\)\uff0c\u6545\u6211\u4eec\u9700\u8981\u8fdb\u884c\u6d88\u5143\uff0c\u5bf9\u4e8e\u4efb\u4e00\u6b63\u6574\u6570\\(t\\)\uff0c\u4ee4\\(Q=tR\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u9884\u8a00\u673a\u5f97\u5230\\((P+Q)_x\\)\u4ee5\u53ca\\((P-Q)_x\\)\u7684MSB\uff0c\u800c\u5728\\(\\mathbb{F}_p\\)\u4e0a\u6709\uff1a <\/p>\n\n\n\n<p>$$ <br>\\begin{aligned} <br>(P+Q)_x+(P-Q)_x&amp;=\\left(\\frac{y_P-y_Q}{x_P-x_Q}\\right)^2-x_P-x_Q+\\left(\\frac{y_P+y_Q}{x_P-x_Q}\\right)^2-x_P-x_Q\\\\<br>&amp;=\\frac{2(y_P^2+y_Q^2)}{(x_P-x_Q)^2}-2x_P-2x_Q\\\\ <br>&amp;=2\\left(\\frac{x_Qx_P^2+(a+x_Q^2)x_P+ax_Q+2b}{(x_P-x_Q)^2}\\right) <br>\\end{aligned} <br>$$ <\/p>\n\n\n\n<p>\u6211\u4eec\u4ee4\\(h=\\mathcal{O}_{P,R}(t)=(P+Q)_x-e,h&#8217;=\\mathcal{O}_{P,R}(-t)=(P-Q)_x-e&#8217;\\)\uff0c\u5e76\u4ee4\\(\\widetilde{h}=h+h&#8217;,\\widetilde{e}=e+e&#8217;\\)\uff0c\u7531\u4e0a\u9762\u7684\u63a8\u5bfc\u53ef\u4ee5\u5f97\u5230\uff1a\\(\\widetilde{h}+\\widetilde{e}=(P+Q)_x+(P-Q)_x\\)\uff0c\u53c8\u56e0\u4e3a\u5f53\\(t=0\\)\u7684\u65f6\u5019\uff0c\u6709\\(\\mathcal{O}_{P,R}(0)=x_P-e_0\\)\uff08\u5176\u4e2d\\(e_0\\)\u4e3a\u4e00\u6574\u6570\uff09\uff0c\u90a3\u4e48\u6211\u4eec\u8bb0\\(h_0=\\mathcal{O}_{P,R}(0)\\)\uff0c\u5219\u6709\\(x_P=h_0+e_0\\)\uff0c\u7efc\u5408\u4e0a\u8ff0\u63a8\u5bfc\u5c31\u53ef\u4ee5\u5f97\u5230\uff1a <\/p>\n\n\n\n<p>$$ <br>\\begin{aligned} <br>\\widetilde{h}+\\widetilde{e}&amp;=(P+Q)_x+(P-Q)_x\\\\ <br>&amp;=2\\left(\\frac{x_Qx_P^2+(a+x_Q^2)x_P+ax_Q+2b}{(x_P-x_Q)^2}\\right)\\\\ <br>&amp;=2\\left(\\frac{x_Q(h_0+e_0)^2+(a+x_Q^2)(h_0+e_0)+ax_Q+2b}{(h_0+e_0-x_Q)^2}\\right) <br>\\end{aligned} <br>$$ <\/p>\n\n\n\n<p>\u663e\u7136\u7684\uff0c\u4e0a\u5f0f\u4e2d\u53ea\u6709\\(e_0,\\widetilde{e}\\)\u662f\u672a\u77e5\u7684\uff0c\u6211\u4eec\u4ee4\u4e24\u8fb9\u4e58\u4e0a\\((h_0+e_0-x_Q)^2\\)\u53ef\u4ee5\u5f97\u5230\uff1a <\/p>\n\n\n\n<p>$$<br> (\\widetilde{h}+\\widetilde{e})(h_0+e_0-x_Q)^2=2(x_Q(h_0+e_0)^2+(a+x_Q^2)(h_0+e_0)+ax_Q+2b) <br>$$ <\/p>\n\n\n\n<p>\u4ece\u800c\u53ef\u4ee5\u4ece\u4e2d\u5f97\u5230\u4e00\u4e2a\u591a\u9879\u5f0f\uff1a <\/p>\n\n\n\n<p>$$ <br>F(X,Y)=(\\widetilde{h}+Y)(h_0-x_Q+X)^2-2(x_Q(h_0+X)^2+(a+x_Q^2)(h_0+X)+ax_Q+2b) <br>$$ <\/p>\n\n\n\n<p>\u5c55\u5f00\u6574\u7406\u5219\u6709\uff1a <\/p>\n\n\n\n<p>$$ <br>\\begin{aligned} <br>F(X,Y)=&amp;X^2Y+(\\widetilde{h}-2x_Q)X^2+2(h_0-x_Q)XY+2[\\widetilde{h}(h_0-x_Q)-2h_0x_Q-a-x_Q^2]X\\\\<br>&amp;+(h_0-x_Q)^2Y+[\\widetilde{h}(h_0-x_Q)^2-2h_0^2x_Q-2(a+x_Q)h_0-2ax_Q-4b] <br>\\end{aligned} <br>$$ <\/p>\n\n\n\n<p>\u5f88\u663e\u7136\uff0c\u8be5\u591a\u9879\u5f0f\u6ee1\u8db3\\(F(e_0,\\widetilde{e})\\equiv0\\pmod{p}\\)\uff0c\u6839\u636e\u4e0a\u8ff0\u65b9\u6cd5\uff0c\u6211\u4eec\u53d6\\(n\\)\u7ec4\\((\\mathcal{O}_{P,R}(t_i),\\mathcal{O}_{P,R}(-t_i))=(h_i,h_i&#8217;)\\)\u8fdb\u884c\u4e0a\u8ff0\u64cd\u4f5c\u5c31\u53ef\u4ee5\u5f97\u5230\\(n\\)\u4e2a\u591a\u9879\u5f0f\uff1a<\/p>\n\n\n\n<p>$$ <br>F_i(X,Y)=X^2Y+A_iX^2+A_{0,i}XY+B_iX+B_{0,i}Y+C_i<br>$$<\/p>\n\n\n\n<p>\u6ee1\u8db3\\(F_i(e_0,\\widetilde{e}_i)\\equiv0\\pmod{p}\\)\uff0c\u5176\u4e2d\uff1a <\/p>\n\n\n\n<p>$$ <br>\\begin{aligned} <br>A_i&amp;=\\widetilde{h}_i-2x_{Q_i}\\\\<br>A_{0,i}&amp;=2(h_0-x_{Q_i})\\\\<br>B_i&amp;=2[\\widetilde{h}_i(h_0-x_{Q_i})-2h_0x_{Q_i}-a-x_{Q_i}^2]\\\\<br>B_{0,i}&amp;=(h_0-x_{Q_i})^2\\\\<br>C_i&amp;=\\widetilde{h}_i(h_0-x_{Q_i})^2-2h_0^2x_{Q_i}-2(a+x_{Q_i}^2)h_0-2ax_{Q_i}-4b<br>\\end{aligned}<br>$$<\/p>\n\n\n\n<p>\u6b64\u65f6\u53ef\u4ee5\u6784\u9020\u77e9\u9635\uff1a<\/p>\n\n\n\n<p>$$<br>M=\\left(\\begin{matrix}<br>\\Delta_1&amp;0&amp;M_1\\\\<br>0&amp;\\Delta_2&amp;M_2\\\\<br>0&amp;0&amp;pI<br>\\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(\\Delta_1,\\Delta_2\\)\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>$$<br>\\Delta_1=diag(<br>2^{3k},\\underbrace{2^{2k},\\cdots,2^{2k}}_{n+1\u4e2a}), \\Delta_2=2^kI_{n+1}<br>$$<\/p>\n\n\n\n<p>\u800c\\(M_1,M_2\\)\u5b9a\u4e49\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>$$<br>M_1=\\left(\\begin{matrix}<br>-C_1&amp;-C_2&amp;\\cdots&amp;-C_n\\\\<br>-B_1&amp;-B_2&amp;\\cdots&amp;-B_n\\\\<br>-B_{0,1}&amp;&amp;\\\\<br>&amp;-B_{0,2}&amp;\\\\<br>&amp;&amp;\\ddots&amp;\\\\<br>&amp;&amp;&amp;-B_{0,n}<br>\\end{matrix}\\right),<br>M_2=\\left(\\begin{matrix}<br>-A_1&amp;-A_2&amp;\\cdots&amp;-A_n\\\\<br>-A_{0,1}&amp;&amp;\\\\<br>&amp;-A_{0,2}&amp;\\\\<br>&amp;&amp;\\ddots&amp;\\\\<br>&amp;&amp;&amp;-A_{0,n}<br>\\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5219\u5b58\u5728\u5411\u91cf\\(v=(1,e_0,\\widetilde{e}_1,\\cdots,\\widetilde{e}_n,e_0^2,e_0\\widetilde{e}_1,\\cdots,e_0\\widetilde{e}_n,k_1,\\cdots,k_n)\\)\u4f7f\u5f97\uff1a<\/p>\n\n\n\n<p>$$<br>vM=(2^{3k},2^{2k}e_0,2^{2k}\\widetilde{e}_1,\\cdots,2^{2k}\\widetilde{e}_n,2^ke_0^2,2^ke_0\\widetilde{e}_1,\\cdots,2^ke_0\\widetilde{e}_n,e_0^2\\widetilde{e}_1,\\cdots,e_0^2\\widetilde{e}_n)<br>$$<\/p>\n\n\n\n<p>\u5f88\u5bb9\u6613\u53ef\u4ee5\u8bc1\u660e\u4e0a\u8ff0\u5411\u91cf\u53ef\u4ee5\u901a\u8fc7\u89c4\u7ea6\u5f97\u51fa\uff0c\u6c42\u89e3\u4ee3\u7801\u6a21\u677f\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>from Crypto.Util.number import *\nfrom tqdm import *\nfrom sage.all import *\n\np = ...\na = ...\nb = ...\nx, y = (..., ...)\n\nE = EllipticCurve(GF(p), &#91;a, b&#93;)\nR = E(x, y)\n\nh0 = ...\n\nA = []\nA0 = []\nB = []\nB0 = []\nC = []\n\nn = ...\nk = ...\nK = 2**k\n\nfor i in trange(n):\n    t = i + 1\n    xQ = ZZ((t*R)&#91;0&#93;)\n\n    # \u4ece\u9884\u8a00\u673a\u4e2d\u83b7\u5f97P + tR\u7684x\u5750\u6807\u9ad8\u4f4d\n    h1 = ...\n\n    # \u4ece\u9884\u8a00\u673a\u4e2d\u83b7\u5f97P - tR\u7684x\u5750\u6807\u9ad8\u4f4d\n    h2 = ...\n\n    H = (h1 + h2) % p\n\n    Ai = (H - 2*xQ)\n    A0i = 2*(h0 - xQ)\n    Bi = 2*(H*(h0 - xQ) - 2*h0*xQ - a - xQ**2)\n    B0i = (h0 - xQ)**2\n    Ci = (H*(h0 - xQ)**2 - 2*h0**2*xQ - 2*(a + xQ**2)*h0 - 2*a*xQ - 4*b)\n\n    A.append(Ai)\n    A0.append(A0i)\n    B.append(Bi)\n    B0.append(B0i)\n    C.append(Ci)\n\nDelta1 = matrix(ZZ, n+2, n+2)\nDelta1&#91;0, 0&#93; = K**3\nfor i in range(1, n+2):\n    Delta1&#91;i, i&#93; = K**2\n\nDelta2 = matrix(ZZ, n+1, n+1)\nfor i in range(n+1):\n    Delta2&#91;i, i&#93; = K\n\nM1 = matrix(ZZ, n+2, n)\nfor i in range(n):\n    M1&#91;0, i&#93; = -C&#91;i&#93;\n    M1&#91;1, i&#93; = -B&#91;i&#93;\n    M1&#91;i+2, i&#93; = -B0&#91;i&#93;\n\nM2 = matrix(ZZ, n+1, n)\nfor i in range(n):\n    M2&#91;0, i&#93; = -A&#91;i&#93;\n    M2&#91;i+1, i&#93; = -A0&#91;i&#93;\n\nL = block_matrix([&#91;Delta1, 0, M1&#93;, &#91;0, Delta2, M2&#93;, &#91;0, 0, p&#93;])\n\nres = L.LLL()&#91;0&#93;\n\nx0 = h0 + res&#91;1&#93; \/\/ (K**2)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> Crypto<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Util<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">number <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> tqdm <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> sage<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">all <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">p <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">b <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">x<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> y <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">...<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">a<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> b<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">R <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">x<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> y<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">h0 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">A <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">A0 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">B <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">B0 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">C <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">n <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">k <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">K <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #D8DEE9FF\">k<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">trange<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    t <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    xQ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ZZ<\/span><span style=\"color: #ECEFF4\">((<\/span><span style=\"color: #D8DEE9FF\">t<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">)&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># \u4ece\u9884\u8a00\u673a\u4e2d\u83b7\u5f97P + tR\u7684x\u5750\u6807\u9ad8\u4f4d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    h1 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># \u4ece\u9884\u8a00\u673a\u4e2d\u83b7\u5f97P - tR\u7684x\u5750\u6807\u9ad8\u4f4d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    h2 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    H <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">h1 <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> h2<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">%<\/span><span style=\"color: #D8DEE9FF\"> p<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Ai <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">H <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">xQ<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    A0i <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">h0 <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> xQ<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Bi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">H<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">h0 <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> xQ<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">h0<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">xQ <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> a <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> xQ<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    B0i <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">h0 <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> xQ<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Ci <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">H<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">h0 <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> xQ<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">h0<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">xQ <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> xQ<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">h0 <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">a<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">xQ <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">b<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    A<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Ai<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    A0<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">A0i<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    B<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Bi<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    B0<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">B0i<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    C<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Ci<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Delta1 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">matrix<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ZZ<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Delta1<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> K<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Delta1<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> K<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Delta2 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">matrix<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ZZ<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Delta2<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> K<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">M1 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">matrix<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ZZ<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    M1<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">C<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    M1<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">B<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    M1<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">B0<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">M2 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">matrix<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ZZ<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    M2<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">A<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    M2<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">A0<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">L <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">block_matrix<\/span><span style=\"color: #ECEFF4\">([&#91;<\/span><span style=\"color: #D8DEE9FF\">Delta1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> M1<\/span><span style=\"color: #ECEFF4\">&#93;,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> Delta2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> M2<\/span><span style=\"color: #ECEFF4\">&#93;,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> p<\/span><span style=\"color: #ECEFF4\">&#93;])<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">res <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> L<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">LLL<\/span><span style=\"color: #ECEFF4\">()&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">x0 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> h0 <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> res<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/\/<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">K<\/span><span style=\"color: #81A1C1\">**<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5173\u4e8e\u692d\u5706\u66f2\u7ebf\u9690\u85cf\u6570\u95ee\u9898<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-424","post","type-post","status-publish","format-standard","hentry","category-3"],"_links":{"self":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/comments?post=424"}],"version-history":[{"count":10,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/424\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/424\/revisions\/435"}],"wp:attachment":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/media?parent=424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/categories?post=424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/tags?post=424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}