第十二题:孪生素数就是指相差2的素数对。例如:3和5,5和7,11和13......输入一个正整数n,输出n以内的所有孪生素数。(此问题可以拓展一到“梅森素数”)
我们可以写出3~100以内的孪生素数,一共有8对,分别是(3,5),(5,7),(11,13),(17,19),(29,31),(41,43),(59,61),(71,73)
随着数字的增大,孪生素数的分布也会越来越稀疏,人工寻找会变得非常困难,所以我们要编写程序来解决这个问题。
这个题用“函数”处理会更方便一些,但这里我们还没有学过函数,所以我们就用更"原始"一点儿的写法吧。
#include <stdio.h>
#include <math.h>
int main()
{
int n;
int i,j,k;
int count=0,s; //s是个标志位,如果是素数,让s=1;如果不是素数,让s=0 。
printf("请输入一个正整数N:\n");
scanf("%d",&n);
for(i=2;i+2<=n;i++ )
{
s = 1; /* 先假设i是素数 */
k = sqrt(i);
for(j=2;j<=k;j++ )
{
if(i%j==0)
{
s = 0; /* 不是素数 */
break;
}
}
if(s)
{
k = sqrt( i+2 );
for(j=2;j<=k;j++)
{
if((i+2)%j == 0 )
{
s=0;/*i+2不是素数*/
break;
}
}
if(s)
{
count++; /*i+2是素数*/
printf("第%d个孪生素数[%d,%d]\n",count,i,i+2);
}
}
}
}