こんにちは|こんばんは。カエルのアイコンで活動しております @kyamaz です。
はじめに
人名がついた「●●素数(●●は人の名前)」という素数を紹介する第7弾です。これまでの6つのエントリは脚注にリンクを貼っておきます。123456
このあとのプログラムで素数列を利用するため、ワンライナーで素数列を定義しておきます。
ghci> p=2:3:5:5#p;m#(a:b:x)=[n|n<-[a^2..b^2-2],(mod (n+1) 6)*(mod (n-1) 6)==0,gcd n m<2]++(m*b)#(b:x)
ウィルソン素数
ウィルソン素数のWikiPediaによると、イングランドの数学者ジョン・ウィルソンに由来して命名されています。
ウィルソン素数の定義は以下のとおりです。
- ウィルソン素数の定義
- $p^2$ が $(p − 1)! + 1 $を割り切るような素数 $p$
後述の「ウィルソンの定理」が示すとおり、$(p − 1)! + 1 $ を素数 $p$ で必ず割り切れますが、$p^2$でも割り切るような素数 $p$ です。既知のウィルソン素数は $2×10^{13}$まで調べられており $5, 13, 563$ の3つしか確認されていないそうです。ウィルソン素数は無限個存在し、さらに区間 $[x, y]$ に約 $\log(\log(y)/\log(x))$ 個存在すると予想されていますが、未解決問題です。
さて、この定義を用いて、ウィルソン素数のリストを出力してみましょう。この処理はいつもどおり停止しないため、適当なところでCtrl-C
で停止しています。
(※だいぶ大きな数まで調べても3つしか確認できていないので、$563$が出力されれば直ぐに停止してもよいでしょう。)
ghci> [n|n<-p, mod (product [2..(n-1)] +1) (n^2) == 0]
[5,13,563^CInterrupted.
ウィルソンの定理
「ウィルソンの定理」は、素数に関する次のような定理です。$p$ が大きくなるにつれて計算量が膨大になるため、素数判定に用いるには実用的な手法ではありません。
- ウィルソンの定理
- $p$ が素数ならば $(p − 1)! \equiv −1 \pmod p$ が成り立つ。
逆に、整数 $p \gt 1 $に対し、$(p − 1)! \equiv −1 \pmod p$ ならば、$p$ は素数である。
この定理の発見と証明の経緯は少し複雑でウィルソンの定理のWikiPediaによると、発見は10世紀のペルシャの数学者イブン・アル・ハイサム(アルハゼン)であったが、18世紀のイングランドの数学者ジョン・ウィルソンにより再発見され、その師匠であるエドワード・ウェアリングにより1770年に発表され、命名されたそうです。さらにその証明は、1773年にラグランジュが最初の証明を与えました。
(投稿後の追記)
ウィルソンの定理の証明は、https://mathlandscape.com/wilson-theorem/ に詳しく解説があります。
おわりに
ご一読いただきまして有り難うございます。
最後に、本稿を記載するために検証したHaskell環境を記しておきます。お手元の環境で検証する際に、動作が異なるときには参考になるかもしれません。
本稿の環境
本稿のために使用した環境は以下となります。- macOS: Sonoma 14.5 (chip: Apple M1)
- GHCup: 0.1.30.0
- GHC: 9.6.4
(●)(●) Happy Hacking!
/"" __""\