インテジャーズ

INTEGERS

数、特に整数に関する記事。

[素数大富豪] ラマヌジャン革命と合成数出しにおける指数表記出し

これは素数大富豪Advent Calendar 2016
www.adventar.org

の22日目の記事です。

昨日はみうら君の記事でした:
togetter.com

17いいですねえ。私も好きです。私の好きな17の性質としては「唯一のジェノッキ素数である」があります:
integers.hatenablog.com

公式ルールにルールを二つ追加します

素数大富豪の「公式ルール」と呼んでいるものが存在します。それは2014年9月19日公開、2015年3月14日一部改訂のPDFファイルhttps://t.co/K5Tf8SeNHWに書かれている内容です。

公開してから既に二年以上が経ち、もはや古いため、公式ルールを書き直してもう一度公開する予定です。書いたときは数に関するルールを尊重していたため、最初の手札の枚数は指定していませんでした。ですが、最近では素数ということで7枚か11枚の手札で始めることが多いです。また、流れたカードを山札に加える際にシャッフルすべきなのかは、明示していませんが、プレイヤーに委ねていました。ジョーカー二枚出しは二枚出し最強として出せないのか?などの質問も受けました。書いた当時はこれらについてはプレイヤーに決めてもらうことにしていたのですが、新しい公式ルールの解説にはここら辺をもう少し詳しく書こうと思っています(幾つかの選択肢を設けてプレイ前にどのルールを使うかを決めてもらうなど)。「あらかじめ偶数を半数抜くべきである」という初心者用ルールなども補足欄ではなく、もっと見やすいところに書くべき気がしています。

現状の公式ルールでは二ページ目の下の方に[?]とちゃんと表示されていない部分があるなどの不備があるのですが、実は直したくても直せません。というのも、パソコンを変えてから前のデータが文字化けしてしまってそのままは修正できなくなってしまったのです。それならば一から書き直そうと思っている次第です*1

さて、基本的には公式ルールは必要最小限のものにとどめておき、グロタンカットと合成数出し以外には特殊ルールは設けないというスタンスでした。すなわち、それ以外の様々な追加ルールについてはローカルルールとして遊んでもらうという考えです。

ところが、おかげさまで素数大富豪の認知度も少しずつ上がってきていますが、プレイヤーの皆様の考えた追加ルール案の中に「これは公式ルールに追加すべきである」と思った非常に優れた案が二つありました。ので、予定している公式ルール改訂において新ルールを二つ追加します

そのルールとはラマヌジャン革命合成数出しに関する指数表記出しです。

菅原響生氏考案のラマヌジャン革命は「ラマヌジャンのタクシー数1729を出すと革命状態になる」というものです。

おのりん氏考案の合成数出しに関する指数表記出し

です。以下、改訂版に先行してこれらのルールを詳しく解説します。二人のアイデアを元に若干修正したり厳密にしたりしています。

ラマヌジャン革命

ルール

  • 1729は素数ではないが素数として四枚出しで場に出すことができ、場に出ると革命状態となる。革命状態時は「場に出ている数より大きい数のみを出すことができる」という基本ルールが逆転し、「場に出ている数より小さい数のみを出すことができる」となる。
  • つまり、手札に1729があり、場に1729より小さい四枚出しが出ている or 場が流れている状態で自分の手番が来たときに出せる。
  • 1729を出す際に一部をジョーカー利用で出してもよい。
  • 1729が場に出た際に、グロタンカットのように強制的に場が流れるわけではない。次の手番のプレイヤーは1729より小さい四枚出しを出すか、パスすることになる。
  • 革命状態時であっても「n枚出しにはn枚出しでしか返せない」はそのまま適用される。
  • パスをして場が流れても革命状態は解除されない。再度、他のプレイヤーが1729を出すことに成功した場合は革命状態が解除され平常時に戻る。
  • 特別ルール設定のため、1729=7\times 13 \times 19を合成数出しで出してはならない*21729より小さい四枚出しが場に出ている時、あるいはラマヌジャン革命による革命状態時に場に1729より大きい四枚出しが場に出ている時、1729を合成数として出したプレイヤーには反則規定を適用し、ペナルティを受けさせる。その際、革命状態は解除されない。
  • 1729を出す場合には特別に素数と同様の立場で出すことができるが、他の合成数出しの素因数として1729を用いることはできない(グロタンカットの時と同様)。例えば、5187=3\times 1729において、3, 1729を捨てて5187を場に出すということはできない(出した場合は反則規定を適用)。5187=3\times 7 \times 13 \times 19という素因数分解に従って出す必要がある。


最初期には素数大富豪においても革命を取り入れていたのですが、それをやめにした経緯は
integers.hatenablog.com
に書いた通りです。簡単にまとめると

  • 弱いカードの救済措置は必要ない。
  • 四枚出し以上で革命が発動する事にすると、通常の大富豪に比べて頻繁に革命状態になってしまう。
  • 「四枚出し以上」という発動要因に必然性が感じられない。

という理由でした。しかし、よくよく考えてみると革命状態を導入する事には

  • カード一枚一枚に対する救済措置は不要でも、革命状態を実現するとそれまではあまり出されることのなかった小さい素数が出せる事になるので新しいゲーム性が生まれる。
  • ジョーカーを0として利用してもよいというルールが有効に利用されるケースが生じる。

というメリットがあり、

  • 四枚出し以上に必然性がなく頻繁に発動してしまうのであれば、素数大富豪のコンセプトに合った発生頻度がそこまで高くない別の革命状態を発動するルールを設ければよい。

ということがわかります。通常の大富豪にローカルルールがありすぎることには苦言を呈しましたが、革命は8切り以上に大富豪における絶対的特殊ルールです。Advent Calenderを立ち上げて下さった二世さんによれば「素数大富豪に革命はないの?」と聞かれることも頻繁にあったそうです。


そして、見事にこれらの要求に応えてくれるルールこそがラマヌジャン革命というわけです。1729はラマヌジャンのタクシー数として有名であり、

integers.hatenablog.com

数の愛好家にとっては絶対の知識です。グロタンディーク素数57以上に有名と言ってよく、グロタンディーク素数は殆どジョークですが、ラマヌジャンのタクシー数は数学的に面白い数であると言えます。

数学的な観点で「革命が起こる」ことを意味するような数を見つけるのは容易ではないでしょうが、そもそもグロタンディーク素数も「カット」を表す数というわけではありません。そこに関しては妥協することにして、「何か数の愛好家が好む特別な数」に特別ルールの役割を担ってもらうという観点で導入したルールでした。

ですので、単に四枚出し以上で発動するという一番最初の私の案に比べると、1729はかなり素数大富豪のコンセプトに合ったチョイスと言えます。

ラマヌジャン革命を導入すれば、「四枚出し以上で革命が発動する事にすると、通常の大富豪に比べて頻繁に革命状態になってしまう。」という問題点も克服できます。ただ、1729は素数ではないので合成数出し出来た場合のみ革命発動というルールにしてしまうと出すのがかなり難しくなってしまいます。これについては、グロタンカットのときと同様「素数でないけれどそのまま出してよい」という特別措置を講じれば出現頻度はある程度適切になると期待できます。実戦で既にラマヌジャン革命が発生したことがあるとのことですので、問題なさそうです。ジョーカールールを入れることによりもう少し出現しやすくなると思います。

しかしながら、ゲーム性のために「素数でないのに素数と同じ条件で出せる」という点に何か理由を見出したくはありました。グロタンカットの場合は「57は素数でないのに素数と呼ばれている」というジョークがあったのでそのような特別ルールにしたわけです。1729にも何か素数っぽさがあれば嬉しいです。

これについてはみうら君が見事に考察してくれています:

togetter.com

1729はフェルマーテストを必ずすり抜けてしまうという意味でめちゃくちゃ素数っぽい数であるカーマイケル数だったのです。

カーマイケル数は下から順に561, 1105, 1729と並んでおり、1729は3番目に現れます。なので、カーマイケル数の観点で一番覚えられるべき数は最小である561です。何か1729に特別性が欲しいところですが、みうら君は「素数大富豪において四枚を必要とする最小の絶対擬素数」という特徴づけを述べています。四枚というのは通常の大富豪における革命発生条件の名残でしょう。私がここで指摘したい点は561はすぐに3の倍数であると判定でき(5+6+1=12)、1105は明らかに5の倍数なので人間的には5611105は明らかに素数ではありません。一方、1729は最小の素因数が7なので、普通は少し考えないと素数でないと判断できません。いわゆる「パッと見素数」です。というわけで1729はそれなりに素数っぽいので「素数でないのに素数と同じ条件で出せる」という特別措置に一定のこじつけができました。

以上のような考察に基づき、ラマヌジャン革命は公式ルールに含めるに相応しいと思いました。

合成数出しに関する指数表記出し

ルール

  • 合成数はその素因数分解に現れる素数を全て手札から捨てることによって場に出すことができる。
  • 同じ素因数が複数ある場合はその全てを捨てる必要がある(例:8=2^3を出すには2を四枚捨てる必要がある)。

これらが合成数出しの元々のルールでした。追加するルールは次のものです:

  • その際、部分的に指数表記出しをしてもよい。

例) 64=2^6

f:id:integers:20161222194955p:plain:w400

のように指数表記で出してもよいし、部分的に指数表記を利用して

f:id:integers:20161222184536p:plain:w400

と出してもよい(64=2\times 2\times 2 \times 2^3)。

  • Aを用いて1乗として数を出すことはできない。

例) 691=691^1とみなした出し方

f:id:integers:20161222194156p:plain:w400

155=5\times 31^1とみなした出し方

f:id:integers:20161222194229p:plain:w400

などは禁止(出すとペナルティを受けるのではなく、このようには出せない)。

  • 指数部分の数の一部にジョーカーを用いて0からKの代わりとして用いてよい。

例) 23456=2^5\times 733をジョーカーを5として

f:id:integers:20161222194326p:plain:w400

のように出すことができる。

  • ただし、指数部分の数の一部を表現するのにジョーカーを0として用いることはできるが、1乗および0乗として出すことはできない。

例) 1024=2^{10}をジョーカーを0として

f:id:integers:20161222194523p:plain:w400

と出すことはできるが、1=2^0とみなして

f:id:integers:20161222194553p:plain:w400

1を出したり、6=2 \times 3\times 691^0とみなして

f:id:integers:20161222194620p:plain:w400

6を出したりすることはできない(こちらも反則ではなく禁止事項)。

  • 入れ子構造に指数表記出しをしてもよい。この際もジョーカーを利用して0乗を作るのは禁止である。

例) 65536=2^{16}2^{2^4}と考えて

f:id:integers:20161222194845p:plain:w400

と出すこともできるし(2^{4^2}もOK)、

2^{2^{2^2}}と考えて

f:id:integers:20161222194918p:plain:w400

と出すこともできる。

7日目の記事に書いたように、合成数出しルールは「素数の数学的性質を反映したい」という私の欲求から作られたルールでした。ある程度面白いゲーム性を生み出すルールだと感じていますが、自己満足でつけたルールのため対人戦では使われる機会が比較的少ないです。

おのりん氏考案の指数表記出しを導入しても素数や無平方数(30=2\times 3 \times 5のように1より大きい平方数を約数に持たない数)については今までの出し方と全く同じです。つまり、素数や無平方数に関しては今までのゲーム性を全く阻害しません。

一方、指数表記出しを導入することによって無平方数ではない合成数がこれまでよりは出しやすくなります。これまで全く出すことができなかった数もたくさん出せるようになります。

今までは最小のエデンの園素数40009に対して、素数大富豪で出せない合成数については128が最小とかなり小さい数でありながら出せない可哀想な数達がいました。しかし、128が出せないなんて悲しいじゃないですか*3。このような数達が一挙に出しやすくなるわけですから、数を愛する素数大富豪のコンセプトにとても合致したルールと言えるでしょう。

無平方数ではない合成数の出し方は一般に複数通り生じることになりますが、素因数分解の一意性を破壊しているわけではないので問題ありません。むしろ、出し方がたくさんある方が出す機会も増えてゲームが面白くなると期待します。一方で、0乗を含めるのは素因数分解の一意性の観点からすると認めない方がよいと判断しました。

指数表記を許すというアイデアは僕は思いつかなかったのですが、そもそも素数大富豪の基本アイデアが「数をconcatenateして見たままに10進法表記で読む」というものでしたから、指数表記も許すのはある意味で自然だと思われます。指数表記も過去の数学者が発明した「少ない部品(数)を用いてうまく大きい数を表す」方法なのですから。


以上、公式ルール追加のお知らせでした。

明日の記事はicqk3氏による「ラマヌジャン革命を実装してみたい」です。

*1:書きました: integers.hatenablog.com

*2:ルール変更しました:integers.hatenablog.com

*3:128と言えば次のような性質を持ちます: integers.hatenablog.com