ショアのアルゴリズムは、整数の素因数を求める量子アルゴリズムです。これは、1994 年にアメリカの数学者ピーター・ショアによって開発されました。[ 1 ] [ 2 ]これは、最もよく知られている古典的(非量子)アルゴリズムと比較して、超多項式的な高速化の強力な証拠があり、魅力的な応用可能性を持つ数少ない既知の量子アルゴリズムの 1 つです。[ 3 ]しかし、量子誤り訂正によるオーバーヘッドのため、古典コンピュータに勝つには数百万個の量子ビットを持つ量子コンピュータが必要になる可能性があります。[ 4 ]
ショアは、因数分解問題、離散対数問題、周期探索問題を解くための複数の類似したアルゴリズムを提案した。「ショアのアルゴリズム」は通常、因数分解アルゴリズムを指すが、3つのアルゴリズムのいずれを指す場合もある。離散対数アルゴリズムと因数分解アルゴリズムは周期探索アルゴリズムの一例であり、3つすべてが隠れた部分群問題の一例である。
量子コンピュータでは、整数を素因数分解するにはショアのアルゴリズムは多項式時間で実行され、つまり所要時間は多項式である。[ 5 ]量子ゲートのオーダーは高速乗算を使用する[ 6 ] 、あるいはハーベイとファン・デル・ホーフェンによって現在知られている漸近的に最速の乗算アルゴリズム[7]を使用することで、整数因数分解問題が複雑性クラスBQPに属することが実証されます。ショアのアルゴリズムは、指数関数以下の時間で動作する最もスケーラブルな古典的な因数分解アルゴリズムである一般的な数体篩よりも漸近的に高速です。[ 8 ]

十分な数の量子ビットを持つ量子コンピュータが量子ノイズやその他の量子デコヒーレンス現象の影響を受けずに動作できると仮定すると、ショアのアルゴリズムは、次のような公開鍵暗号方式を破るために使用できる。
RSAは、大きな整数の素因数分解が計算上可能であれば破られる可能性がある。知られている限りでは、これは古典(非量子)コンピュータでは不可能であり、多項式時間で整数の素因数分解ができる古典アルゴリズムは知られていない。しかし、ショアのアルゴリズムは、理想的な量子コンピュータ上で多項式時間計算量の回路を用いて整数の素因数分解が可能であることを示す。したがって、十分な大きさの量子コンピュータを構築することでRSAを破ることが可能になるかもしれない。これは、量子コンピュータの設計と構築、そして新しい量子コンピュータアルゴリズムの研究にとって強力な動機となった。また、量子コンピュータに対して安全な新しい暗号システム、すなわちポスト量子暗号(PQC)の研究も促進した。
2026年現在、量子コンピュータの高いエラー率と量子エラー訂正に利用できる物理的な量子ビットの数が限られているため、ショアのアルゴリズムの実験室での実証では、試行のごく一部でしか正しい結果が得られず、小さな半素数でのみ成功している。
2001年、 IBMのグループがショアのアルゴリズムを実証し、の中へ7つの量子ビットを持つ量子コンピュータのNMR実装を使用。 [ 10 ] IBMの実装後、2つの独立したグループが光子量子ビットを使用してショアのアルゴリズムを実装した。[ 11 ] [ 12 ] 2012年には、固体量子ビットを用いて実行された。[ 13 ]その後、2012年に、が達成された。[ 14 ] 2016年に、の因数分解が達成された。イオン捕捉量子ビットを使用して再度実行されました。[ 15 ]しかし、これらのデモンストレーションはいずれもショアのアルゴリズムの要件を満たしていません。それらは、解の事前知識を使用して回路をコンパイルしており、中にはアルゴリズムを過度に単純化してコイン投げと同等にしているものもあります。[ 16 ]
私たちが解決しようとしている問題は、奇数の合成数が与えられた場合、その整数因数を見つけます。
これを実現するために、ショアのアルゴリズムは2つの部分から構成されています。
任意の数を効率的に因数分解できれば、完全な因数分解アルゴリズムが可能になる。2つの整数にそして1より大きい、なぜならどちらかがまたは素数でない場合は、素数だけが残るまで、素因数分解アルゴリズムをそれらに対して実行できます。
基本的な観察として、ユークリッドの互除法を用いると、2 つの整数間の最大公約数を常に効率的に計算できることがわかります。特に、これは、効率的にチェックできることを意味します。は偶数であり、その場合、2 は自明に因数である。したがって、この議論の残りの部分では、これは奇妙です。その後、効率的な古典的アルゴリズムを使用して、は素数のべき乗である。[ 17 ]素数のべき乗については、効率的な古典的因数分解アルゴリズムが存在するため、[ 18 ]量子アルゴリズムの残りの部分は、主要な勢力ではない。
これらの簡単なケースでは、非自明な係数は生成されません。アルゴリズムは残りのケースの処理に進みます。ランダムな整数を選択します。非自明な約数の可能性計算によって見つけることができるこれは、ユークリッドアルゴリズムを使用して古典的かつ効率的に実行できます。これが非自明な因子(つまり、)、アルゴリズムは完了し、もう1つの非自明な要因は非自明な要因が特定されなかった場合、これは次のことを意味します。そして選択互いに素なので、は、整数の乗法群に含まれる。乗法逆元が法として存在する。 したがって、乗法的な順序を持つモジュロ、 意味
そしては、この合同式を満たす最小の正の整数である。
量子サブルーチンは合同式から、分ける書かれたこれは平方差を用いて因数分解できます。このように式を因数分解したため、このアルゴリズムは奇数には適用されません。(なぜならは整数でなければならない)つまり、アルゴリズムは新しい値で再開する必要がある。以降、我々は次のように仮定することができる。偶数である。これは、これは矛盾して、順序はすでに現時点では、。 もし割り切れないつまり、非自明な因子を見つけることができるということである。計算しますもし、 それからそれは真実であり、達成できない、そしてアルゴリズムは新しいそうでなければ、非自明な因子が見つかりました。もう一方は、そしてアルゴリズムは完了です。このステップでは、 を計算することも同等です。; 非自明な因子を生成する場合は自明ではなく、自明であればそうはならない()
アルゴリズムを改めて述べると次のようになる。奇数であり、素数のべき乗ではない。我々は、2 つの非自明な因数を出力したい。。
数回実行すれば成功する可能性が高いことが示されている。[ 2 ]実際には、量子順序探索サブルーチンを1回呼び出すだけで、完全に因数分解できる。より高度な還元法を用いれば、非常に高い確率で成功する。[ 19 ]
ショアのアルゴリズムの量子サブルーチンの目標は、互いに素な整数が与えられたときに、そして順序を見つけるのモジュロ最小の正の整数そのためこれを実現するために、ショアのアルゴリズムは2つのレジスタを含む量子回路を使用する。2番目のレジスタは量子ビット、は、つまり、最初のレジスタのサイズによって、回路が生成する近似の精度が決まります。量子ビットは、見つけるのに十分な精度を提供します正確な量子回路はパラメータに依存するそして問題を定義する。以下のアルゴリズムの説明では、量子状態を表すためにブラケット記法を使用し、テンソル積を表す。
このアルゴリズムは主に2つのステップから構成されています。
量子位相推定との関連性は、ショアのアルゴリズムの元の定式化では議論されていませんでしたが、[ 2 ]後にアレクセイ・キタエフによって提案されました。[ 20 ]

一般に、任意のユニタリおよび固有状態そのため入力状態を送信します出力状態に近い、 どこは、言い換えれば、各固有状態を送信するの関連する固有値に近い情報を含む状態へ。量子順序探索の目的で、我々はこの戦略を、作用によって定義されるユニタリを使用して採用する。の行動州についてとはアルゴリズムの機能に不可欠ではありませんが、全体の変換が明確に定義された量子ゲートであることを保証するために含める必要があります。量子位相推定のための回路を実装するには、ゲートを効率的に実装できることが求められるこれはモジュラべき乗によって実現できますが、これはアルゴリズムの中で最も処理速度の遅い部分です。
このように定義されたゲートは以下を満たす。これは、その固有値が1の-乗根さらに、各固有値はの形の固有ベクトルを持つ、そしてこれらの固有ベクトルは、 ここで最後の恒等式は幾何級数の公式から導かれ、それは。
入力状態に対する量子位相推定の使用すると整数が返されます高い確率で。より正確には、量子位相推定回路はに結果として得られる確率分布ピークは、 とこの確率は、追加の量子ビットを用いることで、1にいくらでも近づけることができる。
上記の推論を入力に適用すると量子位相推定は、進化をもたらす。最初のレジスターを測定すると、バランスのとれた確率が得られます。それぞれを見つけるそれぞれが整数近似値を与えるで割り切れる小数近似値を得るには。
次に、連分数アルゴリズムを適用して整数を求めます。そして、 どこ回路から測定された近似値に対して、最良の分数近似値を与える。互いに素そして最初のレジスタの量子ビット数、近似の精度を決定する は、 重ね合わせからの最良近似が与えられた測定された[ 2 ](これは、余分なビットを使用して出力を切り捨てることで任意に起こり得る)。しかし、そして互いに素である場合、そして互いに素ではない。そのため、そしてかつて存在していたいくつかの要素が失われた可能性がありますそしてこれは、量子順序探索サブルーチンを任意の回数再実行して、分数近似のリストを生成することで解決できます。どこはサブルーチンが実行された回数です。回路が複数の異なる可能な値を測定しているため、そこから異なる要素が取り除かれるでしょう。実際の値、それぞれの最小公倍数を取ることができます:最小公倍数は次のオーダーになります元の整数の高い確率で。実際には、より高度な後処理を使用する場合、量子順序探索サブルーチンの1回の実行で一般的に十分です。[ 21 ]
位相推定では、アルゴリズムの精度を決定するために最初のレジスタのサイズを選択する必要があり、ショアのアルゴリズムの量子サブルーチンでは、量子ビットは、位相推定から測定された最適なビット列を保証するのに十分です(つまり、どこ位相推定による位相の最も正確な近似値) により実際の値が得られます回収される予定。
それぞれショアのアルゴリズムにおける測定前は、整数の重ね合わせを表し、。 させて最も最適な整数を表す以下の定理は、連分数アルゴリズムが回復することを保証する。から:
定理—もしそしてはビット整数、および 次に、連分数アルゴリズムを実行します。両方とも回復しますそして。
[ 3 ]位相推定から得られた最適なビット列は、正確ですによるビット。したがって、これは、連分数アルゴリズムが回復することを意味しますそして(または、それらの最大公約数を取り除いたもの)。
ショアのアルゴリズムの実行時ボトルネックは量子モジュラーべき乗であり、これは量子フーリエ変換や古典的な前処理/後処理よりもはるかに遅い。モジュラーべき乗のための回路を構築および最適化するにはいくつかの方法がある。最も単純で(現在)最も実用的な方法は、リップルキャリー加算器から始めて、可逆ゲートで従来の算術回路を模倣することである。べき乗の基数とモジュラスがわかっていると、さらなる最適化が容易になる。[ 22 ] [ 23 ]可逆回路は通常、オーダーのゲート量子ビット。代替技術では、量子フーリエ変換を使用することでゲート数を漸近的に向上させますが、定数が大きいため、600 量子ビット未満では競争力がありません。
ショアの離散対数問題および次数探索問題に対するアルゴリズムは、周期探索問題を解くアルゴリズムの一例である。これら3つはすべて、隠れた部分群問題の一例である。
グループが与えられた場合注文と共に発電機仮に、一部の人にとって、そして我々は計算したいこれは離散対数です。アーベル群を考えるここで、各因子は値のモジュラー加算に対応します。次に、関数を考えます。
これにより、アーベル隠れ部分群問題が得られます。は群準同型に対応する。核はの倍数に対応する。カーネルを見つけることができれば、この問題を解決するための量子アルゴリズムが存在する。このアルゴリズムは、因子探索アルゴリズムと同様にピーター・ショアによるものであり、どちらもアダマールゲートを使用して重ね合わせ状態を作成し、その後実装することで実現される。量子変換として始まり、最後に量子フーリエ変換が続きます。[ 3 ]このため、離散対数を計算する量子アルゴリズムは、「ショアのアルゴリズム」と呼ばれることもあります。
順序探索問題は、隠れた部分群問題と見なすこともできる。[ 3 ]これを理解するには、加算の対象となる整数群を考え、与えられたに対して、すなわち、関数
任意の有限アーベル群に対して、隠れた部分群を解くための量子アルゴリズムが存在する。多項式時間で。[ 3 ]