双子素数

双子素数

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

(2005/4/18追記)

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

以下のプログラムは素数一覧に対して双子素数を検索するものです。

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

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

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

    return( 0 );
}

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

双子素数一覧

1000以下の双子素数は35組です。

(3 5), (5 7), (11 13), (17 19), (29 31), (41 43), (59 61), (71 73), (101 103), (107 109), (137 139), (149 151), (179 181), (191 193), (197 199), (227 229), (239 241), (269 271), (281 283), (311 313), (347 349), (419 421), (431 433), (461 463), (521 523), (569 571), (599 601), (617 619), (641 643), (659 661), (809 811), (821 823), (827 829), (857 859), (881 883)

10000以上の双子素数の組は数が多いので、別ファイルとして置いておきます。

範囲 双子素数の組の数 一覧データ
1万以下 205 twinprimelist10000.txt(2KB)
10万以下 1224 twinprimelist100000.txt(14KB)
100万以下 8169 twinprimelist1000000.txt(109KB)
1000万以下 58980 twinprimelist10000000.txt(903KB)
1億以下 440312 twinprimelist100000000.zip(2,316KB)
10億以下 3424506 twinprimelist1000000000.zip(18,313KB)
100億以下 27412679 twinprimelist10000000000.zip(148,036KB)
1000億以下 224376048 twinprimelist100000000000.zip(1,252,337KB)
1兆以下 1870585220  

(2014/10/29追記)

双子素数の組の一覧データを掲載しました。

(2014/11/2追記)

1兆以下の双子素数の組の個数を一覧データに掲載しました。一覧データは巨大で置くスペースが不足するため、今回は諦めました。ちなみに、1兆以下で最大の双子素数の組は(999999999959 99999999996)でした。


あおやぎのさいと2.0初歩の整数論プログラミング