tecktom.com

因数分解を位数発見に帰着する

2026年10月15日9分で読めますAI生成教科書『虎の巻』第6部 第3章 Shor のアルゴリズム
目次
  1. 1の平方根で でないもの
  2. でたらめな がうまくいく確率
  3. 木下の層

AI 生成・木下が未勉強

相対エントロピーから情報と物理を組み立てる 第6部 第3章 §6.3.1 ★★★ 位数 rr が偶数で ar/2≢−1a^{r/2}\not\equiv-1 なら gcd⁡(ar/2±1,N)\gcd(a^{r/2}\pm1,N) が因数になる。でたらめに選んだ aa で半分以上の確率でそうなる

NN を2つ以上の素数の積とする。NN を素因数に分ける問題は、桁数 n=⌈log⁡2N⌉n=\lceil\log_2N\rceil について多項式時間で解く古典のアルゴリズムが知られていない。この難しさを安全性の根拠に置いたのが RSA 暗号である1R. L. Rivest, A. Shamir and L. Adleman (1978), Commun. ACM 21, 120。下の脚注へ。P. W. Shor は 1994 年に、量子コンピュータを使えば O(n3)\mathcal{O}(n^3) 程度の手間で因数分解できることを示した2P. W. Shor (1994), Proceedings of the 35th Annual Symposium on Foundations of Computer Science, 124。詳しい版は P. W. Shor (1997), SIAM J. Comput. 26, 1484。下の脚注へ。

この章が選ぶ問題は、NN と互いに素な整数 aa について、ar≡1(modN)a^r\equiv1\pmod N を満たす最小の正の整数 rr(aa の位数)を求める問題である。因数分解は、古典の計算だけで位数を求める問題に帰着する(6.3.1 節)。量子計算を使うのは位数を求める部分だけで、「yy に aa を掛けて NN で割った余りを取る」ユニタリ UaU_a の固有値が e2πis/r\mathrm{e}^{2\pi\mathrm{i} s/r} の形をしていることから、前の章の位相推定(第6部第2章)で s/rs/r の近似値が読める(6.3.2 節)。近似値から分母 rr を取り出す操作は連分数で行い(6.3.3 節)、ここで再び古典の計算に戻る。6.3.4 節で1回の実行が成功する確率と回路の大きさを数え、RSA の 2048 ビットの鍵に要る資源の現在の見積もりを引く。

この巻の背骨である相対エントロピーとの縁は、6.3.5 節に1つだけ置く。位相推定の直前の状態を計算基底でそのまま測ると、結果は周期について何も教えない(相互情報量が 00)。同じ状態に逆 Fourier 変換を当ててから測ると、相互情報量はほぼ ln⁡r\ln r になり、出力の分布は一様分布から DD の分だけ離れる。周期の情報は状態の位相に書かれていて、逆 Fourier 変換はその位相を測定で読める基底へ移す操作である。6.3.6 節では、信号処理の授業の離散 Fourier 変換と、暗号の授業の RSA を、この章の式と並べる。

この章の対数は自然対数(nat)とし、ビットで数えるときは log⁡2\log_2 と書く。NN は奇数で、素数の累乗でないとする(偶数なら 22 で割れ、N=pkN=p^k なら N1/kN^{1/k} を k=2,…,nk=2,\dots,n について古典の計算で調べれば見つかる)。第1のレジスタの量子ビットの数を tt、測定で得る整数を m∈{0,1,…,2t−1}m\in\{0,1,\dots,2^t-1\} と書く。位相推定の流儀は前の章に合わせ、tt 量子ビットの量子 Fourier 変換を ∣x⟩↦2−t/2∑ke2πixk/2t∣k⟩| x \rangle \mapsto2^{-t/2}\sum_{k}\mathrm{e}^{2\pi\mathrm{i} xk/2^t}| k \rangle とする(第6部第2章の式 (6.2.1) と同じ符号)。Euler の関数(NN 以下で NN と互いに素な正の整数の個数)を ϕ(N)\phi(N) と書き、位相の φ\varphi と字形で分ける。

1の平方根で ±1\pm1 でないもの

NN と互いに素な aa(1≤a<N1\le a<N)を1つ選び、その位数 rr が分かったとする。rr が偶数なら x≔ar/2 mod Nx\coloneqq a^{r/2}\bmod N は

x2≡ar≡1(modN)x^2\equiv a^r\equiv1\pmod N

を満たす。つまり xx は「NN を法とした1の平方根」である。NN が素数なら1の平方根は ±1\pm1 しかないが、NN が合成数なら他の平方根がある。rr は位数(最小)なので x≢1x\not\equiv1 である。さらに x≢−1x\not\equiv-1 なら、

(x−1)(x+1)≡0(modN),x−1≢0,x+1≢0(modN)(6.3.1)(x-1)(x+1)\equiv0\pmod N,\qquad x-1\not\equiv0,\quad x+1\not\equiv0\pmod N\tag{6.3.1}

となる。NN は積 (x−1)(x+1)(x-1)(x+1) を割り切るのに、どちらの因子も割り切らない。したがって NN の素因数の一部は x−1x-1 に、残りは x+1x+1 に入っていて、gcd⁡(x−1,N)\gcd(x-1,N) と gcd⁡(x+1,N)\gcd(x+1,N) はどちらも 11 でも NN でもない約数になる。最大公約数は Euclid の互除法で O(n3)\mathcal{O}(n^3) 程度のビット演算で求まるので、ここまでの手間は古典の計算として小さい。

たとえば N=15N=15、a=7a=7 では 71=77^1=7、72=49≡47^2=49\equiv4、73≡28≡137^3\equiv28\equiv13、74≡91≡17^4\equiv91\equiv1 で、位数は r=4r=4 である。x=72 mod 15=4x=7^2\bmod15=4 は ±1\pm1 でないので、gcd⁡(3,15)=3\gcd(3,15)=3 と gcd⁡(5,15)=5\gcd(5,15)=5 が因数として出てくる。

でたらめな aa がうまくいく確率

うまくいかないのは、rr が奇数のときと、ar/2≡−1a^{r/2}\equiv-1 のときである。N=15N=15 の a=14a=14 は 14≡−114\equiv-1 なので r=2r=2、ar/2≡−1a^{r/2}\equiv-1 で失敗し、a=1a=1 は r=1r=1 で失敗する。失敗する aa が少ないことは、次の定理が保証する。

定理 6.3.1(位数発見への帰着 ★★★)

NN を奇数で、異なる素因数を k≥2k\ge2 個持つ整数とする。NN と互いに素な aa(1≤a<N1\le a<N)を一様に選ぶと、

Pr⁡(r が偶数かつ ar/2≢−1(modN)) ≥ 1−12k−1 ≥ 12(6.3.2)\Pr\bigl(r\text{ が偶数かつ }a^{r/2}\not\equiv-1\pmod N\bigr)\ \ge\ 1-\frac{1}{2^{k-1}}\ \ge\ \frac12\tag{6.3.2}

が成り立つ。

証明

N=p1α1⋯pkαkN=p_1^{\alpha_1}\cdots p_k^{\alpha_k} とし、中国剰余定理で aa を各 pjαjp_j^{\alpha_j} を法とした余り aja_j の組と同一視する。aa を一様に選ぶことは、各 aja_j をpjαjp_j^{\alpha_j} を法とした既約剰余類から独立に一様に選ぶことと同じである。aja_j の位数を rjr_j とすると r=lcm⁡(r1,…,rk)r=\operatorname{lcm}(r_1,\dots,r_k) である。rjr_j を割り切る2の最大の冪を 2dj2^{d_j} と書く。

失敗は2通りある。rr が奇数なら、すべての rjr_j が奇数で d1=⋯=dk=0d_1=\dots=d_k=0 である。rr が偶数で ar/2≡−1(modN)a^{r/2}\equiv-1\pmod N なら、各 jj で ajr/2≡−1a_j^{r/2}\equiv-1 なのでrjr_j は r/2r/2 を割り切らないが rr を割り切る。これは djd_j が rr の2の指数に等しいことを意味し、すべての djd_j が同じ値になる。どちらの失敗でも d1=⋯=dkd_1=\dots=d_k である。

pjαjp_j^{\alpha_j} を法とした既約剰余類の群は位数 ϕ(pjαj)=pjαj−1(pj−1)\phi(p_j^{\alpha_j})=p_j^{\alpha_j-1}(p_j-1) の巡回群で、pjp_j が奇数なのでこの位数は偶数である。巡回群の元を一様に選ぶと、その位数の2の指数が群の位数の2の指数にちょうど等しくなる確率は 1/21/2(生成元の奇数乗の元がちょうど半分)である。したがって、d1d_1 がどの値でも、djd_j がそれに一致する確率は各 j≥2j\ge2 で 1/21/2 以下で、d1=⋯=dkd_1=\dots=d_k の確率は 2−(k−1)2^{-(k-1)} 以下である。

N=15N=15 では NN と互いに素な aa が ϕ(15)=8\phi(15)=8 個あり、そのうち a=1,14a=1,14 を除く6個で成功する(割合 3/43/4)。N=21N=21 では12個のうち6個(1/21/2、下界の等号)、素因数を3個持つ N=105N=105 では 0.875≥3/40.875\ge3/4 である。1回の試行で半分以上の確率で成功するので、aa を選び直して ℓ\ell 回試せば失敗の確率は 2−ℓ2^{-\ell} 以下になる。残る仕事は位数 rr を求めることだけで、ここに古典の速いアルゴリズムが知られていない。

例題 6.3.1 N=15N=15 の位数の表 ★★

オリジナルN=15N=15 と互いに素な a∈{2,4,7,8,11,13,14}a\in\{2,4,7,8,11,13,14\} のそれぞれについて、位数 rr を求めよ。帰着の手続きで因数が出る aa と出ない aa を分け、出る aa についてどの因数が出るかを書け。a=4a=4 と a=11a=11 の位数が小さい理由を、4=224=2^2、11≡−411\equiv-4 を使って説明せよ。

解答

冪を順に計算すると次の表になる。

aa2478111314
rr4244242
ar/2 mod 15a^{r/2}\bmod15444411414

ar/2≡14≡−1a^{r/2}\equiv14\equiv-1 となる a=14a=14 だけが失敗する。ar/2=4a^{r/2}=4 の場合は gcd⁡(3,15)=3\gcd(3,15)=3、gcd⁡(5,15)=5\gcd(5,15)=5 が出る。a=11a=11 では gcd⁡(10,15)=5\gcd(10,15)=5、gcd⁡(12,15)=3\gcd(12,15)=3 で、同じ2つの因数が逆の順に出る。a=1a=1 も含めると、8個のうち6個が成功する。

22 の位数が4なので、4=224=2^2 の位数は 4/gcd⁡(2,4)=24/\gcd(2,4)=2 になる。11≡−411\equiv-4 なので 112≡16≡111^2\equiv16\equiv1 で、位数は2である。一般に (Z/15Z)×(\mathbb{Z}/15\mathbb{Z})^\times の元の位数は、 mod 3\bmod3 での位数(1か2)と  mod 5\bmod5 での位数(1・2・4のどれか)の最小公倍数で、4を超えない。この「位数は各素因数の側の位数の最小公倍数」という構造が定理 6.3.1 の証明の中身で、a=14a=14 は  mod 3\bmod3 でも  mod 5\bmod5 でも −1-1(位数2)なので、2の指数がそろって失敗する。

1 R. L. Rivest, A. Shamir and L. Adleman (1978), Commun. ACM 21, 120。

2 P. W. Shor (1994), Proceedings of the 35th Annual Symposium on Foundations of Computer Science, 124。詳しい版は P. W. Shor (1997), SIAM J. Comput. 26, 1484。

木下の勉強ステータス

木下はまだこの記事を勉強していません。

AI(Claude)が書いた教材を、木下が勉強しながら公開しています。式と数値は検算していますが、誤りが残っているかもしれません。誤りのご指摘・削除のご依頼をいただければ直します。 連絡先:support@tecktom.com

← AI生成教科書『虎の巻』の記事一覧へ