兄弟素数を探す

2005/4/18更新

差が2だと双子素数なら差が4とか6とかだとどうなんだろう、という事で調べてみました。兄弟素数というのは私の造語です。一般になんと呼ばれているのかは分かりません。なお、今回のプログラムでは隣接する素数同士の距離しか測っていません。例えば距離4の素数の組として3と7のように間に別の素数をはさむ物は除外しています。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main( int ac, char *av[] )
{
    unsigned long long  n, m, d;
    char buf[1024];

   /*  コマンドラインから差を決定する    */
    if( ac < 2 )
        return;
    d = strtouq( av[1], NULL, 10 );

    m = -1;
    while( fgets( buf, 1024, stdin ) ) {
        n = strtouq( buf, NULL, 10 );
        if( m != -1 && n - d == m )
            printf( "%qu %qu\n", m, n );
        m = n;
    }
}

距離を4から20まで変えて調べてみたところ、兄弟素数は以下の個数存在しました。

距離 4 6 8 10 12 14 16 18 20
個数 440257 768752 334180 430016 538382 293201 215804 384738 202922

距離が離れれば個数も減っていくと予想したのですが、意外とそうでもありませんでした。ちなみに隣接する素数同士の距離は無限に大きいものが存在しますので、どんなに距離の離れた兄弟素数も存在する事になりますが、ある距離の兄弟素数の数が無限に存在するかどうかはわかりません。距離2の場合は無限に存在するわけなんですが。

(2005/4/18追記)

双子素数で書きました通り、双子素数が無限に存在するというのは未だに証明されていないようです。ですので、距離2の兄弟素数が無限に存在するというこちらの記述も取り下げます。