本文要介绍一种可以筛出孪生素数的机械办法,这个办法可用于计算机程序设计而制定“孪生素数表”,目前通行的办法可以说效率都不太高。
先简单介绍一下埃拉托色尼筛法,我们举例来说明。
给定一张自然数表,譬如1~100,然后我们拿起笔来:
先删掉1,然后保留下一个数2;
然后删掉表中除了2以外的所有2倍数;
然后继续保留下一个未被上一步骤删掉的数3,而删掉表中除了3以外的所有3倍数;
然后继续保留下一下未被上一步骤删掉的数5,而删掉表中除了5以外的所有5倍数;
然后继续保留下一个未被上一步骤删掉的数7,而删掉表中除了7以外的所有7倍数;
然后继续保留下一个未被上一步骤删掉的数7,而删掉表中除了11以外的所有11倍数;但此时我们会发现,所有该删的数在之前的步骤中已经全部删除。由此我们可以确定:到此为止,所有保留下来的自然数都是素数。这样我们就得到了一张1~100的素数表。
理论上,不管多大的一张“素数表”,都可以采用上述的埃拉托色尼筛法来机械性地得到。
筛掉所有5k±1形式的数:4,6,9,11,14,16,19,21,24,26,29,31,34,36,39,41,44,46,49,51,54,56,59,61,64,66,69,71,74,76,79,81,84,86,89,91,94,96,99;
然后接着上一步筛掉所有剩余的7k±1形式的数:8,13,15,20,22,27,43,48,55,57,62,78,83,85,90,92,97;
然后接着上一步筛掉所有剩余的11k±2形式的数:35,42,53,68,75;
然后接着上一步筛掉所有剩余的13k±2形式的数:28,37,63,67,80,93;
然后接着上一步筛掉所有剩余的17k±3形式的数:65,82,88;
然后接着上一步筛掉所有剩余的19k±3形式的数:73,98;
然后接着上一步筛掉所有剩余的23k±4形式的数:已无可删之数。
结束筛法进程。
于是剩下来的数有如下25个:
1,2,3,5,7,12,17,18,23,25,30,32,33,38,40,45,47,52,58,70,72,77,87,95,100
上述的每一个数,都可以投射出一对孪生素数,所以这是一张可以间接映射到孪生素数对的数表。
投射的规则是将上述25个数分别代入(6k-1,6k 1)中的k,于是就有如下25对被投射出的孪生素数:
(5,7),(11,13),(17,19),(29,31),(41,43),(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)
为什么可以这样呢?其实原因很简单:
所有的孪生素数对除了(3,5)以外,都属于(6k-1,6k 1)形式的数对;假设m为任意自然数,此时:
当k=p(x)m±(p(x)+1)/6 (p(x)为6k-1形式的任意素数) 或 k=p(x)m±(p(x)-1)/6 (p(x)为6k+1形式的任意素数)时,6k-1与6k 1之中至少有一个数是合数。如果k的取值非上述任意一类形式的自然数,此时(6k-1,6k 1)就必然是孪生素数。
请参看关于孪生素数的文章:《一条孪生素数分布规律:相邻素数平方数区间总有2对以上孪生素数》
,