🗂

量子プログラミングコンテスト【QCoder】第二回に参加した感想と解法まとめ

2024/08/20に公開

こんにちは!株式会社Fusicの多田です。
QCoder第二回に参加し、順位は25位/183でした

量子コンピュータとは

量子コンピュータ (りょうしコンピュータ、英: quantum computer)は量子力学の原理を計算に応用したコンピュータ。古典的なコンピュータで解くには複雑すぎる問題を、量子力学の法則を利用して解くコンピュータのこと

wikipediaより引用

量子コンピュータは、量子力学の法則を用いて複雑な計算をする機械です。
その中にも、量子ゲート方式や量子アニーリング方式などの方式がありQCoderでは量子ゲート方式のプログラミングを競います

QCoderとは


こちらはQCoderのWebサイトにあるトップ画面です。
量子をモチーフにしたと思われるかっこいいロゴと説明があります。
書いてあるとおりQCoderは量子プログラミングコンテストです。過去問を見ることでまだ一般的ではない量子コンピュータのためのプログラミング演習問題を解くことができます。

量子コンピュータに興味はあったものの、どこから始めればいいのかわからなかった私にとって、演習問題があり、勉強しやすい環境が整備されるという点が非常に嬉しいです。

QCoder第2回の成績

25位/183 でした。QCoder第一回の全問題をあらかじめ予習してきましたので悪くない成績ですが、もっと頑張りたいと思わされました。

解けた問題数は14問中9問でした。

解けた各問題の一言感想

A1

1量子ビットに対しての位相操作問題です。
基本的なゲートに関する問題ですが、Zゲートを用いた位相の変換が1問目から入っていて第一回より難易度が上がっていると感じました。

A2

2量子ビットに対しての操作問題です。
第一回でも活躍したアダマールゲートとCXゲート、Zゲートを理解していれば解けます

A3

A2のビット数がnとして与えられるようになった問題です。
A2をちゃんと理解していて、for文が書ければ難なく解ける問題でした。

A4

A5

A3と問題は同じなのですが、量子回路の深さに制限があります。
また、A4よりA5の方が深さの制限が厳しいです。
自分が量子回路の深さを勘違いしていたことに気づくまでに時間がかかってしまいました。
量子回路の深さはゲートを通したか、制御ビットとして使った場合にビットごとに計算して、回路内のすべてのビットの深さのMAXを取ると回路全体の深さとなります。
このことを意識して回路を構成することで解くことができます。

B1

位相を変換して欲しいことは見ればわかるのですが、どのように変換すれば良いかわからず、Rx,Ry,Rzゲートあたりをガチャガチャ試してなんとか正解することができました..
解説を見ると想定解放はPゲートだったようです。

B2

こちらの問題もPゲートを知っていればすぐなのですが、このゲートの存在を知らなかったために2~30分色々ガチャガチャした挙句諦めて問題名を見て調べると明らかに対応しそうなゲートがあることがわかりました。
ゲートの存在さえわかればそこまで難しくはありませんでした。

B3

2つの量子ビットの状態をスワップする操作です。
大変頭がこんがらがりましたが、紙とペンを使って手元で色々書き続けて解くことができました。
答えを知ってしまえば簡単に見えるんですが、自分で思いつくのは結構大変でした。

B5

やたら難解な式が見えますが、よくよく見ればビットごとに操作すればいいことがわかります。
難解に見える式に怯えない心が大切です。

解けなかった問題たち

B4

QFTという有名アルゴリズムを実装しましょうという問題
実装例自体は調べることですぐ見つけられますが、インデックスを合わせることができずついに解くことができませんでした...

以降の問題はわかりませんでしたが、QFTを活用する問題たちが多いようです。

B6

B7

B8

EX

終わりに

量子コンピュータというととても難しそうに感じますが、実際にコードを書き始めてみると結構楽しいです。
興味あるけど量子コンピュータ難しそうで触ってないという人はこれを機に触ってみてはいかがでしょうか

Fusic 技術ブログ

Discussion