(57)【要約】【課題】制御ＮＯＴを使用して記述された量子アルゴリズムを循環配列型量子コンピュータ用のアルゴリズムに変換する。【解決手段】まず、出力アルゴリズム記憶用の変数Ｇ’と、キュービット数＋１個の変数を記憶する変数名記憶配列Ｖを初期化する。制御ＮＯＴゲートＧを（ｔｉ，ｃｉ）として｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜が循環型量子コンピュータのキュービットの種類数ｍの倍数かどうか判定する。｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数の場合、量子アルゴリズムＧ０を定義し、またＧ０に基づいてＶを変更する。｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数でない場合、量子アルゴリズムＧ１を定義し、Ｇ’＝Ｇ’Ｇ１とし、量子アルゴリズムＧ２を定義し、Ｇ’＝Ｇ’Ｇ２とする。量子アルゴリズムＧ３を定義し、Ｇ’＝Ｇ’Ｇ３とする。【選択図】　　図３
2004094885.tif 000002
【特許請求の範囲】
【請求項１】
制御ＮＯＴを使用して記述された、入力された量子アルゴリズムを蓄積する入力アルゴリズム記憶部と、
出力する量子アルゴリズムを蓄積する出力アルゴリズム記憶部と、
変数名を記憶する変数名記憶部と、
これらの記憶部との間で情報の書込み・読み出しを行ない、入力された量子アルゴリズムを循環配列型量子コンピュータ用のアルゴリズムに変換し、出力する演算部を有するアルゴリズム変換装置。
【請求項２】
前記演算部は、前記入力量子アルゴリズムをＧ＝Ｇ１Ｇ２…Ｇｄとして、
出力アルゴリズム記憶用の変数Ｇ’と、ｎ（ｎはキュービット数）＋１個の変数を記憶する変数名記憶配列Ｖを初期化する第１の手段と、
制御ＮＯＴゲートＧを（ｔｉ，ｃｉ）として｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜が循環型量子コンピュータのキュービットの種類数ｍの倍数かどうか判定する第２の手段と、
第２の手段による処理の後、および｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数の場合、量子アルゴリズムＧ０を定義し、またＧ０に基づいてＶを変更する第３の手段と、
量子アルゴリズムＧ１を定義し、Ｇ’＝Ｇ’Ｇ１とする第４の手段と、
量子アルゴリズムＧ２を定義し、Ｇ’＝Ｇ’Ｇ２とする第５の手段と、
量子アルゴリズムＧ３を定義し、Ｇ’＝Ｇ’Ｇ３とする第６の手段を有し、
ｉ＝１からｉ＝ｄまでｉを１ずつ増やしながら第２から第６の手段を順次実行する、請求項１に記載のアルゴリズム変換装置。
【請求項３】
制御ＮＯＴを使用して記述された、入力された量子アルゴリズムＧ（＝Ｇ１Ｇ２…Ｇｄ）を循環配列型量子用のアルゴリズムに変換する量子コンピュータアルゴリズム変換方法であって、
出力アルゴリズム記憶用の変数Ｇ’と、ｎ（ｎはキュービット数）＋１個の変数を記憶する変数名記憶配列Ｖを初期化する第１のステップと、
制御ＮＯＴゲートＧを（ｔｉ，ｃｉ）として｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜が循環型量子コンピュータのキュービットの種類数ｍの倍数かどうか判定する第２のステップと、
第２のステップの後、および｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数の場合、量子アルゴリズムＧ０を定義し、またＧ０に基づいてＶを変更する第３のステップと、
量子アルゴリズムＧ１を定義し、Ｇ’＝Ｇ’Ｇ１とする第４のステップと、
量子アルゴリズムＧ２を定義し、Ｇ’＝Ｇ’Ｇ２とする第５のステップと、
量子アルゴリズムＧ３を定義し、Ｇ’＝Ｇ’Ｇ３とする第６のステップを有し、
ｉ＝１からｉ＝ｄまでｉを１ずつ増やしながら第２から第６のステップを実行する量子コンピュータアルゴリズム変換方法。
【請求項４】
制御ＮＯＴを使用して記述された、入力された量子アルゴリズムＧ（＝Ｇ１Ｇ２…Ｇｄ）の循環配列型量子用のアルゴリズムへの変換をコンピュータに実行させるための量子コンピュータアルゴリズム変換プログラムであって、
出力アルゴリズム記憶用の変数Ｇ’と、ｎ（ｎはキュービット数）＋１個の変数を記憶する変数名記憶配列Ｖを初期化する第１の手順と、
制御ＮＯＴゲートＧを（ｔｉ，ｃｉ）として｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜が循環型量子コンピュータのキュービットの種類数ｍの倍数かどうか判定する第２の手順と、
｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数の場合、量子アルゴリズムＧ０を定義し、またＧ０に基づいてＶを変更する第３の手順と、
第３の手順の後、および｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数でない場合、量子アルゴリズムＧ１を定義し、Ｇ’＝Ｇ’Ｇ１とする第４の手順と、
量子アルゴリズムＧ２を定義し、Ｇ’＝Ｇ’Ｇ２とする第５の手順と、
量子アルゴリズムＧ３を定義し、Ｇ’＝Ｇ’Ｇ３とする第６の手順を有し、
ｉ＝１からｉ＝ｄまでｉを１ずつ増やしながら第２から第６の手順を順次実行する、量子コンピュータアルゴリズム変換プログラム。
【請求項５】
請求項４に記載の量子コンピュータアルゴリズム変換プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は量子アルゴリズムを循環配列型量子コンピュータ用のアルゴリズムに変換する方法および装置に関する。
【０００２】
【従来の技術】
現在広く利用されているコンピュータにくらべ、原理的にはるかに高速に問題を解くことのできる「量子コンピュータ」と呼ばれるコンピュータが提案されている。量子の世界特有の現象である量子重ね合わせ状態を利用すると、古典計算機におけるビット（０または１を表現する単位）を拡張し、０、１、に加えて０と１の重ね合わせを表現することが可能である。このようなビットの拡張概念はキュービットと呼ばれ、量子コンピュータはキュービットの演算により実現される。量子コンピュータを実現すれば因数分解などの問題に対して現在のコンピュータよりもはるかに高速な計算が可能なことから、世界中の多くの研究機関で開発が進められている。
【０００３】
量子コンピュータは現在主に２つの方向から研究が進められている。一つは、量子コンピュータの演算を実行するための基本素子である量子ゲートの開発である。二つ目は、量子ゲートが実現できたときにその上で動作する量子コンピュータ用アルゴリズムに関する研究である。
【０００４】
量子ゲートが実現する基本演算は、従来のコンピュータで可能な演算とはまったく異なると予想されている。量子アルゴリズムは開発された量子ゲートの基本演算をもとに研究されることが本来望ましいが、量子ゲートは未開発のため現在のところ妥当と思われる基本演算をもとにアルゴリズムが研究されている。基本演算として、制御ＮＯＴと呼ばれる演算が使用されることが多い。
【０００５】
【非特許文献１】
Ｓ．Ｌｌｏｙｄ，「Ｓｃｉｅｎｃｅ」２６１，　ｐｐ．　１５６９−１５７１　（１９９３）
【非特許文献２】
Ｓ．Ｌｌｏｙｄ，「Ｐｒｏｇｒａｍｍｉｎｇ　Ｐｕｌｓｅ　Ｄｒｉｖｅｎ　Ｑｕａｎｔｕｍ　Ｃｏｍｐｕｔｅｒｓ，　Ｔｅｃｈｎｉｃａｌ　Ｒｅｐｏｒｔ」ｈｔｔｐ：／／ａｒＸｉｖ．ｏｒｇ／ａｂｓ／ｑｕａｎｔ−ｐｈ／９９１２０８６，　ＬＡＮＬ　ｅ−ｐｒｉｎｔ，　１９９９．
【０００６】
【発明が解決しようとする課題】
残念なことに、量子ゲートが実際に開発されてみないことには、キュービット上の基本演算がどのようなものになるかは正確なところはわからない。基本演算はキュービットの実現方法に依存する事柄であり、現在キュービットとして複数の実現方法が提案されている。そうした方法の中でも、最も有力とされるのは原子の核スピンを利用した実現方法である。この方法では、隣接キュービット間の核磁気相互作用を利用して、量子演算を実現する。さらに、こうした手法に適した原子は種類が限られているため、大規模な量子コンピュータを製造する際には、同種類の原子が繰り返し配置された量子コンピュータとなる可能性が高い。このような量子コンピュータでは、離れた位置にあるキュービット間での演算は事実上不可能であり、制御ＮＯＴで記述された量子アルゴリズムをそのまま実行するのは不可能に近い。
【０００７】
そこで、制御ＮＯＴで記述された量子アルゴリズムを、このような量子コンピュータに適した量子アルゴリズムに変換する必要性が生じる。変換により変換ロスが発生することも予想されるが、従来のコンピュータで人間が読みやすいプログラムを機械語に翻訳するコンパイラが不可欠なように、量子コンピュータにおいてもこのような変換装置は必要不可欠と考えられる。
【０００８】
Ｓ．Ｌｌｏｙｄは、３種類のキュービットＡ，Ｂ，Ｃが「・・・−Ａ−Ｂ−Ｃ−Ａ−Ｂ−Ｃ−Ａ−Ｂ−Ｃ−Ａ−Ｂ−Ｃ−・・・」のように繰り返し配列された量子コンピュータ上で、隣接キュービット間の演算だけを使用してプール計算ができることを示した（非特許文献１、非特許文献２参照）。しかし、量子アルゴリズムを一般的な循環配列型量子コンピュータのアルゴリズムに変換する手法について述べられた文献はない。
【０００９】
本発明の目的は、制御ＮＯＴを使用して記述された量子アルゴリズムを、「Ａｍ−Ａ１−．．．−Ａｍ−Ａ１−．．．−Ａｍ−Ａ１−．．．−Ａｍ」のように「−Ａ１−．．．−Ａｍ−」という一定のキュービット配列が繰り返し現れる量子コンピュータ（以下、「循環配列型量子コンピュータ」と呼ぶ）用のアルゴリズムに変換する方法および装置を提供することである。
【００１０】
【課題を解決するための手段】
本発明は、与えられた制御ＮＯＴの各演算を循環配列型量子コンピュータ用の演算の列に置き換えることにより、上記課題を解決するものである。
【００１１】
アルゴリズムの記述に必要な概念の定義
まず、量子アルゴリズムを定義する。
【００１２】
量子アルゴリズム
古典的計算機におけるビットに相当する量子計算機の概念はキュービットと呼ばれる。各キュービットは古典的計算機における１、０、またはそれを拡張した（１と０の重ねあわせに相当する）ビット情報を保有する。量子コンピュータは有限個のキュービットで構成される。量子コンピュータで計算を行うとは、各キュービットに初期値を与え、それらに操作を施してキュービットが保有するビット情報を操作し、最後に観測を行ってこれらのビット情報を取り出すことを意味する。キュービット上に施されるビット情報の一連の操作のことを量子アルゴリズムと呼ぶ。キュービットに施される操作の基本単位を定めれば、量子アルゴリズムはこの基本操作の列によって記述される。一般に、量子アルゴリズムでは、キュービットに対し以下の操作だけが許されている。
【００１３】
制御ＮＯＴ　　２キュービットｉ，ｊに対して、片方のキュービット（仮にｉとする）の値が１の時にはｊの値を反転（０を１に変える、または１を０に変える）し、ｉの値が０の時には何もしない。キュービットｉのことをコントロールビット、キュービットｊのことをターゲットビットと呼ぶ。この制御ＮＯＴのことを（ｊ，ｉ）と表記する。
制御ＮＯＴは、図４（ａ）のように図示される。量子アルゴリズムは制御ＮＯＴの列で表現される。図５は量子アルゴリズム（６，２）（１，５）の例である。
【００１４】
循環配列型量子コンピュータ用のアルゴリズム
循環配列型量子コンピュータとは、ｍ種類のキュービットが配列「−Ａ１−Ａ２−・・・−Ａｍ−」の繰り返しで構成され、隣接するキュービット間でのみ制御ＮＯＴと制御制御ＮＯＴの操作が可能な量子コンピュータのことである。キュービットを原子の核スピンによって実現したような場合、キュービット間の相互作用は非常に小さくなり、通常の量子アルゴリズムのモデルをそのまま実装することが困難になる。循環配列型量子コンピュータは、従来の量子計算機のモデルに比べより現実に近いモデルである。
【００１５】
循環配列型量子コンピュータのキュービットの操作は、制御ＮＯＴと制御制御ＮＯＴの２種類である。一度の操作で、同種類のキュービット配列上に同じ操作が施される。キュービットの種類をそれぞれをＡ１，Ａ２，．．．，Ａｍで表す。
【００１６】
制御ＮＯＴ　　隣接する２キュービット間（ＡｉとＡ（ｉ＋１）またはＡｍとＡ１）で、片方（たとえばＡｉとＡ（ｉ＋１）におけるＡｉ。コントロールビットと呼ぶ。）の値が１のときにはもう片方のビット（ターゲットビットと呼ぶ。）を反転し、０のときは何もしない操作。コントロールビットをＡ、ターゲットビットをＢとするとき、制御ＮＯＴ操作を（Ｂ，Ａ）と表記する。
【００１７】
制御制御ＮＯＴ　　隣接する３キュービット間（Ａｉ，Ａ（ｉ＋１），Ａ（ｉ＋２）またはＡ（ｍ−１），Ａｍ，Ａ１またはＡｍ，Ａ１，Ａ２）で、両端（たとえばＡｉ，Ａ（ｉ＋１），Ａ（ｉ＋２）におけるＡｉとＡ（ｉ＋２）。コントロールビットと呼ぶ。）の値が両方とも１のときは、それらの間のビット（ターゲットビットと呼ぶ。）を反転し、それ以外のときは何もしない操作。コントロールビットをＡ１，Ａ２、ターゲットビットをＢとするとき、制御ＮＯＴ操作を（Ｂ，Ａ１，Ａ２）と表記する。
これらの操作の記号表記を、図４（ｂ）（ｃ）に示した。
【００１８】
制御ＮＯＴと制御制御ＮＯＴを組み合わせることにより、次の２種類の操作を作ることができる。
【００１９】
スワップ　　隣接する２キュービット間（ＡｉとＡ（ｉ＋１）またはＡｍとＡ１）で、値を入れ替える操作。２キュービットをＡ，Ｂとするとき、この操作を［Ａ，Ｂ］と表記する。［Ａ，Ｂ］は、（Ａ，Ｂ）（Ｂ，Ａ）（Ａ，Ｂ）の略記号である。
【００２０】
制御スワップ　　隣接する３キュービット間（Ａｉ，Ａ（ｉ＋１），Ａ（ｉ＋２）またはＡ（ｍ−１），Ａｍ，Ａ１またはＡｍ，Ａ１，Ａ２）で、端（たとえばＡｉ，Ａ（ｉ＋１），Ａ（ｉ＋２）におけるＡｉ。コントロールビットと呼ぶ。）の値が１のときは、残りのビットの値を入れ替え、それ以外のときは何もしない操作。３キュービットをＡ，Ｂ，Ｃとし、Ａをコントロールビットとするとき、［Ｃ，Ｂ，Ａ］と表記する。これは、（Ｃ，Ｂ）（Ｂ，Ａ，Ｃ）（Ｃ，Ｂ）の略記号である。
【００２１】
制御ＮＯＴの列からなる入力量子アルゴリズムをＧ＝Ｇ１Ｇ２．．．Ｇｄとする。すべてのｉ（１≦ｉ≦ｄ）に対して、ＧｉはＧｉ＝（ｔｉ，ｃｉ）と表現できる。また、この量子アルゴリズムのキュービット数をｎとする。すなわち、すべてのｉに対して、０≦ｔｉ，ｃｉ＜ｎである。また、循環型量子コンピュータのキュービットの種類数をｍとする。
【００２２】
出力アルゴリズム記憶用の変数をＧ’、ｎ＋１個の変数を記憶する変数名記憶配列をＶとする。Ｖのｊ番目の要素をＶ［ｊ］と表記する。
【００２３】
以下、Ｇの各量子ゲートＧ１，Ｇ２，．．．，Ｇｄを前から一つづつ参照し、循環配列型量子コンピュータ用量子アルゴリズムを得る方法を図１により説明する。
【００２４】
ステップ１．　Ｇ’とＶの初期化
Ｖの初期値をＶ［０］＝０、ｓ＝１，．．．，ｎに対しては
Ｖ［ｓ］＝［ｓ＋（（ｓ−１）÷（ｍ−１））］
とする。ここで、［ｔ］はｔを越えない最大の整数（すなわち、［］はガウス記号）である。Ｇ’の初期値をφ（空集合）する。量子ゲートの番号を意味する変数ｉの初期値を１とし、以下に示すループをｉ＝１〜ｄまで実行する。
【００２５】
ステップ２．　ｉを初期化
【００２６】
ステップ３．　条件分岐
制御ＮＯＴゲートＧｉを（ｔｉ，ｃｉ）とする。｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数でなければ、スワップ操作を用いてＶ［ｔｉ］，Ｖ［ｃｉ］，Ｖ［０］番目のキュービットが保有する情報を隣接キュービットに集めることができる（ステップ５〜６）。しかし｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数の場合は、Ｖ［ｔｉ］，Ｖ［ｃｉ］番目のキュービットの種類が同じになるため、スワップだけではこれらを隣接キュービットにすることができない。そこで、｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数かどうかで場合わけを行う。｜Ｖ［ｔｉ］−Ｖ［ｃｉ］｜がｍの倍数ならばステップ４を実行する。そうでないならば、ステップ４を省略し、ステップ５にジャンプする。
【００２７】
ステップ４．　量子アルゴリズムＧ０の定義
以下に、量子アルゴリズムＧ０を定義する。また、Ｇ０にもとづいてＶを変更する。Ｇ０の定義に必要な、ｋ，ｊ，ｊ’，ｊ’’，ｊ’’’およびＸ１，Ｘ２，Ｘ３，．．．，Ｘｍを以下のように定義する。
【００２８】
｜Ｖ［ｔｉ］−Ｖ［０］｜または｜Ｖ［ｃｉ］−Ｖ［０］｜のうち小さいほうを選ぶ。｜Ｖ［ｔｉ］−Ｖ［０］｜の方が小さい場合はｋ＝｜Ｖ［ｔｉ］−Ｖ［０］｜−［｜Ｖ［ｔｉ］−Ｖ［０］｜÷ｍ］−２とおく。ｊ，ｊ’，ｊ’’，ｊ’’’は、１≦ｊ，ｊ’，ｊ’’，ｊ’’’≦ｍ，ｊ＝ｋ　ｍｏｄ　ｍ，Ｊ’＝ｋ＋１　ｍｏｄ　ｍ，Ｊ’’＝ｋ＋２　ｍｏｄ　ｍ，Ｊ’’’＝ｋ＋３　ｍｏｄ　ｍで決まる値である。また、Ｘ１，Ｘ２，Ｘ３，．．．，ＸｍはＶ［ｔｉ］−Ｖ［０］が正か負かに応じて以下のように定義される。
【００２９】
Ｖ［ｔｉ］−Ｖ［０］が負の場合
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍならば　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ（ｍ−１）とする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ１，Ｘ２＝Ａ２，．．．，Ｘｍ＝Ａｍとする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍならば　　Ｘ１＝Ａ２，Ｘ２＝Ａ３，．．．，Ｘｍ＝Ａ１とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ（ｍ−２）とする。
【００３０】
Ｖ［ｔｉ］−Ｖ［０］が正の場合
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍならば　　Ｘ１＝Ａｍ，Ｘ２＝Ａ（ｍ−１），．．．，Ｘｍ＝Ａ１とする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ１，Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ２とする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍならば　　Ｘ１＝Ａ２，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ３とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａ（ｍ−２），．．．，Ｘｍ＝Ａｍとする。
【００３１】
一方、｜Ｖ［ｃｉ］−Ｖ［０］｜の方が小さい場合はｋ＝｜Ｖ［ｃｉ］−Ｖ［０］｜−［｜Ｖ［ｃｉ］−Ｖ［０］｜÷ｍ］−２とおく。ｊ，ｊ’，ｊ’’，ｊ’’’は、１≦ｊ，ｊ’，ｊ’’，ｊ’’’≦ｍ，ｊ＝ｋ　ｍｏｄ　ｍ，Ｊ’＝ｋ＋１　ｍｏｄ　ｍ，Ｊ’’＝ｋ＋２　ｍｏｄ　ｍ，Ｊ’’’＝ｋ＋３　ｍｏｄ　ｍで決まる値である。また、Ｘ１，Ｘ２，Ｘ３，．．．，ＸｍはＶ［ｃｉ］−Ｖ［０］が正か負かに応じて以下のように定義される。
【００３２】
Ｖ［ｃｉ］−Ｖ［０］が負の場合
Ｖ［ｃｉ］＝０　ｍｏｄ　ｍならば　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ（ｍ−１）とする。
Ｖ［ｃｉ］＝１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ１，Ｘ２＝Ａ２，．．．，Ｘｍ＝Ａｍとする。
Ｖ［ｃｉ］＝２　ｍｏｄ　ｍならば　　Ｘ１＝Ａ２，Ｘ２＝Ａ３，．．．，Ｘｍ＝Ａ１とする。
．．．．．．
Ｖ［ｃｉ］＝ｍ−１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ（ｍ−２）とする。
【００３３】
Ｖ［ｃｉ］−Ｖ［０］が正の場合
Ｖ［ｃｉ］＝０　ｍｏｄ　ｍならば　　Ｘ１＝Ａｍ，Ｘ２＝Ａ（ｍ−１），．．．，Ｘｍ＝Ａ１とする。
Ｖ［ｃｉ］＝１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ１，Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ２とする。
Ｖ［ｃｉ］＝２　ｍｏｄ　ｍならば　　Ｘ１＝Ａ２，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ３とする。
．．．．．．
Ｖ［ｃｉ］＝ｍ−１　ｍｏｄ　ｍならば　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａ（ｍ−２），．．．，Ｘｍ＝Ａｍとする。
Ｇ０を以下のように定義する。
【００３４】
ｋ≦０の場合、
Ｇ０＝［Ｘ１，Ｘ２，Ｘ３］
１≦ｋの場合、
Ｇ０＝［Ｘ１，Ｘ２］［Ｘ２，Ｘ３］．．．［Ｘｍ，Ｘ１］［Ｘ１，Ｘ２］．．．［Ｘｊ，Ｘｊ’］［Ｘｊ’，Ｘｊ’’，Ｘｊ’’’］
このＧ０によって、Ｇ’Ｇ０が定義できる。ここで、Ｇ’Ｇ０はアルゴリズムＧ’の後にアルゴリズムＧ０を実行するアルゴリズムの意味である。以後Ｇ’Ｇ０のことをＧ’と記述する（メモリ上では、配列Ｇ’のあとにＧ０を追記する）。Ｇ０はスワップと制御スワップの列Ｓ１Ｓ２．．．Ｓｔで記述されている。現在得られているＶからＶＧ０を以下のように帰納的に定義する。
【００３５】
Ｓ＝［Ａｊ，Ａｊ’］かつ、
Ｖ［ｓ］＝ｊ　ｍｏｄ　ｍならば、　　ＶＳ［ｓ］＝Ｖ［ｓ］＋（ｊ’−ｊ）
Ｖ［ｓ］＝ｊ’　ｍｏｄ　ｍならば、　　ＶＳ［ｓ］＝Ｖ［ｓ］＋（ｊ−ｊ’）
Ｓ＝［Ａｊ，Ａｊ’，Ａｊ’’］かつ、
Ｖ［０］＝ｊ’’　ｍｏｄ　ｍ　かつ　Ｖ［ｓ］＝Ｖ［０］＋（ｊ’−ｊ’’）ならば、
ＶＳ［ｓ］＝Ｖ［０］＋（ｊ−ｊ’’）
Ｖ［０］＝ｊ’’　ｍｏｄ　ｍ　かつ　Ｖ［ｓ］＝Ｖ［０］＋（ｊ−ｊ’’）ならば、
ＶＳ［ｓ］＝Ｖ［０］＋（ｊ’−ｊ’’）
それ以外のすべての場合、
ＶＳ［ｓ］＝Ｖ［ｓ］
ここで、Ｓ＝Ｓ１，．．．，Ｓｔである。
以後、ＶＧ０のことをＶと記述する（すなわち、メモリ上のＶの配列の値をＶＧ０の値でオーバーライトする）。
【００３６】
ステップ５．　量子アルゴリズムＧ１の定義
量子アルゴリズムＧ１を以下のように定義し、Ｇ’＝Ｇ’Ｇ１とする。
【００３７】
｜Ｖ［ｃｉ］−Ｖ［０］｜の値が１のとき、Ｇ１はφ（空集合）である。それ以外のとき、ｋ＝｜Ｖ［ｃｉ］−Ｖ［０］｜−［｜Ｖ［ｃｉ］−Ｖ［０］｜÷ｍ］−１とおき、
Ｇ１＝［Ｘ１，Ｘ２］［Ｘ２，Ｘ３］．．．［Ｘｍ，Ｘ１］［Ｘ１，Ｘ２］．．．［Ｘｊ，Ｘｊ’］
と定義する。ここで、ｊ，ｊ’は、１≦ｊ，ｊ’≦ｍ，ｊ＝ｋ　ｍｏｄ　ｍ，Ｊ’＝ｋ＋１　ｍｏｄ　ｍで決まる値である。また、Ｘ１，Ｘ２，Ｘ３，．．．，Ｘｍは以下のように定義される。
【００３８】
Ｖ［ｃｉ］−Ｖ［０］が負の場合
Ｖ［ｃｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ（ｍ−１）とする。
Ｖ［ｃｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ１，Ｘ２＝Ａ２，．．．，Ｘｍ＝Ａｍとする。
Ｖ［ｃｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ２，Ｘ２＝Ａ３，．．．，Ｘｍ＝Ａ１とする。
．．．．．．
Ｖ［ｃｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ（ｍ−２）とする。
【００３９】
Ｖ［ｃｉ］−Ｖ［０］が正の場合
Ｖ［ｃｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ（ｍ−１），．．．，Ｘｍ＝Ａ１とする。
Ｖ［ｃｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ１，Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ２とする。
Ｖ［ｃｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ２，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ３とする。
．．．．．．
Ｖ［ｃｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａ（ｍ−２），．．．，Ｘｍ＝Ａｍとする。
また、このアルゴリズムＧ１にしたがって、ＶＧ１が定義できる。ＶＧ１を以後Ｖと記述する。
【００４０】
ステップ６．　量子アルゴリズムＧ２の定義
量子アルゴリズムＧ２を以下のように定義し、Ｇ’＝Ｇ’Ｇ２とする。
【００４１】
｜Ｖ［ｔｉ］−Ｖ［０］｜の値が１の時は、Ｇ２はφ（空集合）である。それ以外のときは、ｋ＝｜Ｖ［ｔｉ］−Ｖ［０］｜−［｜Ｖ［ｔｉ］−Ｖ［０］｜÷ｍ］−１とおき、
Ｇ２＝［Ｘ１，Ｘ２］［Ｘ２，Ｘ３］．．．［Ｘｍ，Ｘ１］［Ｘ１，Ｘ２］．．．［Ｘｊ，Ｘｊ’］
と定義する。ここで、ｊ，ｊ’は、１≦ｊ，ｊ’≦ｍ，ｊ＝ｋ　ｍｏｄ　ｍ，Ｊ’＝ｋ＋１　ｍｏｄ　ｍで決まる値である。また、Ｘ１，Ｘ２，Ｘ３，．．．，Ｘｍは以下のように定義される。
【００４２】
Ｖ［ｔｉ］−Ｖ［０］が負の場合
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ（ｍ−１）とする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ１，Ｘ２＝Ａ２，．．．，Ｘｍ＝Ａｍとする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ２，Ｘ２＝Ａ３，．．．，Ｘｍ＝Ａ１とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ（ｍ−２）とする。
【００４３】
Ｖ［ｔｉ］−Ｖ［０］が正の場合
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ（ｍ−１），．．．，Ｘｍ＝Ａ１とする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ１，Ｘ２＝Ａｍ，．．．，Ｘｍ＝Ａ２とする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ２，Ｘ２＝Ａ１，．．．，Ｘｍ＝Ａ３とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａ（ｍ−２），．．．，Ｘｍ＝Ａｍとする。
また、このアルゴリズムＧ２にしたがって、ＶＧ２が定義できる。ＶＧ２を以後Ｖと記述する。
【００４４】
ステップ７．　量子アルゴリズムＧ３の定義
Ｇ３を次のように定義し、Ｇ’＝Ｇ’Ｇ３とする。
Ｖ［ｃｉ］，Ｖ［０］≦Ｖ［ｔｉ］の場合
Ｇ３＝［Ｘ３，Ｘ２］（Ｘ２，Ｘ１，Ｘ３）
ただし、
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−２），Ｘ２＝Ａ（ｍ−１），Ｘ３＝Ａｍとする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，Ｘ３＝Ａ１とする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，Ｘ３＝Ａ２とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−３），Ｘ２＝Ａ（ｍ−２），Ｘ３＝Ａ（ｍ−１）とする。
Ｖ［ｔｉ］≦Ｖ［ｃｉ］，Ｖ［０］の場合
Ｇ３＝［Ｘ１，Ｘ２］（Ｘ２，Ｘ１，Ｘ３）
ただし、
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，Ｘ３＝Ａ２とする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ１，Ｘ２＝Ａ２，Ｘ３＝Ａ３とする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ２，Ｘ２＝Ａ３，Ｘ３＝Ａ４とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，Ｘ３＝Ａ１とする。
それ以外の場合
Ｇ３＝（Ｘ２，Ｘ１，Ｘ３）
ただし、
Ｖ［ｔｉ］＝０　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−１），Ｘ２＝Ａｍ，Ｘ３＝Ａ１とする。
Ｖ［ｔｉ］＝１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａｍ，Ｘ２＝Ａ１，Ｘ３＝Ａ２とする。
Ｖ［ｔｉ］＝２　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ１，Ｘ２＝Ａ２，Ｘ３＝Ａ３とする。
．．．．．．
Ｖ［ｔｉ］＝ｍ−１　ｍｏｄ　ｍの場合　　Ｘ１＝Ａ（ｍ−２），Ｘ２＝Ａ（ｍ−１），Ｘ３＝Ａｍとする。
また、このアルゴリズムＧ３にしたがって、ＶＧ３が定義できる。ＶＧ３を以後Ｖと記述する。
【００４５】
ステップ８．　ｉをインクリメント
ステップ９．　条件分岐
ｉ＞ｄならば、Ｇ’とＶを出力し、アルゴリズムを終了する。ｉ≦ｄならば、ステップ３に戻る。
【００４６】
ｓをｎビットの任意の自然数とし、ｉを整数とする。ｓのｉビット目をｓ（ｉ）と表記する。ｔを整数から｛０，１｝への関数で
ｔ（０）＝１，
ｔ（［ｉ＋（ｉ÷ｍ）］）＝ｓ（ｉ−１）、ここでｉ＝１，２，．．．，ｎ
それ以外のすべての場合についてｔ（ｊ）＝０
と定義する。循環配列型量子コンピュータを構成するＡｍの中から適当なキュービットを一つ選びそれを０番目、その隣のＡ１を１番目等とすべてのキュービットに整数を割り当てる。ｉ番目のキュービットに初期値ｔ（ｉ）を入力したときの、循環配列型量子アルゴリズムＧ’による計算結果をＧ’（ｔ）とする。
【００４７】
本発明により出力されるＧ’およびＶと、元の量子アルゴリズムＧとの間で次のような関係式が成り立つことがわかる。
【００４８】
Ｇ（ｓ）のｉ−１番目のビット＝Ｇ’（ｔ）のＶ［ｉ］番目のビット
ここで、ｉ＝１，２，．．．，ｎである。このため、従来の制御ＮＯＴで記述された量子アルゴリズムＧでＧ（ｓ）を計算する代わりに、本発明によって得られたＧ’とＶを循環型量子コンピュータ上で実行し、Ｇ’（ｔ）を観測すれば、望んだ計算結果が得られる。
【００４９】
計算の具体例
具体的な計算例を示すために、Ｇ＝（６，２）（１，５）の量子アルゴリズムを、ｍ＝３の循環配列型量子コンピュータ用のアルゴリズムに変換する計算を示す。この場合、入力キュービット数が６なので、ｎ＝６である。もちろん、入力がこの例の場合に限るわけではない。
【００５０】
ステップ１．　定義により、Ｖ［０］＝０，Ｖ［１］＝１，Ｖ［２］＝２，Ｖ［３］＝４，Ｖ［４］＝５，Ｖ［５］＝７，Ｖ［６］＝８である。出力用の変数Ｇ’を初期化し、Ｇ’＝φ（空集合）とする。
【００５１】
ステップ３．　最初のゲートは（ｔ１，ｃ１）＝（６，２）であるから、Ｖ［０］＝０，Ｖ［ｔ１］＝８，Ｖ［ｃ１］＝２である。｜Ｖ［ｔｉ］−Ｖ［ｃ１］｜＝６で３の倍数であるから、ステップ４を実行する。
【００５２】
ステップ４．　｜Ｖ［ｃ１］−Ｖ［０］｜＝２、｜Ｖ［ｔｉ］−Ｖ［０］｜＝８なので、小さいほうは前者である。定義によりｋ＝０である。Ｖ［ｃ１］−Ｖ［０］が正であり、Ｖ［ｃ１］＝２　ｍｏｄ　３なので、Ｘ１＝Ａ２，Ｘ２＝Ａ１，Ｘ３＝Ａ３である。したがって、Ｇ０＝［Ａ２，Ａ１，Ａ３］である。Ｇ’は空集合なので、Ｇ’Ｇ０＝［Ａ２，Ａ１，Ａ３］である。以下、Ｇ’Ｇ０をＧ’とする。すなわち、Ｇ’＝［Ａ２，Ａ１，Ａ３］である。
Ｖ［０］＝０なので、Ｖ［０］＝０　ｍｏｄ　３である。したがって、Ｓ＝［Ａ２，Ａ１，Ａ３］とすると、Ｖ［１］＝１よりＶＳ［１］＝２、かつＶ［２］＝２より、ＶＳ［２］＝１である。ｓが１と２以外の場合は、すべてＶＳ［ｓ］＝Ｖ［ｓ］である。以下、ＶＳをＶとする。具体的に書くと、Ｖ［０］＝０，Ｖ［１］＝２，Ｖ［２］＝１，Ｖ［３］＝４，Ｖ［４］＝５，Ｖ［５］＝７，Ｖ［６］＝８である。
【００５３】
ステップ５．　Ｖ［０］＝０，Ｖ［ｃ１］＝１より、｜Ｖ［ｃ１］−Ｖ［０］｜＝１なので、Ｇ１はφ（空集合）である。したがって、Ｇ’Ｇ１はＧ’＝［Ａ２，Ａ１，Ａ３］に等しい。この場合、Ｖも変化しない。
【００５４】
ステップ６．　Ｖ［０］＝０，Ｖ［ｔ１］＝８より、｜Ｖ［ｔ１］−Ｖ［０］｜＝８なので、ｋ＝５，ｊ＝２，ｊ’＝３である。Ｖ［ｔ１］＝２　ｍｏｄ　３より、Ｘ１＝Ａ２，Ｘ２＝Ａ１，Ｘ３＝Ａ３である。したがって、Ｇ１＝［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］である。ゆえに、Ｇ’Ｇ１は［Ａ２，Ａ１，Ａ３］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］である。以後、Ｇ’Ｇ１をＧ’とする。Ｓ１＝［Ａ２，Ａ１］，Ｓ２＝［Ａ１，Ａ３］，Ｓ３＝［Ａ３，Ａ２］とすると、Ｇ１＝Ｓ１Ｓ２Ｓ３Ｓ１Ｓ２であるから、順に計算すると、ＶＳ１［０］＝０，ＶＳ１［１］＝１，ＶＳ１［２］＝２，ＶＳ１［３］＝５，ＶＳ１［４］＝４，ＶＳ１［５］＝８，ＶＳ１［６］＝７、
ＶＳ１Ｓ２［０］＝１，ＶＳ１Ｓ２［１］＝０，ＶＳ１Ｓ２［２］＝２，ＶＳ１Ｓ２［３］＝５，ＶＳ１Ｓ２［４］＝３，ＶＳ１Ｓ２［５］＝８，ＶＳ１Ｓ２［６］＝６、
ＶＳ１Ｓ２Ｓ３［０］＝１，ＶＳ１Ｓ２Ｓ３［１］＝−１，ＶＳ１Ｓ２Ｓ３［２］＝３，ＶＳ１Ｓ２Ｓ３［３］＝６，ＶＳ１Ｓ２Ｓ３［４］＝２，ＶＳ１Ｓ２Ｓ３［５］＝９，ＶＳ１Ｓ２Ｓ３［６］＝５、
ＶＳ１Ｓ２Ｓ３Ｓ１［０］＝２，ＶＳ１Ｓ２Ｓ３Ｓ１［１］＝−２，ＶＳ１Ｓ２Ｓ３Ｓ１［２］＝３，ＶＳ１Ｓ２Ｓ３Ｓ１［３］＝６，ＶＳ１Ｓ２Ｓ３Ｓ１［４］＝１，ＶＳ１Ｓ２Ｓ３Ｓ１［５］＝９，ＶＳ１Ｓ２Ｓ３Ｓ１［６］＝４である。したがって、ＶＧ１［０］＝２，ＶＧ１［１］＝−３，ＶＧ１［２］＝４，ＶＧ１［３］＝７，ＶＧ１［４］＝０，ＶＧ１［５］＝１０，ＶＧ１［６］＝３である。ＶＧ１を今後Ｖと書く。
【００５５】
ステップ７．　Ｖ［ｃ１］＝４，Ｖ［ｔ１］＝３，Ｖ［０］＝２であるから、その他の場合に相当する。定義により、Ｘ１＝Ａ２，Ｘ２＝Ａ３，Ｘ３＝Ａ１であり、Ｇ３＝（Ａ３，Ａ２，Ａ１）である。ゆえに、Ｇ’Ｇ３は［Ａ２，Ａ１，Ａ３］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］（Ａ３，Ａ２，Ａ１）である。以後、Ｇ’Ｇ３をＧ’とする。Ｇ３によって、Ｖは変化しない。
【００５６】
ステップ８．　ｉ＝２
ステップ９．　ｉ＝ｄであるから、ステップ３にもどる。
【００５７】
ステップ３．　次のゲートは（ｔ２，ｃ２）＝（１，５）であるから、Ｖ［０］＝２，Ｖ［ｔ２］＝−３，Ｖ［ｃ２］＝１０である。｜Ｖ［ｔ２］−Ｖ［ｃ２］｜＝１３で３の倍数ではないので、ステップ５を実行する。
【００５８】
ステップ５．　｜Ｖ［ｃ２］−Ｖ［０］｜＝８なので、ｋ＝５，ｊ＝２，Ｊ’＝３である。また、Ｖ［ｃ２］＝１　ｍｏｄ　３より、Ｘ１＝Ａ１，Ｘ２＝Ａ３，Ｘ３＝Ａ２である。したがって、Ｇ１＝［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］である。Ｇ’Ｇ１は［Ａ２，Ａ１，Ａ３］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］（Ａ３，Ａ２，Ａ１）［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］である。以後、Ｇ’Ｇ１をＧ’とする。ＶＧ１を計算すると、ＶＧ１［０］＝４，ＶＧ１［１］＝０，ＶＧ１［２］＝−１，ＶＧ１［３］＝２，ＶＧ１［４］＝３，ＶＧ１［５］＝５，ＶＧ１［６］＝６である。このＶＧ１をＶとする。
【００５９】
ステップ６．　｜Ｖ［ｔ２］−Ｖ［０］｜＝４なので、ｋ＝２，ｊ＝２，Ｊ’＝３である。また、Ｖ［ｔ２］＝０　ｍｏｄ　３より、Ｚ１＝Ａ３，Ｚ２＝Ａ１，Ｚ３＝Ａ２である。したがって、Ｇ２＝［Ａ３，Ａ１］［Ａ１，Ａ２］である。ゆえに、Ｇ’Ｇ２は［Ａ２，Ａ１，Ａ３］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］（Ａ３，Ａ２，Ａ１）［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ３，Ａ１］［Ａ１，Ａ２］である。以後、Ｇ’Ｇ２をＧ’とする。ＶＧ２を計算すると、ＶＧ２［０］＝３，ＶＧ２［１］＝２，ＶＧ２［２］＝−２，ＶＧ２［３］＝１，ＶＧ２［４］＝５，ＶＧ２［５］＝４，ＶＧ２［６］＝８である。このＶＧ２をＶとする。
【００６０】
ステップ７．　Ｖ［ｃ２］＝４，Ｖ［ｔ２］＝２，Ｖ［０］＝３であるから、Ｖ［ｔ２］≦Ｖ［ｃ２］，Ｖ［ｎ］の場合に相当する。定義により、Ｘ１＝Ａ２，Ｘ２＝Ａ３，Ｘ３＝Ａ１であり、Ｇ３＝［Ａ２，Ａ３］（Ａ３，Ａ２，Ａ１）である。Ｇ’Ｇ３は［Ａ２，Ａ１，Ａ３］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］（Ａ３，Ａ２，Ａ１）［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ２，Ａ１］［Ａ１，Ａ３］［Ａ３，Ａ２］［Ａ３，Ａ１］［Ａ１，Ａ２］［Ａ２，Ａ３］（Ａ３，Ａ２，Ａ１）である。以後、Ｇ’Ｇ３をＧ’とする。ＶＧ３を計算すると、ＶＧ３［０］＝２，ＶＧ３［１］＝３，ＶＧ３［２］＝−３，ＶＧ３［３］＝１，ＶＧ３［４］＝６，ＶＧ３［５］＝４，ＶＧ３［６］＝９である。このＶＧ３をＶとする。
【００６１】
ステップ８．　ｉ＝３
ステップ９．　ｉ＞ｄなので、Ｇ’とＶを出力し、アルゴリズムを終了する。
【００６２】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
【００６３】
図２は本発明の一実施形態の量子コンピュータアルゴリズム変換装置の構成図である。
【００６４】
本実施形態の量子コンピュータアルゴリズム変換装置は演算部１１と記憶部１２からなり、記憶部１２は入力アルゴリズム記憶部１３と出力アルゴリズム記憶部１４と変数名配列記憶部１５からなる。演算部１１は図２に示すように入力部２０とそれぞれ図３中のステップ１１〜１７の処理を行う初期化部２１、処理判定部２２、処理部２３，２４，２５、２６、終了判定・出力部２７からなっている。
【００６５】
量子アルゴリズムが入力部２０により本装置に入力され、入力アルゴリズム記憶部１３に格納される。次に、初期化部２１で出力アルゴリズム記憶部１４と変数名配列記憶部１５が初期化される。その後、入力アルゴリズムに応じて処理判定部２２から演算部２６の処理が繰り返される。この間、出力アルゴリズム記憶部１４と変数名配列記憶部１５はステップごとに更新される。最後に、終了判定・出力部２７から出力アルゴリズム記憶部１４と変数名記憶部１５の内容が計算結果として出力される。
【００６６】
なお、本発明の量子コンピュータアルゴリズム変換方法は専用のハードウェアにより実現されるもの以外に、その機能を実現するためのプログラムを、コンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するものであってもよい。コンピュータ読み取り可能な記録媒体とは、フロッピーディスク、光磁気ディスク、ＣＤ−ＲＯＭ等の記録媒体、コンピュータシステムに内蔵されるハードディスク装置等の記憶装置を指す。さらに、コンピュータ読み取り可能な記録媒体は、インターネットを介してプログラムを送信する場合のように、短時間の間、動的にプログラムを保持するもの（伝送媒体もしくは伝送波）、その場合のサーバとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含む。
【００６７】
【発明の効果】
以上説明したように、本発明によれば、循環配列型量子コンピュータ用の量子アルゴリズムを直接記述する必要がなく、通常の量子アルゴリズムを記述すれば機械がこれを循環配列型量子コンピュータ用の量子アルゴリズムに自動的に変換してくれることになるため（たとえば、図５で示したアルゴリズムを人手で書く代わりに、図４で示したアルゴリズムを書けばよい）、アルゴリズムの製造効率が飛躍的に増大する。
【図面の簡単な説明】
【図１】本発明の量子コンピュータアルゴリズム変換方法を示すフローチャートである。
【図２】本発明の一実施形態の量子コンピュータアルゴリズム変換装置の構成図である。
【図３】図２の演算部１１の構成図である。
【図４】アルゴリズムの図による表現を示す図である。
【図５】入力量子アルゴリズムの例とその図による表現を示す図である。
【図６】出力量子アルゴリズムの例とその図による表現を示す図である。
【符号の説明】
１〜９　　ステップ
１１　　演算部
１２　　記憶部
１３　　入力アルゴリズム記憶部
１４　　出力アルゴリズム記憶部
１５　　変数名配列記憶部
２０　　入力部
２１　　初期化部
２２　　処理判定部
２３〜２６　　処理部
２７　　終了判定・出力部
【図１】
2004094885.tif 000003
【図２】
2004094885.tif 000004
【図３】
2004094885.tif 000005
【図４】
2004094885.tif 000006
【図５】
2004094885.tif 000007
【図６】
2004094885.tif 000008