素数对猜想

来源:互联网 发布:linux网络设置 编辑:程序博客网 时间:2024/05/29 17:11

自测-2 素数对猜想(20分)

让我们定义dnd_nd​n​​为:dn=pn+1−pnd_n = p_{n+1}-p_nd​n​​=p​n+1​​−p​n​​,其中pip_ip​i​​是第iii个素数。显然有d1=1d_1 = 1d​1​​=1,且对于n>1n>1n>1有dnd_nd​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<105<10^5<10​5​​),请计算不超过N的满足猜想的素数对的个数。
输入格式:

输入在一行给出正整数N。
输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:

20

输出样例:

4

解题思路:先用Eratosthenes筛法筛选出素数,再判断两个相邻素数差是否为2

#include<iostream>#include<cstring>#include<cmath>using namespace std;const int maxn = 1e5+5;/*用Eratosthenes筛法筛选出素数*/void  prime(int *vis,int n){  int m =sqrt(n + 0.5);  memset(vis , 0, sizeof(vis));  for(int i = 2;i <= m; i++) if(!vis[i])    for(int j = i*i; j <= n; j += i)      vis[j] =1;}int main(){    int n;    cin >>n;    int vis[maxn], a[maxn];    prime(vis , n);    int j=0;    for(int i = 3;i <= n; i++)      if(!vis[i]) a[j++]=i;    int sum =0;    for(int k = 1;k < j; k++)     if(a[k] - a[k-1] == 2){        sum += 1;     }     cout << sum << endl;     return 0;}
1 0