要約
概完全数はの形以外のものが存在するか否かは不明である。
準完全数はその存在が不明である。
完全数
概完全数と準完全数は完全数に近い概念であるので、最初に完全数について触れておくことにする。
完全数とは名称を与えられた自然数の中でも特に興味深いものとされており、例として次のように定義される。
自然数の正の約数の和を1と表記する時、自然数とは自身を除く正の約数の和と自身が一致する自然数であるから、、すなわち と表される自然数に他ならない。
完全数の例としては、小さいものでは6や28などが挙げられ、現在知られている最大の完全数は
と表される自然数2である。
なお奇数の完全数はその存在が不明である。
概完全数
概完全数とは自身を除く約数の和よりも1小さくなる自然数の事である。
上記の完全数の定義の仕方にならえば、概完全数は、すなわちと表される自然数に他ならない。
概完全数の例としては、小さいものでは2や4などが挙げられ、現在発見されている概完全数はいずれもの形を取るという事が知られている。
で表される自然数がいずれも概完全数であることの証明
であるから
となり、概完全数の定義に当てはまることが分かる。
このような性質を持つ概完全数であるが、の形をとらないものは未だに発見されていない。
準完全数
概完全数とは自身を除く約数の和よりも1大きくなる自然数の事である。
上記の完全数の定義の仕方にならえば、準完全数は、すなわちと表される自然数に他ならない。
しかし準完全数は未だ発見されておらず、存在するとすれば奇数の平方数であり少なくとも7つの約数を持つ事が知られている。
Cプログラムによる準完全数の探索結果
以下はCプログラムを用いて10000以下の準完全数を探索するプログラムのソースコードである。
プログラム説明
以下のCプログラムは10000以下の自然数において準完全数が発見された場合には準完全数である旨を出力し、 発見されなかった場合には何も表示しない。
また探索する範囲の上限を大きくする場合は以下のソースコードの5行目の10000を大きな数値に差し替えればよい。
#include<stdio.h>
int main(void)
{
/*このプログラムを実行するとメッセージは表示されないため、
10000以下の準完全数は存在しないことが分かる。*/
for (int i = 1; i <= 10000 ; i++)
{
int sum = 0;
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
sum = sum + j;
}
}
if (sum == i + 1)
{
printf("%dは準完全数です\n", i);
}
}
return 0;
}