双子素数を探す

2005/4/18更新

差が2である二つの素数の組を双子素数と呼ぶそうです。素数は無限に存在しますが、双子素数も無限に存在することが最近になってようやく証明されたそうです。ちなみに差が2と2である三つの素数の組を三つ子素数と呼びますが、三つ子素数は3,5,7しか存在しません。なぜなら三つ子の内のどれか一つは必ず3の倍数になり素数は3だけだからです。

(2005/4/18追記)

双子素数は無限に存在する事が証明されたという記事を見たような気がしてそう書きましたが、どうも勘違いだったようです。証明されたと言う記事をどこで見たかも思い出せませんので、この記述は取り下げます。

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

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

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

単純に考えても分かる通り、素数が密集している小さな数では双子素数もたくさんみつかるはずです。実際99999999までの間に440312個も見つかりました。

1〜99999999までの双子素数
futago1_99999999.lzh(2,360KB)