ポッキーの日といえば? そうだ、レピュニット素数の話をしよう!
はじめに
こんにちは。お菓子大好きひよこ🐣です。
今日は 11 月 11 日、ポッキーの日ですね!「1」がたくさん並んだこの日にちなんで、レピュニット素数について書いてみたいと思います。ポッキーでも食べながら数学のちょっとした話題として楽しんでいただければ幸いです。
レピュニット素数とは?
レピュニット数とは、1 が繰り返し並んだ数のことです。例えば、
- 1 桁: 1
- 2 桁: 11
- 3 桁: 111
- 4 桁: 1111
という形です。英語で書くと repunit、つまり repeated unit (単位の繰り返し) という意味が語源なのだそうです。これを一般式で表すと、
と書けます。ここで
今日 11/11 はポッキーの日なので、この 1111 にちなんでみようというわけです。
レピュニット素数を探してみる
1200 桁までの探索方法
レピュニット数は単純そうに見えて、桁数が大きくなると計算が大変です。そこで以下の 3 つの方法を試してみました。
- 文字列 "1" を
回繰り返して整数化n - ループで前回の値に
を足す10^{n-1} - 公式
を使うR_n = \frac{10^n - 1}{9} = \frac{(10 - 1)(10^{n-1} + 10^{n-2} + \dots + 1)}{9}
結論から言うと、記憶変数を使っていいなら 2. が一番効率的でした。単発で計算するなら 3.の方がよさそうですけどね。以下は Python で 1200 桁までのレピュニット数を生成し、素数判定したコードです。結構大きな数になるので、数学ライブラリ sympy の isprime で判定しています。
import sympy
num = 1
for i in range(1, 1200):
if sympy.isprime(num):
print(i, num)
num += 10**i
この結果、以下の桁数でレピュニット素数が見つかりました。
-
: 11n = 2 -
: 111...111(19 桁)n = 19 -
: 1111...1111(23 桁)n = 23 -
: 11111...11111(317 桁)n = 317 -
: 1111111...1111111(1031 桁)n = 1031
案外少ないですね…
🐣 1031 は天才っぽくていいかも
これより大きいレピュニット素数で確定しているのは
数学的にはレピュニット素数が無限に存在するか?がそもそも未解決問題みたいです。
レピュニット素数の数学的性質
なぜレピュニット数は素数になりにくい?
レピュニット数
例えば、
先ほどのコード例では愚直に計算していますが、この性質を利用して桁数が素数のときだけ判定するように改良することができます。
🐣 111 って素数っぽく見えませんか? 各桁の和が 3 なので 3 で割れちゃうんですけどね
N 進法でのレピュニット素数
レピュニット数は 10 進法だけでなく、他の進法でも考えることができます。例えば 2 進法表記のレピュニット数を 10 進法に直すと以下のようになります。
- 2 進法: 1, 11, 111, 1111...
- 10 進法: 1, 3, 7, 15...
進法を変えると、素数になる条件も変わります。というわけで 2 進法から 9 進法までのレピュニット数を生成し、素数判定をしてみました。
import sympy
num = 1
result = [0] * 8 # 2進法から9進法までの結果を格納
for i in range(1, 1200):
for N in range(2, 10): # N 進法
num_N = int(str(num), N) # int を使うと簡単に N 進法に変換できる
if sympy.isprime(num_N):
print(f"num={i}, {N} 進法, value={num_N}")
result[N - 2] += 1 # N 進数ごとに何回素数になったか保持
num += 10**i
print(result)
結果
1200 桁以下でそれぞれの進法において見つかったレピュニット素数の数は以下の通りでした。
- 2 進法: 14 個
- 3 進法: 7 個
- 4 進法: 1 個
- 5 進法: 10 個
- 6 進法: 9 個
- 7 進法: 4 個
- 8 進法: 1 個
- 9 進法: 0 個
基数 2 で多くの素数が見つかる理由は、これがメルセンヌ数に対応しているためです。一方で、基数 9 では素数が見つかりませんでした。一般に
🐣 111 が素数っぽいという感覚は実は悪くなかったのかも!?
メルセンヌ素数
基数 2 の場合
巨大な素数の発見は、世界に愛好家がいる人気?分野です。
メルセンヌ素数にはリュカ–レーマーテストというチート級に優れた素数の判定法があるので、巨大な素数といえばそれはほぼメルセンヌ素数のことです。つまり、発見されているメルセンヌ素数たちの間にはまだまだたくさんの素数があるはずなのですが、判定法がないので発見されることなくお宝のように埋まっているというわけです。
🐣 判定待ちのレピュニット素数候補もこれですね
2024 年 10 月 26 日にも新しいメルセンヌ素数の発見が話題になっていましたね。この素数の桁数はおよそ 4,100 万桁にも達するそうです。
2024 年ポッキーの日にちなむ素数
最後に 2024 年にちなんで、
数字は文字列を作ってから int に変換しています。
import sympy
for i in range(1,1200):
rep="1"* i
num=int("2024"+rep)
if(sympy.isprime(num)):
print(i,num)
その結果、以下のような素数が見つかりました。
-
(1 が 3 個)2024111 -
(1 が 27 個)2024111111111111111111111111111 -
(1 が 33 個)2024111111111111111111111111111111111
🐣 これを 2024年ポッキー素数と命名しちゃいます!
おわりに
ポッキーの日にちなんで、レピュニット素数について考えてみました。あまり数学が得意ではない私でも、ちょっとだけ数学の深淵に触れた気分になれるので素数の話は大好きです。この機会にぜひ、数学の楽しさに触れてみてください!
それでは、また次回の記事でお会いしましょう!
Discussion