孪生素数问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
-
描述
-
写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
-
输入
-
第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000)
输出
- 每组测试数据输出占一行,该行为m范围内所有孪生素数组数。 样例输入
-
1 14
样例输出
-
4
-
第一行给出N(0<N<100)表示测试数据组数。
01.
#include <stdio.h>
02.
int
a[1000000],b[1000000];
03.
int
main()
04.
{
05.
int
n;
06.
int
i,j,k,sum;
07.
scanf
(
"%d"
,&n);
08.
while
(n--)
09.
{
10.
long
c;
11.
scanf
(
"%ld"
,&c);
12.
for
(i=2;i<=c;i++)
13.
{
14.
a[i]=1; //所有的数都初始化为1
15.
}
16.
for
(i=2;i<=c;i++)
17.
{
18.
if
(a[i]==1)
19.
for
(j=i*2;j<=c;j+=i)
20.
{
21.
if
(a[j]==1) //筛掉 不是 素数 的数
22.
a[j]=0;
23.
}
24.
}
25.
for
(k=0,i=2;i<=c;i++)
26.
{
27.
if
(a[i]==1)
28.
b[k]=a[i];
k++;
29.
}
30.
sum=0;
31.
for
(i=0;i<=k+1;i++)
32.
{
33.
if
(a[i]==1&&a[i+1]==1)
34.
sum++;
35.
if
(a[i]==1&&a[i+2]==1)
36.
sum++;
37.
}
38.
39.
printf
(
"%d\n"
,sum);
40.
41.
}
42.
return
0;
43.
}