【ドキュメント】その時素数じゃなくなったーオイラー素数のその後
41
という素数がある。
まずは2を足してみよう。
41+2=43
では、今度はそこに4を足してみよう。
43+4=47
次は6を足してみよう。
47+6=53
次は8を足してみよう。
53+8=61
なんと、全部素数なのです…!
このように作られる素数を、オイラー素数といいます。厳密には、以下のような「オイラーの素数生成多項式」と呼ばれるものによって生成されます。
f(n) = n^2 + n + 41
nに0から順番に代入すると素数が得られます。
f(0)=41
f(1)=43
f(2)=47
f(3)=53
f(4)=61
f(5)=71
f(6)=83
f(7)=97
f(8)=113
f(9)=131
f(10)=151
︙
と続いていく。113の次の素数は127と少し飛んでいますが、それも見事にクリアしていますね。
この後も素数が続きます。興味のある方は、計算練習がてら求めてみてください。
しかし、「その時」。n=40。素数でなくなってしまう瞬間が訪れます。
︙
f(37)=1447
f(38)=1523
f(39)=1601
f(40)=1681=41×41
ずっと続いてくれたら素晴らしいのにな…と思っていたのですが、現実はそう甘くはありませんでした。
さて、オイラー素数の話はだいたいここで終わってしまうことが多いです。しかし、今回はオイラー素数の「その後」を見ていきたいと思います。
このあと登場する数字たちには、どのような特徴があるのか。そこを掘り下げていこうと思います。今夜もご覧いただき、ありがとうございました🙇
(「その時歴史が動いた」風に笑)
n=40で素数でなくなってしまったが、その後はどんな値が続くのか。
プログラムを書いて確認してみました。
f(n) = n^2 + n + 41 にn=0〜99の100個の数字を代入したところ、素数になったのは
86個
つまり、86%は素数となります。結構高いのでは…?
素数でない数を、nの値とともに紹介するとこうなります。
n=40, f(40)=1681=41×41
n=41, f(41)=1763=41×43
n=44, f(44)=2021=43×47
n=49, f(49)=2491=47×53
n=56, f(56)=3233=53×61
n=65, f(65)=4331=61×71
n=76, f(76)=5893=71×83
n=81, f(81)=6683=41×163
n=82, f(82)=6847=41×167
n=84, f(84)=7181=43×167
n=87, f(87)=7697=43×179
n=89, f(89)=8051=83×97
n=91, f(91)=8413=47×179
n=96, f(96)=9353=47×199
気がつきましたか…?
なんと、すべて半素数!2つの素数のかけざんで表せています。
よって、最初の100個のうち、素数が86個で半素数が14個となります。
また、以下の並びをよく見てください。何かに気がつきませんか…?
n=41, f(41)=1763=41×43
n=44, f(44)=2021=43×47
n=49, f(49)=2491=47×53
n=56, f(56)=3233=53×61
n=65, f(65)=4331=61×71
n=76, f(76)=5893=71×83
n=89, f(89)=8051=83×97
それでは、最初のオイラー素数を並べてみましょう。
f(0)=41
f(1)=43
f(2)=47
f(3)=53
f(4)=61
f(5)=71
f(6)=83
f(7)=97
そう!連続するオイラー素数の積になっているのです。
41×43, 43×47, 47×53, ...と続いています。実はこのこの並びは、ずっと存在することを証明することができます。
詳しいことは以下の記事で書きました↓
色々書いてしまいましたが、ここからは、100個, 200個, 300個, ...と代入していったときの「素数」や「半素数」の出現確率を見ていきます。
100個→素数:86個(86%)、半素数:14個、それ以外:0個
200個→素数:156個(78%)、半素数:44個、それ以外:0個
300個→素数:211個(70%)、半素数:89個、それ以外:0個
400個→素数:270個(68%)、半素数:130個、それ以外:0個
500個→素数:326個(65%)、半素数:170個、それ以外:4個
600個→素数:383個(64%)、半素数:209個、それ以外:8個
700個→素数:431個(62%)、半素数:257個、それ以外:12個
800個→素数:479個(60%)、半素数:306個、それ以外:15個
900個→素数:531個(59%)、半素数:350個、それ以外:19個
1000個→素数:581個(58%)、半素数:393個、それ以外:26個
段々と頻度は少なくなっていきます。もっと範囲を広くすると、素数になる確率は50%を切りますね。
ただ、素数または半素数になる確率だと、依然として90%を超えています。これもまた興味深い結果ですね。
いかがでしたか?オイラーの素数生成多項式を使うと、素数や半素数がたくさん登場します。
また、小さい数であれば、41から+2, +4, +6, +8, ...とやっていけば求まるので、計算練習にもぴったりです!
ぜひ、オイラー素数の魅力に浸ってみてください!
尚、今回の素数判定で使用したプログラム(Python3)を載せておきます。綺麗なものではないかもしれませんが、興味のある方はご覧ください。
素数はいつも、あなたのそばに。
Let's enjoy SOSU !
最後まで読んでいただき、ありがとうございました。
追記:今回のnoteを書く上で作成したプログラムはこちら。
# coding: utf-8
# Your code here!
import math
#素因子を求める関数
def factor(target):
dest = int(math.sqrt(target))
prime_list = []
for i in range(2,dest+1):
if target % i == 0:
prime_list.append(i)
target /= i
if is_prime(target):
prime_list.append(int(target))
return prime_list
#素数判定関数
def is_prime(target):
if target == 1:
return False
dest = int(math.sqrt(target))
for i in range(2,dest+1):
if target % i == 0:
return False
return True
n = 100 #調べる個数
prime = 0 #素数の個数
semi = 0 #半素数の個数
for i in range(n):
num = i*i + i + 41
if is_prime(num):
print(str(i) + ' ' + str(num) + 'は素数')
prime += 1
else:
#print(str(i) + ' ' + str(num) + 'は合成数')
print(str(i) + ' ' + str(num) + ' ' + str(factor(num)))
if len(factor(num)) == 2:
semi += 1
print('素数:' + str(prime) + '個, ' + '半素数:' + str(semi) + '個, ' + 'それ以外:' + str(n-prime-semi) + '個')
最初の100を調べた時の出力結果がこちら。
0 41は素数
1 43は素数
2 47は素数
3 53は素数
4 61は素数
5 71は素数
6 83は素数
7 97は素数
8 113は素数
9 131は素数
10 151は素数
11 173は素数
12 197は素数
13 223は素数
14 251は素数
15 281は素数
16 313は素数
17 347は素数
18 383は素数
19 421は素数
20 461は素数
21 503は素数
22 547は素数
23 593は素数
24 641は素数
25 691は素数
26 743は素数
27 797は素数
28 853は素数
29 911は素数
30 971は素数
31 1033は素数
32 1097は素数
33 1163は素数
34 1231は素数
35 1301は素数
36 1373は素数
37 1447は素数
38 1523は素数
39 1601は素数
40 1681 [41, 41]
41 1763 [41, 43]
42 1847は素数
43 1933は素数
44 2021 [43, 47]
45 2111は素数
46 2203は素数
47 2297は素数
48 2393は素数
49 2491 [47, 53]
50 2591は素数
51 2693は素数
52 2797は素数
53 2903は素数
54 3011は素数
55 3121は素数
56 3233 [53, 61]
57 3347は素数
58 3463は素数
59 3581は素数
60 3701は素数
61 3823は素数
62 3947は素数
63 4073は素数
64 4201は素数
65 4331 [61, 71]
66 4463は素数
67 4597は素数
68 4733は素数
69 4871は素数
70 5011は素数
71 5153は素数
72 5297は素数
73 5443は素数
74 5591は素数
75 5741は素数
76 5893 [71, 83]
77 6047は素数
78 6203は素数
79 6361は素数
80 6521は素数
81 6683 [41, 163]
82 6847 [41, 167]
83 7013は素数
84 7181 [43, 167]
85 7351は素数
86 7523は素数
87 7697 [43, 179]
88 7873は素数
89 8051 [83, 97]
90 8231は素数
91 8413 [47, 179]
92 8597は素数
93 8783は素数
94 8971は素数
95 9161は素数
96 9353 [47, 199]
97 9547は素数
98 9743は素数
99 9941は素数
素数:86個, 半素数:14個, それ以外:0個
この記事が気に入ったらサポートをしてみませんか?