/**
所谓孪生素数指的是间隔为2的两个相邻素数，因为它们之间的距离已经近的不能再近了，如同孪生兄弟一样，所以将这一对素数称为孪生素数。

显然，最小的一对孪生素数是（1，3）。我们可以写出3〜100以内的孪生素数，一共有8对，分别是（3，5），（5，7），（11，13），（17，19），
（29，31），（41，43），（59，61）和（71，73）。随着数字的增大，孪生素数的分布也越来越稀疏，人工寻找孪生素数变得非常困难。

本题要解决的问题是：编程求出3〜1000以内的所有孪生素数。
*/


#include <stdio.h>
#include <math.h>

int prime(int n)
{
    int j;
    long k;
    k=sqrt(n)+1;
    for(j=2; j<=k; j++)
    {
        if (n%j == 0)
        {
            return 0;  /*n能被j整除，不是素数，返回0*/
        }
    }
    return 1;  /*n是素数，返回1*/
}

int main ()
{
    int i, count=0;
    printf("The twin prime pairs between 3 and 1000 are: \n");
    for (i=3; i<1000; i++)
        if( prime(i) && prime(i+2) )
        {
            printf("(%-3d,%3d)  ", i, i+2);
            count++;
            if(count%5 == 0)  /*变量count控制每行打印的个数，每打印5对孪生素数换行*/
                printf("\n");
        }
   
    return 0;
}


//运行结果：

//The twin prime pairs between 3 and 1000 are:
//(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)  
