<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>數學・密碼・量子 on kenji.blog</title><link>http://kenji.blog/zh-tw/categories/%E6%95%B8%E5%AD%B8%E5%AF%86%E7%A2%BC%E9%87%8F%E5%AD%90/</link><description>Recent content in 數學・密碼・量子 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 22:09:22 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/categories/%E6%95%B8%E5%AD%B8%E5%AF%86%E7%A2%BC%E9%87%8F%E5%AD%90/index.xml" rel="self" type="application/rss+xml"/><item><title>【PQC】量子電腦時代的次世代密碼學「抗量子計算機密碼學」全貌</title><link>http://kenji.blog/zh-tw/p/post-quantum-cryptography/</link><pubDate>Sat, 05 Sep 2026 22:09:22 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/post-quantum-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography/post_quantum_cryptography_1788613735417.jpg" alt="Featured image of post 【PQC】量子電腦時代的次世代密碼學「抗量子計算機密碼學」全貌" />&lt;h2 id="前言量子電腦為密碼技術帶來的威脅">前言：量子電腦為密碼技術帶來的「威脅」
&lt;/h2>&lt;p>現在，我們在網際網路上日常進行的通訊——線上銀行的支付、網站的瀏覽（HTTPS）、通訊軟體的交流，甚至區塊鏈與加密資產的交易——其中大部分都受到被稱為「公開金鑰密碼學」的技術保護。具體來說，RSA密碼學和橢圓曲線密碼學（ECC）等演算法，成為了支撐現代數位社會可靠性的基礎。&lt;/p>
&lt;p>這些密碼體系，是以目前古典電腦（包含超級電腦）需要花費天文數字時間才能解開的數學難題，如「巨大數字的質因數分解」或「離散對數問題」作為安全性的基礎。然而，近年來取得顯著進展的 &lt;strong>「量子電腦」&lt;/strong> 一旦實用化，這個前提將會從根本上被推翻。&lt;/p>
&lt;p>1994年彼得·蕭爾（Peter Shor）發表的「蕭爾演算法」，在數學上證明了只要使用具備足夠效能的量子電腦，就能在極短的時間內解開質因數分解或離散對數問題。這也意味著，保護現今網際網路的密碼通訊，在未來有全部遭到破解的風險（被稱為 Y2Q：Years to Quantum，或 Q-Day 的問題）。&lt;/p>
&lt;p>更嚴重的是，「Harvest Now, Decrypt Later（現在竊取並儲存數據，等到未來能夠解密時再破解）」這種攻擊手法的存在。國家的機密情報、企業的智慧財產、個人的生物特徵等需要保密數十年的數據，現在可能已經成為以未來解密為前提的竊取目標。&lt;/p>
&lt;p>為了應對這場前所未有的危機，世界各地的密碼學家與研究機構正傾全力開發能夠抵禦量子電腦攻擊的次世代密碼技術，也就是 &lt;strong>抗量子計算機密碼學（PQC：Post-Quantum Cryptography）&lt;/strong> 。本篇文章將從PQC的基礎開始，詳細解說主要演算法的機制，以及美國國家標準技術研究所（NIST）推動的全球標準化最新動向。&lt;/p>
&lt;hr>
&lt;h2 id="什麼是抗量子計算機密碼學pqc">什麼是抗量子計算機密碼學（PQC）？
&lt;/h2>&lt;p>抗量子計算機密碼學（Post-Quantum Cryptography, PQC）是能在現有古典電腦上運行，且被設計成能夠抵抗未來可能出現的大型量子電腦攻擊（如蕭爾演算法等）的密碼演算法的總稱。&lt;/p>
&lt;p>經常被混淆的技術有「量子密碼學（Quantum Cryptography）」和「量子金鑰分發（QKD）」，但這些是完全不同的方法。量子密碼學（QKD）是利用量子力學的物理定律（如觀測會改變狀態的特性），在物理上讓通訊路徑上的竊聽變得不可能的基於硬體的技術。它需要專用的光纖或特殊設備，並面臨導入成本和距離限制等課題。&lt;/p>
&lt;p>另一方面， &lt;strong>PQC 則是完全以「數學」為基礎，基於軟體的密碼技術&lt;/strong> 。因此，它可以作為軟體更新整合到現有的網際網路基礎設施、伺服器、智慧型手機、瀏覽器中，具有極高的現實社會適用性。全球的IT企業與政府機構目前的當務之急，是將現行使用的 RSA 或 ECC 替換（轉移）為這項 PQC。&lt;/p>
&lt;hr>
&lt;h2 id="支撐-pqc-的-4-種主要數學方法">支撐 PQC 的 4 種主要數學方法
&lt;/h2>&lt;p>基於即使用了量子電腦也無法有效解開的數學難題（如 NP 困難問題等），各界提出了多種 PQC 演算法。在這裡，我們將介紹目前成為主流的 4 個主要類別。&lt;/p>
&lt;h3 id="抗量子計算機密碼學pqc的主要方法">抗量子計算機密碼學（PQC）的主要方法
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">graph&lt;/span> &lt;span class="n">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">抗量子計算機密碼學&lt;/span> &lt;span class="n">PQC&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">晶格密碼學&lt;/span> &lt;span class="n">Lattice&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">雜湊密碼學&lt;/span> &lt;span class="n">Hash&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">M&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">多變數多項式密碼學&lt;/span> &lt;span class="n">Multivariate&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">編碼密碼學&lt;/span> &lt;span class="n">Code&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">203&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">KEM&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">204&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">H&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">205&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">SLH&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">style&lt;/span> &lt;span class="n">PQC&lt;/span> &lt;span class="n">fill&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="c1">#f9f,stroke:#333,stroke-width:2px&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="1-晶格密碼學lattice-based-cryptography">1. 晶格密碼學（Lattice-based Cryptography）
&lt;/h3>&lt;p>目前在 PQC 領域中最被看好且成為主流的，就是這項「晶格密碼學」。晶格密碼學是以多維空間中規律排列的點（晶格點）相關的問題作為安全性的基礎。著名的問題包括「最短向量問題（SVP：Shortest Vector Problem）」與「錯誤學習問題（LWE：Learning With Errors）」等。&lt;/p>
&lt;p>&lt;strong>機制概要：&lt;/strong>
請想像在一個維度非常高（數百到數千維）的空間內，有無數的點呈現晶格狀排列。要找到特定的晶格點，在 2 維或 3 維空間很簡單，但到了數百維，目前無論是古典電腦還是量子電腦，都沒有發現能夠有效找出的演算法。尤其是 LWE 問題，利用了「若在聯立一次方程式中刻意加入微小的『雜訊（誤差）』，要推測原始變數會變得極其困難」的特性。&lt;/p>
&lt;p>&lt;strong>優點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>適用於金鑰封裝（KEM）與數位簽章兩者。&lt;/li>
&lt;li>處理速度非常快（有時甚至比 RSA 或 ECC 更快）。&lt;/li>
&lt;li>金鑰大小與密文大小相對較小，平衡性良好。&lt;/li>
&lt;/ul>
&lt;p>目前 NIST 正在進行標準化的演算法中，有許多（如 ML-KEM 或 ML-DSA 等）都採用了這項晶格密碼學。&lt;/p>
&lt;h3 id="2-雜湊密碼學hash-based-cryptography">2. 雜湊密碼學（Hash-based Cryptography）
&lt;/h3>&lt;p>雜湊密碼學是專門用於數位簽章的 PQC 演算法。其安全性的基礎，僅依賴於 SHA-2 或 SHA-3 等安全的「密碼學雜湊函數」所具備的抗碰撞性與單向性。&lt;/p>
&lt;p>&lt;strong>機制概要：&lt;/strong>
以被稱為「藍波簽章（Lamport Signature）」的只能使用一次的一次性簽章方式為起點。透過將其與被稱為「默克爾樹（Merkle Tree）」的樹狀資料結構綁定，實現了使用單一金鑰對進行多次簽章。&lt;/p>
&lt;p>&lt;strong>優點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>安全性的基礎極其堅固，有著「只要雜湊函數安全就安全」的強力證明。&lt;/li>
&lt;li>對數學結構的依賴較少，被發現預期外破解方法的風險較低。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>缺點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>無法用於金鑰封裝（KEM），僅限於數位簽章。&lt;/li>
&lt;li>簽章大小往往會變得較大。&lt;/li>
&lt;li>有分為「有狀態（Stateful）」與「無狀態（Stateless）」，有狀態（如 XMSS 等）因為必須嚴格控管金鑰的使用次數，在實作上的難度較高。&lt;/li>
&lt;/ul>
&lt;p>NIST 已經將作為無狀態雜湊簽章的「SLH-DSA (舊名 SPHINCS+)」予以標準化。&lt;/p>
&lt;h3 id="3-多變數多項式密碼學multivariate-cryptography">3. 多變數多項式密碼學（Multivariate Cryptography）
&lt;/h3>&lt;p>多變數多項式密碼學是以解開包含多個變數的聯立二次多項式系統的困難度（MQ 問題：Multivariate Quadratic problem）作為安全性基礎的方法。這個問題已知屬於 NP 困難。&lt;/p>
&lt;p>&lt;strong>機制概要：&lt;/strong>
發送方將明文（或雜湊值）代入作為公鑰傳遞的包含多個變數的複雜方程式中，製作出密文（簽章）。合法的接收方擁有「能將方程式結構轉換為容易解開形式的隱藏資訊（陷門）」作為私鑰，並使用它來進行解密（或簽章驗證）。&lt;/p>
&lt;p>&lt;strong>優點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>簽章大小非常小。&lt;/li>
&lt;li>簽章的驗證速度極快。適合用於資源受限的物聯網（IoT）設備等。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>缺點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>公鑰的大小非常大（有時可達數十到數百 KB）。&lt;/li>
&lt;li>過去曾有有力的演算法（如 Rainbow 等）被古典攻擊破解的案例，與其他方法相比，在建立對安全性的信任方面有較困難的一面。&lt;/li>
&lt;/ul>
&lt;h3 id="4-編碼密碼學code-based-cryptography">4. 編碼密碼學（Code-based Cryptography）
&lt;/h3>&lt;p>編碼密碼學是將用於修正通訊路徑上錯誤的「錯誤更正碼」理論應用於密碼學中。1978 年提出的「McEliece 密碼學」最為著名，也是 PQC 中歷史最悠久的方法之一。&lt;/p>
&lt;p>&lt;strong>機制概要：&lt;/strong>
發送方使用接收方的公鑰（隱藏了特定結構的錯誤更正碼的生成矩陣）對明文進行編碼，並額外加入刻意的錯誤（雜訊）後發送。接收方則使用私鑰去除錯誤，取出明文。密碼分析者必須從不知道結構的純隨機編碼中修正錯誤，這被稱為「一般症狀解碼問題」，已被證明屬於 NP 困難。&lt;/p>
&lt;p>&lt;strong>優點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>經過 40 年以上漫長時間的徹底研究，至今尚未發現有效的攻擊方式，安全性的可靠度極高。&lt;/li>
&lt;li>加密與解密的處理速度快。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>缺點：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>公鑰的大小非常巨大（有時可達數 MB）。因此，很難在通訊頻寬或記憶體受限的環境（如 TLS 交握等）中使用。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="nist-的-pqc-標準化最新動向">NIST 的 PQC 標準化最新動向
&lt;/h2>&lt;p>美國國家標準技術研究所（NIST）自 2016 年起，開始向全世界公開徵求次世代抗量子計算機密碼學演算法，並經過了長達數年的嚴格評估與多輪篩選。&lt;/p>
&lt;p>2024 年，NIST 終於發布了以下 3 種演算法作為正式的聯邦資訊處理標準（FIPS）。這意味著全球組織要在正式環境中開始實作的堅固基礎已經完成。&lt;/p>
&lt;h3 id="已制定的-fips-標準2024-年">已制定的 FIPS 標準（2024 年）
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>FIPS 203: ML-KEM（舊名: CRYSTALS-Kyber）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>用途:&lt;/strong> 金鑰封裝機制（KEM）／加密與金鑰共享&lt;/li>
&lt;li>&lt;strong>基礎技術:&lt;/strong> 晶格密碼學（Module-LWE）&lt;/li>
&lt;li>&lt;strong>特徵:&lt;/strong> 金鑰大小與速度的平衡非常良好，將作為 Web 通訊（TLS）或安全的通訊軟體等一般網際網路用途中的預設 PQC 金鑰共享發揮作用。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 204: ML-DSA（舊名: CRYSTALS-Dilithium）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>用途:&lt;/strong> 數位簽章&lt;/li>
&lt;li>&lt;strong>基礎技術:&lt;/strong> 晶格密碼學（Module-LWE）&lt;/li>
&lt;li>&lt;strong>特徵:&lt;/strong> 數位簽章的主要標準。可進行高效率的處理，將成為軟體簽章或文件驗證等所有電子簽章用途的新標準。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 205: SLH-DSA（舊名: SPHINCS+）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>用途:&lt;/strong> 數位簽章&lt;/li>
&lt;li>&lt;strong>基礎技術:&lt;/strong> 雜湊密碼學（無狀態）&lt;/li>
&lt;li>&lt;strong>特徵:&lt;/strong> 萬一未來晶格密碼學被發現存在漏洞時，將作為備用方案發揮作用，因此擔負著極其重要的角色。簽章大小雖然較大，但適合需要長期可靠性的用途。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="追求更多的多樣性">追求更多的多樣性
&lt;/h3>&lt;p>NIST 在完成首批標準化流程的同時，仍持續探索更多的演算法。特別是因為標準偏向「晶格密碼學」，因此確保 &lt;strong>演算法的多樣性（Crypto Diversity）&lt;/strong> 被視為一項重點。作為金鑰共享的備用標準，目前正推動對編碼密碼學等進行評估，PQC 的基礎預計在未來將變得更加穩固。&lt;/p>
&lt;hr>
&lt;h2 id="邁向-pqc-的轉移劇本與課題密碼敏捷性的重要性">邁向 PQC 的轉移劇本與課題：「密碼敏捷性」的重要性
&lt;/h2>&lt;p>隨著 NIST 發布正式的標準規格，全球的政府機構、金融機構、科技企業將開始正式推動從現有的 RSA/ECC 轉移（遷移）至 PQC。美國國家安全局（NSA）等機構的指南中，也建議應儘早完成轉移。&lt;/p>
&lt;h3 id="採用混合式方法">採用混合式方法
&lt;/h3>&lt;p>由於 PQC 演算法較為新穎，與古典密碼學相比尚未經歷過「時間的考驗」。考慮到實作中潛藏的錯誤或可能發現新攻擊手法的風險，在過渡時期建議採用 &lt;strong>「混合式方法」&lt;/strong> 。這是一種結合具有實績的現有密碼學（例：ECDHE）與新的 PQC（例：ML-KEM）來進行金鑰交換的方法。目前，主流瀏覽器與雲端服務正快速推進這種方法的測試導入。&lt;/p>
&lt;h3 id="實現密碼敏捷性crypto-agility">實現密碼敏捷性（Crypto-Agility）
&lt;/h3>&lt;p>企業與系統開發者今後最應該意識到的，是確保 &lt;strong>「密碼敏捷性（Crypto-Agility）」&lt;/strong> 。當未來演算法被發現缺陷或出現新標準時，必須具備能夠在不停止系統運作的情況下，迅速更換與更新密碼演算法的彈性架構設計。&lt;/p>
&lt;p>精確掌握自家系統內部「在何處」、「使用了哪種密碼」、「基於何種目的」來建立密碼物料清單（CBOM：Cryptography Bill of Materials），將是邁向 PQC 轉移的重要第一步。&lt;/p>
&lt;hr>
&lt;h2 id="總結為即將到來的q-day做好準備">總結：為即將到來的「Q-Day」做好準備
&lt;/h2>&lt;p>量子電腦的進化在為人類帶來巨大恩惠的同時，也是對現代數位社會基礎之密碼安全性的最大威脅。抗量子計算機密碼學（PQC）已不再是「遙遠未來的研究主題」。經過 NIST 發布 FIPS 標準這項里程碑，PQC 已經正式進入「實作與轉移」的階段。&lt;/p>
&lt;p>考慮到「Harvest Now, Decrypt Later」的威脅，對於所有處理機密數據的組織來說，轉移至 PQC 是「現在立刻」就該著手進行的最優先課題。透過深入理解次世代密碼技術並提升系統的密碼敏捷性，讓我們安全地度過即將到來的量子電腦時代吧。&lt;/p></description></item><item><title>量子電腦真的會破壞RSA加密嗎？〜Shor演算法與目前的發展階段〜</title><link>http://kenji.blog/zh-tw/p/shors-algorithm-and-rsa-breaking/</link><pubDate>Sat, 05 Sep 2026 22:09:21 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/shors-algorithm-and-rsa-breaking/</guid><description>&lt;img src="http://kenji.blog/p/shors-algorithm-and-rsa-breaking/quantum_breaking_rsa_1788613722990.jpg" alt="Featured image of post 量子電腦真的會破壞RSA加密嗎？〜Shor演算法與目前的發展階段〜" />&lt;h2 id="前言密碼技術與量子電腦的交會點">前言：密碼技術與量子電腦的交會點
&lt;/h2>&lt;p>在現代網路社會中，保護通訊機密的基礎是「公開金鑰加密」。其中最具代表性的，是1977年由Ron Rivest、Adi Shamir和Leonard Adleman三位所開發的「RSA加密」。從我們每天使用的線上購物支付、網站瀏覽（HTTPS）到郵件收發，RSA加密一直扮演著網際網路基礎設施心臟的角色。&lt;/p>
&lt;p>然而，隨著「量子電腦」的出現，有人指出這種安全性可能會從根本上被顛覆。媒體上偶爾會出現「只要量子電腦完成，全世界的密碼和加密都會在幾秒鐘內被破解」這樣聳動的標題。究竟這是不是真的呢？&lt;/p>
&lt;p>本文將深入探討傳統的密碼破解手法GNFS（普通數體篩法）以及使用量子電腦破解密碼的決定性演算法「Shor演算法（Shor&amp;rsquo;s Algorithm）」的運作原理。我們將用淺顯易懂的方式解說量子傅立葉變換與尋找週期等進階概念，並詳細驗證目前在NISQ（Noisy Intermediate-Scale Quantum）時代量子硬體的現狀，以及實際要破解RSA-2048所需克服的障礙。&lt;/p>
&lt;hr>
&lt;h2 id="rsa加密的根基質因數分解的困難度">RSA加密的根基：質因數分解的困難度
&lt;/h2>&lt;p>RSA加密的安全性取決於數學中極度簡單的不對稱性。那就是「將兩個巨大的質數相乘很簡單，但要從相乘的結果（合成數）中找出原本的兩個質數（進行質因數分解）卻極其困難」的事實。&lt;/p>
&lt;p>舉例來說，假設有 $ p = 61 $、$ q = 53 $ 兩個質數。要計算這個乘法 $ N = p \times q = 3233 $ 只需要一瞬間。但是，如果只給你「3233」這個數字，要你解出「這是哪兩個質數相乘的結果？」，數字越大，計算量就會呈爆炸性增長。&lt;/p>
&lt;p>在目前主流的RSA-2048中，使用了長度為2048位元，換算成十進位約為617位數的巨大合成數 $ N $。只要能將這個 $ N $ 進行質因數分解，加密就等同於被破解了。&lt;/p>
&lt;h3 id="傳統電腦的挑戰gnfs普通數體篩法">傳統電腦的挑戰：GNFS（普通數體篩法）
&lt;/h3>&lt;p>為了從根本解決質因數分解問題，數學家和密碼學家長年來開發了各種演算法。其中，目前在傳統電腦上被認為最快的方法是 &lt;strong>普通數體篩法（GNFS: General Number Field Sieve）&lt;/strong> 。&lt;/p>
&lt;p>GNFS為了將巨大的數字 $ N $ 進行質因數分解，會將整數環的計算擴展到更抽象的代數體（Number Field）來進行解析。大致的流程如下：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>選擇多項式&lt;/strong> ：尋找一個以 $ N $ 為根，且具有適當次數和係數的多項式 $ f(x) $。&lt;/li>
&lt;li>&lt;strong>收集資料（篩選）&lt;/strong> ：在有理數體及代數體上，尋找大量可以分解成小質數（平滑數，Smooth numbers）的數字對。這個過程被稱為「篩選」，也是最耗時的部分。&lt;/li>
&lt;li>&lt;strong>矩陣生成與簡約&lt;/strong> ：根據收集到的關係式生成巨大的稀疏矩陣（大部分元素為0的矩陣），並使用線性代數的手法（如區塊Lanczos法等）來求出解。&lt;/li>
&lt;li>&lt;strong>計算平方根&lt;/strong> ：最後在代數體上計算平方根，推導出 $ N $ 的因數（質因數）。&lt;/li>
&lt;/ol>
&lt;p>GNFS的計算量非漸近地被評估為 $ O(\exp((\sqrt[3]{\frac{64}{9}} + o(1)) (\log N)^{\frac{1}{3}} (\log \log N)^{\frac{2}{3}})) $。這被稱為「次指數時間（Sub-exponential）」的計算量。雖然比指數時間快，但比多項式時間（Polynomial time）要慢得多。&lt;/p>
&lt;p>實際上，2020年有一個國際研究團隊使用GNFS成功將RSA-250（829位元，250位數的合成數）進行了質因數分解。這項計算動用了全世界的運算資源，耗費了約2700 CPU核心年的龐大計算時間。然而，如果是2048位元，所需的計算量據說會膨脹到宇宙壽命的數兆倍，無論讓現在的超級電腦如何平行運作，都無法在現實時間內用傳統手法破解。&lt;/p>
&lt;hr>
&lt;h2 id="量子電腦的王牌shor演算法">量子電腦的王牌：Shor演算法
&lt;/h2>&lt;p>這時候登場的，是1994年由Peter Shor發表的「Shor演算法」。這個演算法劃時代地證明了質因數分解問題可以在量子電腦上以 &lt;strong>多項式時間&lt;/strong> （ $ O((\log N)^3) $ ）被解開。次指數時間和多項式時間的差距是決定性的，這意味著在理論上，只要使用量子電腦，RSA加密就會被徹底破壞。&lt;/p>
&lt;h3 id="shor演算法的整體流程">Shor演算法的整體流程
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[輸入想進行質因數分解的數字 N] --&amp;gt; B[選擇一個隨機整數 a]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C{a 與 N 的&amp;lt;br&amp;gt;最大公因數}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|大於1| D[很幸運地發現了質因數！]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|1 互質| E[量子電腦登場]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt; F[利用量子傅立葉變換求出函數 f_x = a^x mod N 的&amp;lt;br&amp;gt;週期 r]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G{週期 r 為偶數 且&amp;lt;br&amp;gt;a^r/2 ≢ -1 mod N}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|Yes| H[計算最大公因數 gcd_a^r/2 ± 1, N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I((成功進行質因數分解！))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|No| B
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Shor演算法並非直接解開質因數分解的問題，而是運用數論定理將其轉換為另一個問題——「尋找週期問題（Period Finding Problem）」，並利用量子電腦的特性來高速解開它。&lt;/p>
&lt;h3 id="步驟1從質因數分解轉換為尋找週期問題傳統處理">步驟1：從質因數分解轉換為尋找週期問題（傳統處理）
&lt;/h3>&lt;p>演算法的第一個步驟在傳統電腦上進行。
針對想要進行質因數分解的數字 $ N $，選擇一個與 $ N $ 互質（最大公因數為1）的隨機整數 $ a $（ $ 1 &lt; a &lt; N $ ）。如果剛好最大公因數不是1，那麼當時發現的公因數就是 $ N $ 的質因數，破解也就完成了，但這個機率極低。&lt;/p>
&lt;p>接著，我們考慮以下的同餘方程式列：
$ f(x) = a^x \pmod N $&lt;/p>
&lt;p>若將 $ x = 1, 2, 3, \dots $ 代入這個函數 $ f(x) $ 中，數值看起來似乎是隨機的，但因為是在有限範圍內計算，所以必定會在某個地方回到原來的值，重複同樣的數列。我們將這個重複的週期稱為 $ r $。也就是說，
要找到符合 $ a^r \equiv 1 \pmod N $ 的最小正整數 $ r $ 的問題，這就是「尋找週期問題」。&lt;/p>
&lt;p>如果能找到這個週期 $ r $，且 $ r $ 為偶數，則 $ a^r - 1 \equiv 0 \pmod N $，利用因式分解的公式可以變形成為
$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $。
從這裡，利用歐幾里得演算法計算 $ N $ 和 $ a^{r/2} \pm 1 $ 的最大公因數，就有極高的機率能得到 $ N $ 的質因數。&lt;/p>
&lt;p>為了用傳統電腦找到週期 $ r $，說到底還是需要指數級的步驟，無法加速。但是，量子電腦卻能在一瞬間（以多項式時間）找到這個週期 $ r $。&lt;/p>
&lt;h3 id="步驟2準備量子狀態並使其疊加">步驟2：準備量子狀態並使其疊加
&lt;/h3>&lt;p>從這裡開始就是量子電腦發揮作用的地方了。
量子電腦使用的是能同時擁有「0」和「1」狀態的「量子位元（Qubit）」。在Shor演算法中，我們準備了兩個暫存器：一個用來儲存輸入（第一暫存器），另一個用來儲存計算結果（第二暫存器）。&lt;/p>
&lt;p>首先，我們將被稱為阿達瑪閘（Hadamard gate）的量子閘操作應用到第一暫存器的所有量子位元上。藉此，第一暫存器會處於所有可能的 $ x $ 值（從 $ 0 $ 到 $ 2^n-1 $。$ n $ 是一個夠大的位元數）的 &lt;strong>均勻疊加狀態&lt;/strong> 。&lt;/p>
&lt;p>換句話說，在量子電腦的內部，創造出了一個同時並存著 $ x=0, 1, 2, 3, \dots $ 等無數輸入值的狀態。&lt;/p>
&lt;h3 id="步驟3量子模冪運算quantum-modular-exponentiation">步驟3：量子模冪運算（Quantum Modular Exponentiation）
&lt;/h3>&lt;p>接著，以第一暫存器的疊加狀態為輸入，計算 $ f(x) = a^x \pmod N $，並將結果儲存到第二暫存器中。
由於這項計算是作為量子電路上的么正變換（Unitary transformation）來執行的，所以在保持疊加的狀態下，會「同時平行地（量子平行性）」進行對所有 $ x $ 的 $ f(x) $ 計算。&lt;/p>
&lt;p>此時，整個量子系統的空間處於
$ |x, a^x \bmod N\rangle $
這種狀態的龐大疊加。&lt;/p>
&lt;p>然而，如果在這裡單純地去測量（觀測）第二暫存器，就會隨機且機率性地選出一個 $ a^x \bmod N $ 的值，第一暫存器的 $ x $ 也會連帶地確定為單一一個值。這樣一來，就和用傳統電腦計算一次沒什麼兩樣，無法找到週期 $ r $。&lt;/p>
&lt;p>在量子力學的規則下，我們無法直接窺視疊加狀態的內容。那麼，我們該如何萃取出整體的「週期」這項全域資訊呢？&lt;/p>
&lt;h3 id="步驟4量子傅立葉變換qft-quantum-fourier-transform">步驟4：量子傅立葉變換（QFT: Quantum Fourier Transform）
&lt;/h3>&lt;p>突破這道難關，正是Shor演算法的精髓所在，也就是對第一暫存器應用 &lt;strong>量子傅立葉變換（QFT）&lt;/strong> 。&lt;/p>
&lt;p>在進行測量之前，我們先分析函數 $ f(x) $ 的波動性質。假設我們觀測了第二暫存器，並得到某個值 $ y $。於是，第一暫存器的狀態會坍縮為「能讓 $ a^x \pmod N = y $ 成立的所有 $ x $ 的疊加」。
這個 $ x $ 的值會呈現 $ x_0, x_0 + r, x_0 + 2r, x_0 + 3r, \dots $ 這種以週期 $ r $ 為間隔離散排列的狀態（一種梳狀的機率振幅分佈）。&lt;/p>
&lt;p>我們對這個狀態應用量子傅立葉變換（QFT）。就像傳統的離散傅立葉變換將時間域的訊號轉換到頻率域一樣，QFT會讓量子狀態的機率振幅產生干涉。&lt;/p>
&lt;p>套用QFT後，藉由量子干涉效應，不與週期 $ r $ 產生共鳴（相位不一致）的錯誤答案，其機率會互相抵消而趨近於零（破壞性干涉），只有帶有週期 $ r $ 資訊的正確答案，其機率會被放大（建設性干涉）。&lt;/p>
&lt;h3 id="步驟5測量與連分數展開傳統後處理">步驟5：測量與連分數展開（傳統後處理）
&lt;/h3>&lt;p>應用QFT後，若是測量第一暫存器，會有極高的機率得到一個接近 $ c \approx \frac{j \cdot 2^n}{r} $ 形式的整數 $ c $（ $ j $ 為未知整數，$ 2^n $ 為暫存器的大小）。&lt;/p>
&lt;p>將這個測量結果 $ c $ 送回傳統電腦，製造出 $ \frac{c}{2^n} \approx \frac{j}{r} $ 這個分數。然後，利用被稱為「連分數展開（Continued fraction expansion）」的數學方法來計算近似值，就能漂亮地找出作為分母的週期 $ r $。&lt;/p>
&lt;p>只要知道了 $ r $，接下來就能利用步驟1的公式計算出 $ N $ 的質因數，RSA加密也就被完全破解了。&lt;/p>
&lt;hr>
&lt;h2 id="現今量子電腦nisq的實力與課題">現今量子電腦（NISQ）的實力與課題
&lt;/h2>&lt;p>雖然在理論上是完美的Shor演算法，但如果被問到「明天RSA加密就會被破解嗎？」，答案明確是「不會」。其原因在於目前量子電腦硬體技術的限制。&lt;/p>
&lt;h3 id="nisqnoisy-intermediate-scale-quantum時代">NISQ（Noisy Intermediate-Scale Quantum）時代
&lt;/h3>&lt;p>我們現在所處的是被稱為「NISQ」的時代。NISQ設備雖然擁有數十到數百個實體量子位元，但對雜訊卻極為脆弱。&lt;/p>
&lt;p>量子位元很容易受到熱或電磁波等外部環境的影響，導致量子狀態被破壞的「去相干（decoherence，失去量子糾纏）」或是操作量子閘時的「閘錯誤」頻繁發生。如果試圖執行像Shor演算法這樣非常深（運算步驟數極度龐大）的量子電路，錯誤就會在計算過程中不斷累積，最終的輸出結果將變成毫無意義的純雜訊。&lt;/p>
&lt;h3 id="實體量子位元與邏輯量子位元">實體量子位元與邏輯量子位元
&lt;/h3>&lt;p>為了解決這個錯誤問題，不可或缺的就是「量子錯誤更正（Quantum Error Correction）」。
雖然傳統電腦也有使用錯誤更正碼，但因為有禁止複製量子狀態的「量子不可複製定理」，使得量子錯誤更正變得非常複雜。&lt;/p>
&lt;p>在量子錯誤更正中，會使用「表面碼（Surface Code）」等技術，將許多充滿雜訊的「實體量子位元」組合起來，創造出一個沒有錯誤的完美「邏輯量子位元」。&lt;/p>
&lt;p>以目前的錯誤率為前提，據估算要製造出1個邏輯量子位元，大約需要1,000到10,000個實體量子位元。這被稱為「錯誤更正的經常性負擔（overhead）」。&lt;/p>
&lt;h3 id="破壞rsa-2048需要多少資源">破壞RSA-2048需要多少資源？
&lt;/h3>&lt;p>那麼，為了解碼RSA-2048而實際去跑Shor演算法，究竟需要多少資源呢？&lt;/p>
&lt;p>根據Craig Gidney（Google）和Martin Ekerå在2021年發表的論文中劃時代的資源估算，若使用最佳化過的Shor演算法並利用表面碼進行錯誤更正，將需要以下資源：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>邏輯量子位元數&lt;/strong> ：約 4,096 個&lt;/li>
&lt;li>&lt;strong>實體量子位元數&lt;/strong> ： &lt;strong>約 2000萬個&lt;/strong> （假設錯誤率在 $10^{-3}$ 左右）&lt;/li>
&lt;li>&lt;strong>計算時間&lt;/strong> ：約 8小時（需要數百萬到數十億次的實體閘操作）&lt;/li>
&lt;/ul>
&lt;p>相對應地，目前量子硬體的發展階段又是如何呢？
IBM在2023年底發表的超導量子處理器「Condor」為 1,121 個量子位元。此外，雖然也有關於生成邏輯量子位元的突破性研究發表（例如哈佛大學和QuEra公司等利用中性原子量子電腦成功生成了48個邏輯量子位元），但目前仍未達到能長時間連續執行「無雜訊完美運算」的階段。&lt;/p>
&lt;p>從數千個實體量子位元擴展到 &lt;strong>2000萬個&lt;/strong> 實用的實體量子位元（並且必須相互連接、在極低溫下穩定運作、還能以超高速處理控制訊號的系統），在工程上存在著難以跨越的障礙（配線問題、冷卻能力的極限、控制電子設備的肥大化）。許多專家預測，要實現能破解RSA-2048的「容錯量子電腦（FTQC）」，至少還需要10年到30年，甚至更長的時間。&lt;/p>
&lt;hr>
&lt;h2 id="悄悄逼近的store-now-decrypt-later威脅與pqc的黎明">悄悄逼近的「Store Now, Decrypt Later」威脅與PQC的黎明
&lt;/h2>&lt;p>如果認為「還要等10年以上，所以可以放心」，那就太早下定論了。目前存在著許多必須確保未來數十年機密性的資料，例如國家機密資訊、醫療資料以及長期的基礎設施設計等。&lt;/p>
&lt;p>這裡令人擔憂的是被稱為 &lt;strong>「Store Now, Decrypt Later（現在儲存，稍後解碼）」&lt;/strong> 的攻擊手法。充滿惡意的國家或組織會攔截目前用RSA或ECC（橢圓曲線密碼學）加密的所有通訊資料，並儲存到硬碟裡。然後在10年、20年後，當強大的量子電腦完成的瞬間，利用Shor演算法解開過去所有的資料並將機密曝光。&lt;/p>
&lt;p>為了對抗這種時間差帶來的威脅，以NIST（美國國家標準暨技術研究院）為中心，正急起直追地推動 &lt;strong>「後量子密碼學（PQC: Post-Quantum Cryptography）」&lt;/strong> 的標準化流程。&lt;/p>
&lt;p>PQC是一種基於即使用量子電腦也難以解開（也就是無法應用Shor演算法）的數學問題所建立的新型加密演算法。主要的方法有以下幾種：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>晶格密碼學（Lattice-based cryptography）&lt;/strong> ：以LWE（Learning with Errors）問題等為基礎。在NIST的標準化中為主流（Kyber、Dilithium等）。&lt;/li>
&lt;li>&lt;strong>編碼型密碼學（Code-based cryptography）&lt;/strong> ：取決於解碼錯誤更正碼問題的困難度。&lt;/li>
&lt;li>&lt;strong>多變量多項式密碼學（Multivariate cryptography）&lt;/strong> ：取決於解開多變數聯立二次方程式的困難度。&lt;/li>
&lt;li>&lt;strong>雜湊型數位簽章（Hash-based signatures）&lt;/strong> ：僅依賴於雜湊函數安全性的數位簽章。&lt;/li>
&lt;/ul>
&lt;p>目前，包括Google Chrome和Apple的iMessage等主要軟體和平台，都已經開始進行PQC的導入測試和混合實作了。&lt;/p>
&lt;h2 id="結語">結語
&lt;/h2>&lt;p>量子電腦正從科幻世界的夢想，轉變為現實工程上的挑戰。Shor演算法是數學與量子力學融合的人類偉大智慧結晶，但同時也蘊含著動搖我們數位社會基礎的「破壞性力量」。&lt;/p>
&lt;p>RSA加密並不會明天馬上就無法使用。然而，考量到量子技術的進化以及「Store Now, Decrypt Later」的風險，轉向PQC這場將在密碼史留下紀錄的大規模轉移，已經悄悄開始了。我們現在正目睹資訊安全典範轉移的最前線。&lt;/p></description></item><item><title>愛因斯坦的名言</title><link>http://kenji.blog/zh-tw/p/%E6%84%9B%E5%9B%A0%E6%96%AF%E5%9D%A6%E7%9A%84%E5%90%8D%E8%A8%80/</link><pubDate>Sat, 24 Aug 2024 18:38:47 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E6%84%9B%E5%9B%A0%E6%96%AF%E5%9D%A6%E7%9A%84%E5%90%8D%E8%A8%80/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A2%E3%82%A4%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E3%81%AE%E5%90%8D%E8%A8%80/Solvay_conference_1927.jpg" alt="Featured image of post 愛因斯坦的名言" />&lt;p>你好！&lt;/p>
&lt;p>今天，我想談談愛因斯坦的名言。&lt;/p>
&lt;hr>
&lt;h2 id="世界不看重你的善行">世界不看重你的善行？
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">世界永遠不會評估你做的一百萬件好事。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">但他們會批評你做錯的一件事...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">但不要灰心
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">「永遠超越所有的嘲笑和批評。保持堅強。」
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 阿爾伯特·愛因斯坦
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>這是據說由愛因斯坦所說的話。它敏銳地指出了我們每天感受到的社會的嚴酷，以及人們評價的偏見。&lt;/p>
&lt;hr>
&lt;h2 id="儘管如此繼續站起來">儘管如此，繼續站起來
&lt;/h2>&lt;p>「永遠超越所有的嘲笑和批評。保持堅強。」&lt;/p>
&lt;p>這些接下來的話可以說是愛因斯坦對上述殘酷現實的回答。它們教會我們不屈服於批評或嘲笑，並繼續對自己充滿信心地前進的重要性。&lt;/p>
&lt;hr>
&lt;h2 id="將愛因斯坦的教誨應用於日常生活">將愛因斯坦的教誨應用於日常生活
&lt;/h2>&lt;p>這句名言與我們的日常生活息息相關。例如，有時候你在工作上的努力沒有得到認可，只有微小的錯誤引人注目。此外，你在社群媒體上的發言可能會被斷章取義並受到批評。&lt;/p>
&lt;p>在這種時候，試著記住愛因斯坦的話。重要的是保持自己的信念，而不是為別人的評價而喜怒哀樂。&lt;/p>
&lt;hr>
&lt;h2 id="結論">結論
&lt;/h2>&lt;p>愛因斯坦的這句名言教會了我們「不被他人評價所左右，相信自己而活」的重要性。讓我們有勇氣走我們相信的道路，不屈服於批評或嘲笑。&lt;/p>
&lt;p>最後，再次回顧愛因斯坦的話。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>「永遠超越所有的嘲笑和批評。保持堅強。」&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>希望這些話能在你心中產生共鳴，並激勵你向前邁出積極的一步。&lt;/p></description></item><item><title>生成質數的C語言程式碼</title><link>http://kenji.blog/zh-tw/p/%E7%94%9F%E6%88%90%E8%B3%AA%E6%95%B8%E7%9A%84c%E8%AA%9E%E8%A8%80%E7%A8%8B%E5%BC%8F%E7%A2%BC/</link><pubDate>Sat, 24 Aug 2024 09:38:10 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E7%94%9F%E6%88%90%E8%B3%AA%E6%95%B8%E7%9A%84c%E8%AA%9E%E8%A8%80%E7%A8%8B%E5%BC%8F%E7%A2%BC/</guid><description>&lt;img src="http://kenji.blog/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/img.png" alt="Featured image of post 生成質數的C語言程式碼" />&lt;p>以下是一個簡單的C語言程式碼，用於生成指定範圍內的質數。在這個例子中，我們列舉從1到n的質數。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdbool.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="nf">isPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">printPrimes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;2 &amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">isPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;%d &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;請輸入生成質數範圍的最大值: &amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scanf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;1到%d之間的質數如下:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printPrimes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>這段程式碼的運作方式如下：&lt;/p>
&lt;ol>
&lt;li>isPrime函數：判斷給定的數字是否為質數。為了提高效率，首先檢查是否能被2和3整除，然後再以6的倍數進行檢查。&lt;/li>
&lt;li>printPrimes函數：輸出指定範圍內的質數。首先輸出2，然後只檢查奇數。&lt;/li>
&lt;li>main函數：讓使用者輸入範圍的最大值，並輸出該範圍內的質數。&lt;/li>
&lt;/ol>
&lt;p>編譯並執行此程式碼後，將會顯示指定範圍內的質數。&lt;/p></description></item><item><title>數學的未解決問題</title><link>http://kenji.blog/zh-tw/p/%E6%95%B8%E5%AD%B8%E7%9A%84%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/</link><pubDate>Sat, 02 Mar 2024 22:57:36 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E6%95%B8%E5%AD%B8%E7%9A%84%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/img.png" alt="Featured image of post 數學的未解決問題" />&lt;h1 id="數學的未解決問題">數學的未解決問題
&lt;/h1>&lt;p>我將解釋數學的未解決問題。即使問題本身很簡單，但仍然有許多問題尚未被證明。&lt;/p>
&lt;h2 id="完全數有無數個嗎">完全數有無數個嗎？
&lt;/h2>&lt;p>完全數是指除自身以外的正因數之和等於自身的自然數。
例如，&lt;/p>
&lt;ul>
&lt;li>6的因數是1, 2, 3，因為1+2+3=6，所以它是完全數。&lt;/li>
&lt;li>28的因數是1, 2, 4, 7, 14，因為1+2+4+7+14=28，所以它是完全數。&lt;/li>
&lt;/ul>
&lt;p>目前只發現了51個，雖然預計有無數個，
但這尚未被證明。&lt;/p>
&lt;h2 id="哥德巴赫猜想">哥德巴赫猜想
&lt;/h2>&lt;p>哥德巴赫猜想是，所有大於2的偶數都可以表示為兩個質數之和。
（這裡的質數是指除了1和自身之外沒有其他因數的自然數。）&lt;/p>
&lt;p>例如，&lt;/p>
&lt;ul>
&lt;li>4=2+2&lt;/li>
&lt;li>6=3+3&lt;/li>
&lt;li>8=3+5&lt;/li>
&lt;li>10=3+7=5+5&lt;/li>
&lt;/ul>
&lt;p>問題本身非常簡單，但至今尚未被證明。&lt;/p>
&lt;h2 id="黎曼猜想">黎曼猜想
&lt;/h2>&lt;p>黎曼猜想是，黎曼ζ函數的零點僅限於負偶數和實部為 1 / 2 的複數。&lt;/p>
&lt;p>黎曼ζ函數是，當 $s$ 為複數，$n$ 為自然數時，&lt;/p>
$$\zeta(s):=\sum _{n=1}^{\infty }{\frac {1}{n^{s}}}=1+{\frac {1}{2^{s}}}+{\frac {1}{3^{s}}}+{\frac {1}{4^{s}}}+\cdots$$
&lt;p>由上述公式所定義的函數 $\zeta$。&lt;/p></description></item><item><title>使用 Mathematica 解決旅行推銷員問題</title><link>http://kenji.blog/zh-tw/p/%E4%BD%BF%E7%94%A8-mathematica-%E8%A7%A3%E6%B1%BA%E6%97%85%E8%A1%8C%E6%8E%A8%E9%8A%B7%E5%93%A1%E5%95%8F%E9%A1%8C/</link><pubDate>Wed, 12 Oct 2022 19:05:58 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E4%BD%BF%E7%94%A8-mathematica-%E8%A7%A3%E6%B1%BA%E6%97%85%E8%A1%8C%E6%8E%A8%E9%8A%B7%E5%93%A1%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/mathematica%E3%81%A7%E5%B7%A1%E5%9B%9E%E3%82%BB%E3%83%BC%E3%83%AB%E3%82%B9%E3%83%9E%E3%83%B3%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F/img.png" alt="Featured image of post 使用 Mathematica 解決旅行推銷員問題" />&lt;h1 id="使用-mathematica-解決旅行推銷員問題">使用 Mathematica 解決旅行推銷員問題
&lt;/h1>&lt;h2 id="問題">問題
&lt;/h2>&lt;blockquote class="twitter-tweet">&lt;p lang="ja" dir="ltr">電車でこんな広告を見かけました😁📸 &lt;a href="https://t.co/iXEgvtXrpL">pic.twitter.com/iXEgvtXrpL&lt;/a>&lt;/p>&amp;mdash; 早稲田大学 早水桃子研究室 (@hayamizu_lab) &lt;a href="https://x.com/hayamizu_lab/status/1579806418982825984?ref_src=twsrc%5Etfw">October 11, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.x.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h2 id="解法">解法
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">d=SparseArray[{{1,2}-&amp;gt;10,{2,1}-&amp;gt;10,{1,5}-&amp;gt;15,{5,1}-&amp;gt;15,{1,4}-&amp;gt;12,{4,1}-&amp;gt;12,{1,3}-&amp;gt;20,{3,1}-&amp;gt;20,{2,5}-&amp;gt;10,{5,2}-&amp;gt;10,{3,4}-&amp;gt;10,{4,3}-&amp;gt;10,{3,8}-&amp;gt;30,{8,3}-&amp;gt;30,{3,7}-&amp;gt;20,{7,3}-&amp;gt;20,{3,6}-&amp;gt;25,{6,3}-&amp;gt;25,{4,5}-&amp;gt;15,{5,4}-&amp;gt;15,{4,8}-&amp;gt;20,{8,4}-&amp;gt;20,{5,9}-&amp;gt;18,{9,5}-&amp;gt;18,{5,8}-&amp;gt;15,{8,5}-&amp;gt;15,{6,7}-&amp;gt;5,{7,6}-&amp;gt;5,{7,8}-&amp;gt;35,{8,7}-&amp;gt;35,{8,9}-&amp;gt;12,{9,8}-&amp;gt;12},{9,9},Infinity];
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>使用 SparseArray 函數建立矩陣。每個元素代表該元素的行與列對應城市之間的距離。例如，第一個元素 &lt;code>{1,2}-&amp;gt;10&lt;/code> 表示 1 和 2 之間的距離是 10。倒數第二個元素 &lt;code>{9,9}&lt;/code> 表示矩陣的大小，最後一個元素 &lt;code>Infinity&lt;/code> 表示未指定城市之間的道路長度無限大。也就是說，意味著沒有道路。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{len,tour}=FindShortestTour[{1,2,3,4,5,6,7,8,9},DistanceFunction-&amp;gt;(d[[#1,#2]]&amp;amp;)]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>透過 FindShortestTour 函數，可以輕鬆解決旅行推銷員問題。&lt;code>{1,2,3,4,5,6,7,8,9}&lt;/code> 代表城市編號。&lt;code>DistanceFunction-&amp;gt;(d[[#1,#2]]&amp;amp;)&lt;/code> 傳遞了代表城市之間距離的矩陣 d。&lt;/p>
&lt;h2 id="輸出">輸出
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{137, {1, 2, 5, 9, 8, 7, 6, 3, 4}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>輸出為最短距離及當時的巡迴路線。最短距離為 &lt;code>137&lt;/code>，巡迴路線為 &lt;code>1→2→5→9→8→7→6→3→4→1&lt;/code>。按照 ABC 順序轉換後，將變為 &lt;code>A, B, E, I, H, G, F, C, D&lt;/code>。&lt;/p></description></item><item><title>數學的偉人們</title><link>http://kenji.blog/zh-tw/p/%E6%95%B8%E5%AD%B8%E7%9A%84%E5%81%89%E4%BA%BA%E5%80%91/</link><pubDate>Thu, 22 Sep 2022 23:06:37 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E6%95%B8%E5%AD%B8%E7%9A%84%E5%81%89%E4%BA%BA%E5%80%91/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/img.png" alt="Featured image of post 數學的偉人們" />&lt;h3 id="費馬-p-de-fermat-1601-1665">費馬 (P, de Fermat, 1601-1665)
&lt;/h3>&lt;p>17世紀法國的代表性數學家。為解析幾何、機率論、微分法等奠定了基礎。他也是數論的創始人。&lt;/p>
&lt;h3 id="丟番圖-diophantus-約207-約291">丟番圖 (Diophantus, 約207-約291)
&lt;/h3>&lt;p>希臘數學家。以引入符號法及研究有理數解聞名。代表作有《算術》。求方程式有理數解的分支被稱為丟番圖分析。&lt;/p>
&lt;h3 id="歐拉-l-euler-1707-1783">歐拉 (L. Euler, 1707-1783)
&lt;/h3>&lt;p>瑞士誕生的數學之王。在所有數學領域都取得了成就。留下了超過700篇論文和45部著作。&lt;/p>
&lt;h3 id="勒讓德-a-m-legendre-1752-1833">勒讓德 (A. M. Legendre, 1752-1833)
&lt;/h3>&lt;p>法國數學家。在整數論、橢圓積分、引力問題等多個領域留下了成就。「數論」一詞源於他的主要著作《數論》。&lt;/p>
&lt;h3 id="庫默爾-e-e-kummer-1810-1893">庫默爾 (E. E. Kummer, 1810-1893)
&lt;/h3>&lt;p>德國數學家。將分圓體的整數論應用於費馬最後定理，並取得了重大成果。&lt;/p>
&lt;h3 id="笛卡兒-r-descartes-1596-1650">笛卡兒 (R. Descartes, 1596-1650)
&lt;/h3>&lt;p>法國極具獨創性的哲學家。代表作包括《方法論》、《幾何學》和《宇宙論》等。&lt;/p>
&lt;h3 id="巴斯卡-b-pascal-1623-1662">巴斯卡 (B. Pascal, 1623-1662)
&lt;/h3>&lt;p>以機率論和流體研究聞名的法國哲學家。後來加入詹森派，從事宗教活動。《思想錄》是那時期的著作。&lt;/p>
&lt;h3 id="巴歇-c-g-bachet-1581-1638">巴歇 (C. G. Bachet, 1581-1638)
&lt;/h3>&lt;p>法國貴族，將研究數字謎題作為興趣。出版了丟番圖《算術》的拉丁文譯本，並將自己的研究作為註釋刊登其中。&lt;/p>
&lt;h3 id="沃利斯-j-wallis-1616-1703">沃利斯 (J. Wallis, 1616-1703)
&lt;/h3>&lt;p>英國數學家。在其主要著作《無窮算術》中賦予極限概念數學形式，為微積分學的基礎做出了貢獻。&lt;/p>
&lt;h3 id="布隆克爾-w-brouncker-1620-1684">布隆克爾 (W. Brouncker, 1620-1684)
&lt;/h3>&lt;p>愛爾蘭貴族。皇家學會（英國科學院）首任會長。數學愛好者，與沃利斯等人有交流。&lt;/p>
&lt;h3 id="拉格朗日-j-l-lagrange-1736-1813">拉格朗日 (J. L. Lagrange, 1736-1813)
&lt;/h3>&lt;p>出生於義大利的法國數學家。作為歐拉的繼任者擔任柏林科學院數學部主任。在整數論、解析力學等方面取得了重大成就。&lt;/p>
&lt;h3 id="西格爾-c-l-siegel-1896-1981">西格爾 (C. L. Siegel, 1896-1981)
&lt;/h3>&lt;p>德國數論學家。在數的解析理論中做出了諸多貢獻。&lt;/p>
&lt;h3 id="斐波那契-l-fibonacci-約1175-約1250">斐波那契 (L. Fibonacci, 約1175-約1250)
&lt;/h3>&lt;p>義大利數學家。在他的主要著作《算盤書》中使用了印度-阿拉伯數字，並致力於其普及。此外，在《平方書》中論述了同餘數。&lt;/p>
&lt;h3 id="貝克-a-baker-1939-">貝克 (A. Baker, 1939-)
&lt;/h3>&lt;p>英國數論學家。因在超越數論上的貢獻，與廣中平祐共同獲頒菲爾茲獎。&lt;/p>
&lt;h3 id="龐加萊-j-poincare-1854-1912">龐加萊 (J. Poincare, 1854-1912)
&lt;/h3>&lt;p>被稱為最後一位全能數學家的法國數學家。除了自守函數論、非歐幾何、微分方程式、天體力學、電動力學等領域外，在科學評論方面也留下了卓越的著作。&lt;/p>
&lt;h3 id="莫德爾-l-j-mordell-1888-1972">莫德爾 (L. J. Mordell, 1888-1972)
&lt;/h3>&lt;p>出生於美國的數學家。父母是來自立陶宛的移民。在不定方程式論方面有許多論文，其中橢圓曲線論中的莫德爾定理尤為著名。韋伊將其推廣到一般代數曲線的情況，算術代數幾何從此獲得了爆炸性的發展。&lt;/p>
&lt;h3 id="韋伊-a-weil-1906-">韋伊 (A. Weil, 1906-)
&lt;/h3>&lt;p>猶太裔法國數學家。年輕時對費馬問題產生興趣，為了將其應用於數論，從根本上重新審視了代數幾何學，並進行了嚴格的基礎建設。也以數學史的著作而聞名。&lt;/p>
&lt;h3 id="梅森-m-mersenne-1588-1648">梅森 (M. Mersenne, 1588-1648)
&lt;/h3>&lt;p>法國最小兄弟會的神父。促成了各地數學家之間的書信往來。名為梅森數的數字，實際上也是由費馬構想出來的。&lt;/p>
&lt;h3 id="羅貝瓦爾-g-p-de-roberval-1602-1675">羅貝瓦爾 (G. P. de Roberval, 1602-1675)
&lt;/h3>&lt;p>法國數學家。是當時幾乎唯一獲得數學教授職位的人，以對擺線的研究而聞名。&lt;/p>
&lt;h3 id="阿貝爾-n-h-abel-1802-1829">阿貝爾 (N. H. Abel, 1802-1829)
&lt;/h3>&lt;p>挪威數學家。在一般五次方程式的不可解性、橢圓函數論、阿貝爾積分論等方面取得了傑出成就，但英年早逝。&lt;/p>
&lt;h3 id="雅可比-k-g-jacob-1804-1851">雅可比 (K. G. Jacob, 1804-1851)
&lt;/h3>&lt;p>猶太裔德國數學家。在橢圓函數論、θ函數論、微分方程式、變分學等領域留下了重大成就。向世人介紹了阿貝爾的成就。也以將科學的目的定為「人類精神的榮譽」並排斥實用主義而聞名。&lt;/p>
&lt;h3 id="高斯-c-f-gauss-1777-1855">高斯 (C. F. Gauss, 1777-1855)
&lt;/h3>&lt;p>德國誕生的數學之王。以整數論、非歐幾何、測地學、超幾何級數、曲面論、地磁研究等聞名。是個完美主義者，據說如果沒有達到連鷹架都看不見的完美程度，他就不會公開成果。主要著作有《算術研究》等。&lt;/p>
&lt;h3 id="拉梅-g-lame-1795-1870">拉梅 (G. Lame, 1795-1870)
&lt;/h3>&lt;p>法國數學家。在彈性力學、熱傳導論等方面有貢獻。&lt;/p>
&lt;h3 id="劉維爾-j-liouville-1809-1882">劉維爾 (J. Liouville, 1809-1882)
&lt;/h3>&lt;p>法國數學家。對微分方程式、超越整數論、函數論做出了貢獻。&lt;/p>
&lt;h3 id="柯西-a-l-cauchy-1789-1857">柯西 (A. L. Cauchy, 1789-1857)
&lt;/h3>&lt;p>法國數學家。多產，在理論物理和數學方面有許多成就。據說在法國受到的尊敬可與高斯媲美。&lt;/p>
&lt;h3 id="伽羅瓦-e-galois-1811-1832">伽羅瓦 (E. Galois, 1811-1832)
&lt;/h3>&lt;p>法國數學家。引入群的概念，闡明了阿貝爾關於五次以上方程式一般無法用代數解的定理。年紀輕輕就在決鬥中倒下，現在已知起因是一場無聊的女性糾紛。&lt;/p>
&lt;h3 id="亨澤爾-k-hensel-1861-1941">亨澤爾 (K, Hensel, 1861-1941)
&lt;/h3>&lt;p>德國數學家。克羅內克的學生。應用函數論的手法，在數論中引入了p進制（p進解析）理論。&lt;/p>
&lt;h3 id="哈塞-h-hesse-1898-1979">哈塞 (H. Hesse, 1898-1979)
&lt;/h3>&lt;p>德國數學家。亨澤爾的學生，為p進解析的基礎及其應用做出了貢獻。完善了類體論、研究橢圓曲線的L函數等。&lt;/p>
&lt;h3 id="克羅內克-l-kronecker-1823-1891">克羅內克 (L. Kronecker, 1823-1891)
&lt;/h3>&lt;p>猶太裔德國數學家。對橢圓函數論、數論等做出了貢獻。也以提倡數學的算術基礎而聞名，但因其主觀性強的性格，對柏林大學的同事魏爾斯特拉斯進行無理的批評，以及阻撓康托爾的就業，為他的一生帶來了負面形象。&lt;/p>
&lt;h3 id="希爾伯特-d-hilbert-1862-1943">希爾伯特 (D. Hilbert, 1862-1943)
&lt;/h3>&lt;p>德國數學家。在不變量理論、代數整數論、數學基礎論等數學的各個領域留下了巨大的足跡。他在巴黎國際數學家大會 (1900) 上提出的23個問題對數學的發展產生了重大影響。&lt;/p>
&lt;h3 id="黎曼-b-riemann-1826-1866">黎曼 (B. Riemann, 1826-1866)
&lt;/h3>&lt;p>德國數學家。在複變函數論中黎曼面的概念、黎曼幾何學等涉及數學根本的領域取得了重大成就。&lt;/p>
&lt;h3 id="法爾廷斯-g-faltings-1954-">法爾廷斯 (G. Faltings, 1954-)
&lt;/h3>&lt;p>德國數學家。在1983年解決了莫德爾猜想。&lt;/p>
&lt;h3 id="懷爾斯-a-wiles-1953-">懷爾斯 (A, Wiles, 1953-)
&lt;/h3>&lt;p>出生於英國的數學家。在岩澤主猜想、貝赫和斯維納通-戴爾猜想等研究中做出了重大貢獻，是該領域的權威。&lt;/p>
&lt;h3 id="參考文獻">參考文獻
&lt;/h3>&lt;p>費馬最後定理被解開了！從歐拉到懷爾斯的證明 講談社&lt;/p></description></item><item><title>有數學家登場的電影</title><link>http://kenji.blog/zh-tw/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/</link><pubDate>Mon, 05 Sep 2022 10:41:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/images/img.png" alt="Featured image of post 有數學家登場的電影" />&lt;p>這是我推薦的 3 部以數學家為主角的電影。&lt;/p>
&lt;h1 id="美麗境界">美麗境界
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/images/beautiful_mind.jpg"
loading="lazy"
>&lt;br>
這是一部描繪真實存在的美國天才數學家半生的作品。結局有著令人驚訝的發展。
羅素·克洛作為主角的表現非常有味道。&lt;/p>
&lt;h1 id="攔截密碼戰">攔截密碼戰
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/images/enigma.jpg"
loading="lazy"
>&lt;/p>
&lt;blockquote>
&lt;p>改編自羅伯特·哈里斯的小說《Enigma》的 2001 年電影。
來自維基百科&lt;/p>
&lt;/blockquote>
&lt;p>這是一個關於解密德國製造的「恩尼格瑪」密碼機的故事。&lt;/p>
&lt;h1 id="模仿遊戲">模仿遊戲
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/images/imitation_game.jpg"
loading="lazy"
>&lt;/p>
&lt;p>這同樣是處理恩尼格瑪密碼機的解密故事。我很喜歡當時的世界觀。&lt;/p>
&lt;h1 id="天才無限家">天才無限家
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img.png"
width="566"
height="800"
srcset="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_hu224d39544ca0af082720aacd7902fd19_1089949_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_hu224d39544ca0af082720aacd7902fd19_1089949_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/p>
&lt;p>這部作品描繪了劍橋大學數學家哈代和印度數學家拉馬努金之間的交流。你能感受到數學的美。&lt;/p>
&lt;h1 id="愛的萬物論">愛的萬物論
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_1.png"
width="800"
height="459"
srcset="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_1_hubfe00de5360673c8281820134bf7a309_739706_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_1_hubfe00de5360673c8281820134bf7a309_739706_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="418px"
>&lt;/p>
&lt;p>描繪霍金博士半生的作品。&lt;/p>
&lt;h1 id="粒子狂熱">粒子狂熱
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_2.png"
width="640"
height="960"
srcset="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_2_hu18abd37eefb70a17a04950b9cdaa7d84_902746_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_2_hu18abd37eefb70a17a04950b9cdaa7d84_902746_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="66"
data-flex-basis="160px"
>&lt;/p></description></item><item><title>【用數學公式完全理解】為何最強古典演算法「GNFS」會敗給量子演算法？質因數分解的典範轉移</title><link>http://kenji.blog/zh-tw/p/gnfs-to-shors-algorithm-math-deepdive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://kenji.blog/zh-tw/p/gnfs-to-shors-algorithm-math-deepdive/</guid><description>&lt;img src="http://kenji.blog/p/gnfs-to-shors-algorithm-math-deepdive/quantum_vs_gnfs_eyecatch_1788616101508.jpg" alt="Featured image of post 【用數學公式完全理解】為何最強古典演算法「GNFS」會敗給量子演算法？質因數分解的典範轉移" />&lt;p>現代網際網路社會中的資訊安全，主要依賴以RSA密碼為首的公開金鑰密碼系統來保護。RSA密碼安全性的基礎，仰賴於 &lt;strong>「對巨大的合成數進行質因數分解，在計算複雜度上是極度困難的」&lt;/strong> 這個事實。&lt;/p>
&lt;p>本文將解析古典電腦中最強的質因數分解演算法 &lt;strong>「普通數體篩法」&lt;/strong> （General Number Field Sieve, GNFS）的數學機制，並透過數學公式與概念圖，深入探討為何它會被彼得·秀爾（Peter Shor）所發現的 &lt;strong>「Shor演算法」&lt;/strong> 完全擊敗，徹底剖析這場典範轉移。&lt;/p>
&lt;hr>
&lt;h2 id="1-古典計算中質因數分解的策略從費馬質因數分解法的發展">1. 古典計算中質因數分解的策略：從費馬質因數分解法的發展
&lt;/h2>&lt;p>質因數分解問題，是對於給定的合成數 $N$，找出滿足 $N = p \times q$ 的質數 $p, q$ 的問題。&lt;/p>
&lt;p>基本的想法，可以歸結為尋找滿足以下同餘式的非平凡 $x, y$：&lt;/p>
$$ x^2 \equiv y^2 \pmod N $$
&lt;p>將其變形後可得：&lt;/p>
$$ x^2 - y^2 \equiv 0 \pmod N $$
$$ (x - y)(x + y) \equiv 0 \pmod N $$
&lt;p>在此，若 $x \not\equiv \pm y \pmod N$，藉由計算 $\gcd(x-y, N)$ 或 $\gcd(x+y, N)$，就能獲得 $N$ 的非平凡因數。這個事實成為了GNFS等近代質因數分解演算法的基礎。&lt;/p>
&lt;hr>
&lt;h2 id="2-最強古典演算法普通數體篩法gnfs的深淵">2. 最強古典演算法：「普通數體篩法」（GNFS）的深淵
&lt;/h2>&lt;p>&lt;strong>「GNFS」&lt;/strong> 是目前已知針對古典電腦的質因數分解演算法中速度最快的。它的時間複雜度需要次指數（Sub-exponential）時間。&lt;/p>
&lt;h3 id="gnfs的計算複雜度">GNFS的計算複雜度
&lt;/h3>&lt;p>當數字 $N$ 的位數為 $b = \log_2 N$ 時，GNFS的計算複雜度可以表示如下：&lt;/p>
$$ O\left( \exp \left( \left(\frac{64}{9} b\right)^{1/3} (\log b)^{2/3} \right) \right) $$
&lt;p>從這個公式可以看出，複雜度並非多項式時間，而是比指數函數稍微慢一點的 &lt;strong>「次指數時間」&lt;/strong> 。儘管如此，當位數增加時，計算時間仍會以天文數字般增長。&lt;/p>
&lt;h3 id="gnfs的數學機制">GNFS的數學機制
&lt;/h3>&lt;p>GNFS大致可以分為四個步驟：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>多項式選擇 (Polynomial Selection)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>篩法 (Sieving)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>矩陣化簡 (Matrix Reduction)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>計算平方根 (Square Root)&lt;/strong>&lt;/li>
&lt;/ol>
&lt;h4 id="21-多項式選擇與代數體">2.1. 多項式選擇與代數體
&lt;/h4>&lt;p>首先，選擇以整數為係數的不可約多項式 $f(x)$ 與 $g(x)$。它們被設定為在 modulo $N$ 之下具有共同的根 $m$。也就是說，&lt;/p>
$$ f(m) \equiv 0 \pmod N $$
$$ g(m) \equiv 0 \pmod N $$
&lt;p>通常，$g(x)$ 會被選為一次多項式 $g(x) = x - m$。若將 $f(x)$ 的根設為 $\alpha$，則可建構出名為 $\mathbb{Q}(\alpha)$ 的 &lt;strong>「代數體」&lt;/strong> （Number Field）。透過同態映射 $\phi: \alpha \mapsto m$，來比較 $\mathbb{Q}(\alpha)$ 環上的運算與一般整數環 $\mathbb{Z}$ 的運算。&lt;/p>
&lt;h4 id="22-篩法-sieving">2.2. 篩法 (Sieving)
&lt;/h4>&lt;p>接著，大量搜尋互質的整數對 $(a, b)$。目的是尋找使得以下兩個數值皆為 &lt;strong>「B-smooth」&lt;/strong> （僅由較小的質因數組成）的配對：&lt;/p>
&lt;ol>
&lt;li>$a - bm$ （在整數環上的值）&lt;/li>
&lt;li>$b^d f(a/b)$ （對應到代數體上的範數 $N(a - b\alpha)$）&lt;/li>
&lt;/ol>
&lt;p>這裡使用了一種稱為 &lt;strong>「篩法」&lt;/strong> （Sieve）的快速搜尋手法。藉此，能從龐大的候選者中有效率地萃取出符合條件的 $(a, b)$ 配對。&lt;/p>
&lt;h4 id="23-矩陣化簡-linear-algebra-over-gf2">2.3. 矩陣化簡 (Linear Algebra over GF(2))
&lt;/h4>&lt;p>從收集到的配對 $(a, b)$ 建構出指數向量，並在 $\mathbb{F}_2$ （元素僅有0與1的體）上求出巨大稀疏矩陣的左零空間。&lt;/p>
&lt;p>為了讓關係式 $ \prod (a_i - b_i m) $ 與 $ \prod (a_i - b_i \alpha) $ 分別成為平方元素，我們找出向量 $v$ 作為解。這無非就是解以下的線性方程組：&lt;/p>
$$ M \mathbf{x} \equiv \mathbf{0} \pmod 2 $$
&lt;p>在此階段，會活用如區塊蘭佐斯法（Block Lanczos Algorithm）或區塊維德曼法（Block Wiedemann Algorithm）等高度數值計算演算法。&lt;/p>
&lt;h4 id="24-計算平方根">2.4. 計算平方根
&lt;/h4>&lt;p>最後，在代數體與整數環兩邊皆取平方根，導出 $x^2 \equiv y^2 \pmod N$ 這個關係式。接著計算 $\gcd(x-y, N)$，便能獲得因數。&lt;/p>
&lt;hr>
&lt;h2 id="3-量子計算帶來的突破shor演算法">3. 量子計算帶來的突破：「Shor演算法」
&lt;/h2>&lt;p>相對於GNFS需要次指數時間，由彼得·秀爾於1994年發表的 &lt;strong>「Shor演算法」&lt;/strong> ，透過使用量子電腦，能以 &lt;strong>「多項式時間」&lt;/strong> 解決這個問題。&lt;/p>
&lt;h3 id="shor演算法的計算複雜度">Shor演算法的計算複雜度
&lt;/h3>&lt;p>當量子位元數為 $O(\log N)$ 時，時間複雜度如下：&lt;/p>
$$ O((\log N)^3) $$
&lt;p>這意味著計算時間不會相對於位元數產生指數級的爆炸。這是一個驚人的結果：即使是 &lt;strong>「古典計算」&lt;/strong> 需要超過宇宙壽命才能解開的巨大合成數，在 &lt;strong>「量子計算」&lt;/strong> 下也只需數小時至數天即可破解。&lt;/p>
&lt;h3 id="shor演算法的全貌歸結為週期尋找問題">Shor演算法的全貌：歸結為週期尋找問題
&lt;/h3>&lt;p>Shor演算法巧妙地將質因數分解問題歸結為 &lt;strong>「週期尋找問題」&lt;/strong> 。&lt;/p>
&lt;ol>
&lt;li>選擇一個與 $N$ 互質的隨機整數 $a$ （$1 &lt; a &lt; N$）。&lt;/li>
&lt;li>定義函數 $f(x) = a^x \bmod N$。&lt;/li>
&lt;li>尋找 $f(x)$ 的週期 $r$，即尋找使得 $a^r \equiv 1 \pmod N$ 成立的最小正整數 $r$。&lt;/li>
&lt;li>若 $r$ 為偶數，則確認 $a^{r/2} \not\equiv -1 \pmod N$ 是否成立，並計算 $\gcd(a^{r/2} \pm 1, N)$ 來獲得質因數。&lt;/li>
&lt;/ol>
&lt;p>這個步驟3的 &lt;strong>「尋找週期 $r$ 」&lt;/strong> ，正是古典電腦需要耗費指數時間的瓶頸，但量子電腦透過 &lt;strong>「量子疊加」&lt;/strong> 與 &lt;strong>「量子傅立葉轉換」&lt;/strong> （QFT），能在一瞬間解決這個問題。&lt;/p>
&lt;hr>
&lt;h2 id="4-量子傅立葉轉換qft與週期的萃取">4. 量子傅立葉轉換（QFT）與週期的萃取
&lt;/h2>&lt;p>讓我們用數學公式詳細檢視Shor演算法的核心：量子狀態的操作。&lt;/p>
&lt;h3 id="41-產生量子疊加態">4.1. 產生量子疊加態
&lt;/h3>&lt;p>首先，準備兩個量子暫存器。暫存器1保存輸入 $x$ 的疊加態，暫存器2保存函數計算結果 $f(x)$。對初始狀態 $|0\rangle |0\rangle$ 應用阿達馬轉換（Hadamard Transform），創造出所有可能 $x$ 的疊加態。&lt;/p>
$$ |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |0\rangle $$
&lt;p>
（這裡 $Q$ 是滿足 $N^2 \le Q &lt; 2N^2$ 的2的冪次方）&lt;/p>
&lt;p>接著，使用量子神諭（Quantum Oracle） $U_f$ 計算 $f(x) = a^x \bmod N$，並儲存至暫存器2。&lt;/p>
$$ |\psi_2\rangle = U_f |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |a^x \bmod N\rangle $$
&lt;p>假設我們在這裡測量了暫存器2（實際上即使不測量，數學結構也是相同的）。若觀測到某個值 $y = a^{x_0} \bmod N$，則暫存器1的狀態會塌縮成所有滿足 $f(x) = y$ 的 $x$ 的疊加態。假設週期為 $r$，則這樣的 $x$ 將會是 $x_0, x_0 + r, x_0 + 2r, \dots$。&lt;/p>
$$ |\psi_3\rangle = \frac{1}{\sqrt{M}} \sum_{k=0}^{M-1} |x_0 + kr\rangle $$
&lt;p>
（這裡 $M \approx Q/r$ 為項的數量）&lt;/p>
&lt;p>這個狀態蘊含了週期 $r$ 的資訊，但若直接測量，只能得到隨機的 $x_0 + kr$，無法得知週期 $r$。這時QFT就派上用場了。&lt;/p>
&lt;h3 id="42-應用量子傅立葉轉換-quantum-fourier-transform">4.2. 應用量子傅立葉轉換 (Quantum Fourier Transform)
&lt;/h3>&lt;p>QFT是對量子狀態的振幅進行離散傅立葉轉換的操作。QFT對狀態 $|x\rangle$ 的作用定義如下：&lt;/p>
$$ \text{QFT} |x\rangle = \frac{1}{\sqrt{Q}} \sum_{y=0}^{Q-1} e^{2\pi i \frac{xy}{Q}} |y\rangle $$
&lt;p>將其應用於 $|\psi_3\rangle$ 時，會發生相位的干涉（量子干涉）。&lt;/p>
$$ |\psi_4\rangle = \text{QFT} |\psi_3\rangle = \frac{1}{\sqrt{MQ}} \sum_{y=0}^{Q-1} \sum_{k=0}^{M-1} e^{2\pi i \frac{(x_0 + kr)y}{Q}} |y\rangle $$
&lt;p>展開這個式子的和，會出現：&lt;/p>
$$ \sum_{k=0}^{M-1} e^{2\pi i \frac{kry}{Q}} $$
&lt;p>這個幾何級數的和，只有當 $ry/Q$ 接近整數時才會產生建設性干涉（Constructive Interference），在其他情況下則會相互抵消，產生破壞性干涉（Destructive Interference）。&lt;/p>
&lt;p>因此，能以高機率被測量到的狀態 $|y\rangle$，將是滿足以下條件的整數 $y$：&lt;/p>
$$ \frac{y}{Q} \approx \frac{c}{r} $$
&lt;p>
（$c$ 為某個整數）&lt;/p>
&lt;h3 id="43-透過連分數展開找出週期">4.3. 透過連分數展開找出週期
&lt;/h3>&lt;p>藉由測量得到 $y$ 後，利用古典電腦對 $y/Q$ 進行 &lt;strong>「連分數展開」&lt;/strong> （Continued Fraction Expansion）。藉此，計算出 $y/Q$ 的近似分數 $c/r$，便能非常有效率地從分母萃取出週期 $r$ 的候選值。&lt;/p>
&lt;hr>
&lt;h2 id="5-概念模型的比較與典範轉移">5. 概念模型的比較與典範轉移
&lt;/h2>&lt;p>為了直觀理解GNFS與Shor演算法的差異，以下展示使用Mermaid語法的概念圖。&lt;/p>
&lt;h3 id="透過量子電路的shor演算法概念圖">透過量子電路的Shor演算法概念圖
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[初始狀態: 0...0] --&amp;gt; B[Hadamard轉換產生全狀態的疊加]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C[模冪運算 a^x mod N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|量子糾纏| D[塌縮至具週期性的狀態]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D --&amp;gt; E[量子傅立葉轉換 QFT]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt;|透過干涉放大機率| F[測量: 獲得y]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G[古典處理: 連分數展開]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt; H[發現週期 r]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I[算出N的質因數]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style A fill:#f9f,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style E fill:#bbf,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style I fill:#bfb,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="典範轉移的本質">典範轉移的本質
&lt;/h3>&lt;p>GNFS採取 &lt;strong>「在數學空間（代數體）中尋找關係式」&lt;/strong> 的策略。然而，由於搜尋空間相對於位數呈指數級擴大，使得古典電腦的運算能力（即使包含平行運算），在金鑰長度超過2048位元等情況下，實際上是無法破解的。&lt;/p>
&lt;p>另一方面，Shor演算法利用了 &lt;strong>「量子干涉的波特性」&lt;/strong> 。它同時評估處於疊加態的所有計算路徑，並透過QFT抵消（破壞性干涉）不需要的答案，僅放大（建設性干涉）正確週期答案的機率振幅。藉此，它並非去搜尋空間，而是實現了 &lt;strong>「讓正確答案自己浮現出來」&lt;/strong> 這種完全不同維度的策略。&lt;/p>
&lt;h2 id="6-總結">6. 總結
&lt;/h2>&lt;p>本文深入比較了作為古典極限的 &lt;strong>「GNFS」&lt;/strong> ，以及展現量子計算力量的 &lt;strong>「Shor演算法」&lt;/strong> ，探討了兩者的數學背景與演算法結構。&lt;/p>
&lt;p>GNFS透過多項式選擇與巨大矩陣計算等數學技巧，將計算複雜度壓低至次指數時間；相對地，Shor演算法將量子力學的基本原理（疊加與干涉）與數學工具（QFT）融合，一舉突破至多項式時間。&lt;/p>
&lt;p>目前，尚不存在能夠以實用規模（數千個量子位元）執行Shor演算法的容錯量子電腦（FTQC）。然而，正是這個數學與理論上的典範轉移，成為了現在全世界急於轉換至後量子密碼學（PQC: Post-Quantum Cryptography）的最大理由。&lt;/p></description></item></channel></rss>