孪生素数问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
-
输入
-
第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000)
输出
- 每组测试数据输出占一行,该行为m范围内所有孪生素数组数。 样例输入
-
1 14
样例输出
-
4
来源
- [hzyqazasdf]原创 上传者
思路:今天队友做这个runtime error了。。我以为只是判断素数超时,方法不好。。现在才知道,2与3是相差距离仅为1的只有这一组。然后用下面主函数里面的for循环即可。。记着……
参考博客:http://blog.csdn.net/sjf0115/article/details/8671789
#include<iostream> #include<string.h> #include<cmath> using namespace std; bool prime[1000001]; int isprime(int m) { if(prime[m]) return 1; else return 0; } int main() { int N,k,m; int i,j; memset(prime,true,sizeof(prime)); prime[0]=prime[1]=false; k=int(sqrt(1000003)); for(i=2;i<=k;i++) { if(prime[i]) {for(j=i*i;j<1000003;j+=i) prime[j]=false; } } cin>>N; while(N--) { cin>>m; int count=0; for(k=3;k<=m-2;k++) { if(isprime(k) && isprime(k+2)) count++; } if(m>=3) count++; cout<<count<<endl; } return 0; }
-
第一行给出N(0<N<100)表示测试数据组数。