##公平に先攻後行決めたいですよね?
"じゃんけんで負けたほうが〇〇ね!"
日常的な会話でありますよね。
最近(?)、Lineの台頭によりチャット上で友人と会話することが増えました。しかし、チャットでじゃんけんをするのはとても難しいです。
せーので手(グー、ちょき、ぱー)を出せないからですね。
そこで、2つの素数を使ってじゃんけんに代わる平等なゲームがありますので紹介します
##素因数分解の一意性と難しさを使う
例えば、
36を素因数分解すると、
223*3以外の分解の仕方がないですよね。そういうことです
素因数分解の難しさとは、大きな数-例えば1234567を素因数分解してくださいと言われてもすぐ出来ないですよね。
大きな数の素因数分解はコンピュータを持ってしても長い時間が経ってしまいます。
##素因数と合成数の関係
まず、素数は2を除けば皆奇数であり
奇数を4で割ったあまりは1,3のどちらかである
4で割ったあまりが等しい奇数同士を掛けると、その積になる合成数を4で割ったあまりは1になります
p=1 mod4,q=1 mod4 \Rightarrow pq=1 mod4\\
p=3 mod4,q=3 mod4 \Rightarrow pq=1 mod4\\
p=1 mod4,q=3 mod4 \Rightarrow pq=3 mod4
これを使います。
ぼくとあなたがこのじゃんけんをするとしましょう。
僕が4で割ったあまりが等しい2つの素数を選びます。
5と13としましょう。
$5 \times13=65$ なのであなたに65とチャットを送ります。
あなたは1か3を答えてください(今は例なので一瞬で素因数分解出来てしまいますが、本来もっと大きい数なので素因数分解するのは諦めて当てずっぽうで答えてね)
あなたが選んだ数(1or3)を僕にチャットで送ったら、勝ち負けの判定です。
僕は5,13を開示し、掛け算をすると65になることを示し、5,13をそれぞれ4で割ったあまりが1であることを伝えます。
あなたが僕に送った数が1ならあなたの勝ち。3なら僕の勝ちです。
完全に平等院鳳凰堂です。
こんど僕とこれでじゃんけんしましょうね!!
##おまけ
もし、素数でなく合成数を2つ選ぶと。。。
$? \times?=1365$ で1365をあなたに伝えます。
あなたが1と答えたら 15,91を開示しあまりが3なので僕の勝ちです
あなたが3と答えたら 21,65を開示しあまりが1なので僕の勝ちです