8/8(土) つくばで「ミニキーボード教室」☆彡
量子ゲート

New!! 栗まんじゅうでわかるショアのアルゴリズム(③57の素因数分解)

AI要約

ショアのアルゴリズムを学ぶシリーズ第3弾として、57の素因数分解に挑みます。qiskitのシミュレーションで周期18を発見し、その結果とユークリッドの互除法を組み合わせて因数3と19を導出するプロセスを解説します。

はじめに

ショアのアルゴリズムを学ぶシリーズ。これまでに「15個溜まったら捨てて余りが1個になる」「21個溜まったら捨てて余りが1個になる」を試しました。

お察しの通り、実はこれらは15や21の素因数分解の手順の一部です。今回は新たに「57個溜まったら捨てて余りが1個になる」を行い、57の素因数分解までやりきってみましょう。

なお一説によると57は素数らしいですが、果たしてどうなのでしょうか。

問題

何度でも出します!

倍々に増える栗まんじゅうを57個ずつ処分して、ちょうど1個だけ余るタイミングはあるかな?それを僕が食べてトドメを刺すよ!

つまり、1→2→4→8個…と増えていったときに、57の倍数+1になるタイミングが知りたいんだね!

問題はこちら。

一定時間ごとに2倍に分裂する栗まんじゅうが1個ある。57個溜まるごとに処分する場合、手元に1個だけ残るのは何回分裂したあとか?

手計算してみる

さあ、今回の問題は手強いですよ。

分裂回数個数mod 57
0回11
1回22
2回44
3回88
4回1616
5回3232
6回647
7回128 (14)14
8回256 (28)28
9回512 (56)56
10回1024 (112)55
11回2048 (110)53
12回4096 (106)49
13回8192 (98)41
14回16384 (82)25
15回32768 (50)50
16回65536 (100)43
17回131072 (86)29
18回262144 (58)1
19回524288 (2)2

( )の中の数字は、57個溜まる度にちょこちょこ処分した場合です。なんと周期は18、答えは「18回分裂後」のようです。

参考文献:龍の髭

コードで確認

いつもコピペできるコードをもらえると思うなよ!(キレる若者)

前回のコードを各自修正してください。57なのでターゲットビットは6個、コントロールビットは12個としてください。

実行結果がこちら

101010101011010110 | 4/1200
101010101010111000 | 4/1200
110101010100110001 | 4/1200
010101010100111011 | 1/1200
(中略)
010011100010001010 | 1/1200
110001110001100011 | 1/1200
001011100010100110 | 1/1200
100101110000001010 | 1/1200
{'110101010101': 37, '010101010101': 34, (中略), '010001110100': 1, '000011101001': 1}

量子譜↓

ピークを見るグラフ↓

なんじゃこりゃ!コントロールレジスタの範囲0~4096を18等分するピークが現れました。よって周期=18と求まりました。

ちなみに、底a=5としても周期18が求まります。これをこのあと使います。

ここから素因数分解

ここまでの計算結果を使って57の「因数分解」をやってみましょう。

ちょっと前提条件がありまして、まず、得られた周期が「偶数」である必要があります。もし偶数でなければ底「a」の値を変えて量子計算をやり直してください。また、実はa=2の結果は不運なことにある種の特殊解のため、因数分解に使えません。この場合もやり直して、a=5で周期18が求められたとしましょう。

いま、状況を整理すると、「518個の栗まんじゅうを57個ずつ捨てると1個余った」

これを式にすると

  518 = (57の倍数)+1

  (57の倍数) = 518 -1

中学校で習った「和と差の積の公式」を使って

  (57の倍数) = (59 +1)(59 -1) = 1953126×1953124

ユークリッドの互除法で右辺の大きな数と57の共通因数(最大公約数)を求めます。

  1953126 と 57 の共通因数 → 3
  1953124 と 57 の共通因数 → 19
  (このとき、それぞれ共通因数を持っていることが保証される(説明放棄))

よって、

  (57の倍数) = (57と共通の因数3を持つ数) × (57と共通の因数19を持つ数)

これは57が因数として3と19をもっていることを意味しており、因数分解ができました。

RSA暗号などで57という数字を「2つの素数の積」として作っていたと仮定すれば、「因数分解ができた」それすなわち「素因数分解ができた」ということになります。

グロタンディーク先生。やっぱり57は合成数でしたよ…!

おわりに

以上でショアの解説シリーズを終わります。いや、理論の深いところまでは解説できてないんですが。

ちなみに119とかの素因数分解も挑戦したんですが、qiskitの計算が全然終わらないので諦めました。一晩待ったらさすがに終わるかな?誰かやってみてください ( ˘ω˘ )zzz

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました