孪生素数问题
描述
写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
- 输入
- 第一行给出N(0<N<100)表示测试数据组数。
- 接下来组测试数据给出m,表示找出m之前的所有孪生素数。
- (0<m<1000000)
- 输出
- 每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
- 样例输入
- 1
- 14
- 样例输出
- 4
1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000001 4 5 int flag[N]; 6 7 int main(){ 8 int i; 9 int j; 10 int T; 11 int number; 12 int temp; 13 int amount; 14 15 memset(flag,0,sizeof(int)*N); 16 flag[0]=1; 17 flag[1]=1; 18 19 for(i=2;i*i<N;i++){ 20 if(flag[i]==0){ 21 for(j=i*i;j<N;j+=i){ 22 flag[j]=1; 23 } 24 } 25 } 26 27 scanf("%d",&T); 28 29 while(T--){ 30 scanf("%d",&number); 31 32 temp=2; 33 amount=0; 34 for(i=2;i<=number;i++){ 35 if(flag[i]==0){ 36 if(i-temp==1 || i-temp==2){ 37 amount++; 38 } 39 temp=i; 40 } 41 } 42 printf("%d\n",amount); 43 } 44 return 0; 45 }