NYOJ26孪生素数问题
孪生素数问题
时间限制:3000 ms | 内存限制:65535 KB
难度:2
- 描述
- 写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
- 输入
- 第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000) - 输出
- 每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
- 样例输入
-
1 14
- 样例输出
-
4
View Code1 2 #include<stdio.h> 3 #include<string.h> 4 char str[1000001]; 5 void findprime(int n) 6 { 7 for(int i=2;i<=n;i++) 8 if(str[i]=='1') 9 { 10 for(int j=i+i;j<=n;j+=i) 11 str[j]='0'; 12 } 13 return ; 14 } 15 int countprime(int n) 16 { 17 int first=2,count=0; 18 for(int i=3;i<=n;i++) 19 { 20 if(str[i]=='1') 21 { 22 if(i-first<=2) 23 count++; 24 first=i; 25 } 26 } 27 28 return count; 29 } 30 int main() 31 { 32 int n,m; 33 scanf("%d",&n); 34 while(n--) 35 { 36 memset(str,'1',sizeof(str)); 37 scanf("%d",&m); 38 findprime(m); 39 printf("%d\n",countprime(m)); 40 } 41 return 0; 42 } 43 44 45
posted on 2012-08-23 17:03 LinuxPanda 阅读(202) 评论(0) 编辑 收藏 举报