\documentclass[12pt,a4paper]{jarticle}
\title{3倍積完全数の探索の試み\\
冬休み研修レポート}
\author{三崎吉剛}
\date{2000年1月10日}
\begin{document}
\maketitle
\section{完全数}
ある正の整数が完全数であるとはその数の約数の和がその数の2倍になるときである.いま整数$n$の約数の和を求める関数を$\sigma(n)$とすれば,上記のことは$\sigma(n)=2n$と表すことができる.
完全数は小さい方から6,28,496などである.これらの小さな数たちを素因数分解してみると$6=2\times 3$,$28=4\times 7=2^2 \times 7 $,$496=16 \times 31=2^4 \times 31$である.
それぞれ2の冪乗と素数の積となっていることがわかる.
この素因数となっている素数たちは,それぞれに1を加えると2の冪乗となる特徴を持つことが推察できる.
すなわち,$3+1=2^2$,$7+1=2^3$,$31+1=2^5$である.
したがって例として掲げた3つの完全数は次のように表現できる.
\[
6=2^{2-1} \times (2^2-1)
\]
\[
28=2^{3-1} \times (2^3-1)
\]
\[
496=2^{5-1} \times (2^5-1)
\]
以上から例にあげた完全数たちは$n=2^{p-1} \times (2^p-1)$という形をしていることがわかる.また,上記の場合は$p$と$2^p-1$がともに素数であった.
さて,$n=2^{p-1} \times (2^p-1)$ で$2^p-1$が素数であるとき,この$n$が完全数になることが古代ギリシャでは証明されていた.この証明はユークリッドの原論にある.
また,偶数の完全数はすべてこの形に限ることをオイラーが証明した.
ところで$2^p-1$の形の素数をメルセンヌ素数と呼ぶ.これは$p$が素数のときのみ素数となる.逆はいえない.たとえば$2^{11}-1= 21 \times 89$である.
ユークリッドとオイラーによれば偶数の完全数はメルセンヌ型素数と完全に対応することとなる.
\section{メルセンヌ素数}
メルセンヌは,以下の式において素数を与える$m$についてに$n \leq 258$の範囲で予想をしていた. これをメルセンヌの予想と呼ぶ.この予想は20世紀の中盤において正誤を含めて確定した.
$n=2^m-1$は次の素数において素数となると予想した.
$m=2,3,5,7,13,27,31,67,127,257$
1750年 オイラー $2^{31}-1$が素数であることを証明
1876年 リュカ $2^{107}-1$が素数であることを証明
1883年 ぺボジーネ $2^{61}-1$が素数であることを証明. メルセンヌはこれを落としていた.
1960年代初頭パワーズ$2^{89}-1,2^{107}-1$が素数であることを証明.これもメルセンヌは落としていた.
1947年までに$n \leq 258$の範囲の表が完成した.
$m=2,3,5,13,17,19,31,61,89,107,127$である.
完全数やメルセンヌ素数に関しては未解決問題が以下のようにある.
奇数の完全数は存在するのかしないのか.
偶数の完全数は無数にあるのか有限個なのか.
メルセンヌ素数は無数にあるのか有限個なのか.
さて,円周率の計算レコードはわが国の東京大学金田氏によるスーパーコンピュータの計算が世界のトップを走っている.素数のレコードは最近スーパーコンピュータではなく,インターネットで結ばれたパソコンを使った分散作業で捜すプロジェクトが進行している.GIMPSというものである.円周率とくらべると日本人の貢献が少ないように思える.
現在知られている最大のメルセンヌ型素数は,この
The Great Internet Mersenne Prime Search(GIMP)
http://www.mersenne.org/prime.htm
によって発見されたものである.そこには以下の記述がある.
GIMPS Finds Its Fourth Prime!!!!
$2^{26,972,593}-1$ is the 38th known Mersenne prime.
The Prime Page
prime number research ,records ,and resouces
http://www.utm.edu/research/primes/
によれば発見は99年6月とある.
\section{倍積完全数}
完全数は$n$は$\sigma(n)=2n$という形で定式化できる.では$\sigma(n)=kn$として,この$k$を2より大きい整数としたらどうだろうか.
このような数のことを$k$倍積完全数と呼ぶ.この呼称に従えば,通常の完全数は2倍積完全数となる.
$k=3$のときしらみ潰しに調べてみると$120$と$672$がすぐに見つかった.これらを素因数分解してみると
\[
120=2^5 \times 3 \times 7
\]
\[
672=2^5 \times 3 \times 7
\]
となる.
これだけでは,次の3倍積完全数を予想するのは困難だと考え,3個目の探索を試みた.
1万位を(仮称)十進BASICで調べたが(たしか)十時間くらいかかったと思う.そこで,計算する環境の高速化として
OS linux(MLD4) FATへのインストール
HDD 1.0GB
CPU Pentium3 400Mz
memory 64MB
使用したプログラミング言語は
gcc(c言語)
である.
これでしらみ潰しに百万まで調べていくと523776というものが見つかった.
こちらも十時間くらいかかったと思う.
\[
523776=2^9 \times 3 \times 11 \times 31
\]
である.
上記の120と672の素因数分解と比較して
2の奇数冪乗$\times$ 3$\times$ 素数か1$\times$ メルセンヌ素数
という形をしらべてみることにした.
ただし,数が大きくなるのでC言語gccに多倍長計算のプログラムをいれてやる必要がでてきた.
c言語では,整数型と呼ばれるint型(16ビット)の変数でれば$-327768$から$327768$の整数値,int型(32ビット)の変数でれば$-2147483648$から$2147483648$までの数値しか扱えない.
倍長整数型とよぶlong型であっても$-2147483648$から$-2147483648$までの数値しか扱えないのである.
そこで,多倍長計算を可能にするソフトを
倪 永茂(助教授)氏のサイト
都宮大学国際学部国際社会学科倪研究室へようこそ
にある
C言語によるアルゴリズム集
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/index.html
から入手させていただいた.
そこで2の奇数冪乗のところは$2^1,2^3,\cdots ,2^31$とし,素数は $107$までの29個,メルセンヌ素数は $253$までの20個とした.
瞬時の動作で$4253 \times 3 \times 107 \times 2097152=2863059173376$の範囲には上記のタイプの3倍積完全数はすでにわかっている3つのものしかないことがわかった.
ただし,プログラムのチェックをきちんとしていないのでバグがある可能性は現時点では否定できない.
\section{参考:3倍完全数探索プログラム}
以下に探索に使った自作プログラムを紹介する.
cで書いたほとんどはじめてのソフトであることと,フローチャートも書かずに行っているので変数の定義などを含めて下手くそなものであるが,とりあえず以下に参考にまで掲載しておくこととする.
準備中
\end{document}