はじめに
こんにちは。お久しぶりのひよこ🐣です。
なかなか忙しくてブログを書く時間が取れなかったのですが、さすがに今日を逃すわけにはいかない!というわけで久々の投稿です。
今日はなんの日でしょうか? そう今日は 11 月 11 日、ポッキー&プリッツの日です!
「1」がたくさん並んだこの日にちなんで、1 だけからなるレピュニット素数について書いてみたいと思います。ポッキーやプリッツでも食べながら数学のちょっとした話題として楽しんでいただければ幸いです。
レピュニット素数とは?
レピュニット数とは、1 が繰り返し並んだ数のことです。例えば、
- 1 桁: 1
- 2 桁: 11
- 3 桁: 111
- 4 桁: 1111
という形です。英語で書くと repunit、つまり repeated unit (単位の繰り返し) という意味が語源なのだそうです。これを一般式で表すと、
$$ R_n = \frac{10^n - 1}{9} $$
と書けます。ここで $R_n$ は n 桁のレピュニット数を表します。この中で素数であるものをレピュニット素数と呼びます。
今日 11/11 はポッキー&プリッツの日なので、この 1111 にちなんでみようというわけです。
レピュニット素数を探してみる
1200 桁までの探索方法
レピュニット数の定義は単純ですが、桁数が大きくなると計算が大変です。今回はループで前回のレピュニット数を 10 倍して 1 を足すという簡単なアルゴリズムを使いました。Python で 1200 桁までのレピュニット数を生成し、素数判定したコードです。結構大きな数になるので、数学ライブラリ sympy の isprime で判定しています。
import sympy
num = 1
for i in range(1, 1201):
if sympy.isprime(num):
print(i, num)
num = num*10+1
この結果、以下の桁数でレピュニット素数が見つかりました。
- $n = 2$: 11
- $n = 19$: 111...111(19 桁)
- $n = 23$: 1111...1111(23 桁)
- $n = 317$: 11111...11111(317 桁)
- $n = 1031$: 1111111...1111111(1031 桁)
案外少ないですね…
🐣 1031 は天才っぽくていいかも
これ以降のレピュニット素数として確定しているのは
$n=49081, 86453, 109297$ までで、その先の候補として 270343, 5794777, 8177207 などがいまだに審議中ということです。
🐣 109297 が素数だと確定したのは 2025年になってからです
レピュニット素数の数学的性質
なぜレピュニット数は素数になりにくい?
レピュニット数 $R_n$ が素数になるのは非常に稀です。その理由の一つは、桁数 $n$ が素数であるときにしか $R_n$ は素数にならないからです。
例えば、$n = 4$ の場合、$R_4 = 1111 = 11 × 101$ となり合成数です。一方で $n = 19$ や $n = 23$ のように桁数が素数のときは、$R_n$ が素数になる可能性がありますが、桁数が素数だからと言って必ず $R_n$ が素数になるわけではありません。桁数は必要条件だということですね。
先ほどのコード例では愚直に計算していますが、この性質を利用して桁数が素数のときだけ判定するように改良することができます。
🐣 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, 1201):
for N in range(2, 10): # N 進法
num_N = int(str(num), N) # 文字列を N 進法だと解釈して10進法の値に変換
if sympy.isprime(num_N):
print(f"num={i}, {N} 進法, value={num_N}")
result[N - 2] += 1 # N 進数ごとに何回素数になったか保持
num = num*10 + 1
print(result)
結果
1200 以下でそれぞれの進法において見つかったレピュニット素数の数は以下の通りでした。
- 2 進法: 14 個
- 3 進法: 7 個
- 4 進法: 1 個
- 5 進法: 10 個
- 6 進法: 9 個
- 7 進法: 4 個
- 8 進法: 1 個
- 9 進法: 0 個
基数 2 で多くの素数が見つかる理由は、これがメルセンヌ数に対応しているためです。一方で、基数 9 では素数が見つかりませんでした。一般に $N$ が平方数の場合のレピュニット数が素数になることはほとんどありません。4 進法表記の 11 (=5) や 16 進数表記の 11 (=17) のような例外はありますが、9 のように全く素数が出現しない場合の方が多いです。また 10 進数では 3 で簡単に割れてしまう 111 ですが、2, 3, 5, 6, 8 進数表記では全部素数になります!
🐣 111 が素数っぽいという感覚は実は悪くなかったのかも!?
メルセンヌ素数
基数 2 の場合、1 の後に 0 だけが続く数 (10、100、1000…) は 2 の累乗に対応するので、ここから 1 を引いた形のレピュニット数は以下のメルセンヌ数になります。
$$ M_p = 2^p - 1 $$
巨大な素数の発見は、世界に愛好家がいる人気?分野です。
メルセンヌ素数にはリュカ–レーマーテストというチート級に優れた素数の判定法があるので、巨大な素数といえばそれはほぼメルセンヌ素数のことです。つまり、発見されているメルセンヌ素数たちの間にはまだまだたくさんの非メルセンヌ素数があるはずなのですが、これらは簡単な判定法がないので発見されることなく静かに発見される日を待ち続けているのです。 昨年 2024 年 10 月 12 日にも新しいメルセンヌ素数の発見が話題になっていましたね。この素数の桁数はおよそ 4,100 万桁にも達するそうです。2025 年 11 月 11 日現在、いまだにこれが最大のメルセンヌ素数の座を守り続けているようです。
2025 年ポッキー&プリッツの日にちなむ素数
最後に 2025 年にちなんで、2025 の後に $R_n$ をくっつけた形の素数を次のコードで探してみました。
数字は文字列を作ってから int に変換しています。
import sympy
for i in range(1,1201):
rep="1"* i
num=int("2025"+rep)
if(sympy.isprime(num)):
print(i,num)
その結果、以下のような素数が見つかりました。1200 以下では 202511111111 (1 が 8 個) を始めとして 1 が 14、26、104、122、590 個続く場合も素数でした。1 が 7 個続く場合が素数なら令和 7 年でピッタリだったのですが 2025 年から令和 8 年に向けての躍進を示していると考えれば 8 個でも悪くないのかもしれません。
🐣 最近、一年が早すぎます…
余談: 2025 とレピュニット数
2025 はいくつかの面白い性質を持ちます。まず
$1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3 = 2025$
のように 1~9 までの立方数の和が 2025 になります。また、1 から 9 までの和の平方も 2025 になります。
$(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)^2 = (45)^2 = 2025$
一方、最初に示したようにレピュニット数は $10^n-1$ を 9 で割ることで作ることができます。どちらもなんだか 9 と縁が深い数という共通点があります。
もう過ぎてしまいましたが、もしかしたら 2025年 9月は特別な月だったのかもしれませんね!
おわりに
ポッキー&プリッツの日にちなんで、レピュニット素数について考えてみました。あまり数学が得意ではない私でも、ちょっとだけ数学の深淵に触れた気分になれるので素数の話は大好きです。この機会にぜひ、数学の楽しさに触れてみてください!
それでは、また次回の記事でお会いしましょう!