PAT1007

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:



最后一个点出现段错误,尚未找出:测试数据50000后面就过不去了
# include<iostream>
# include<algorithm>
using namespace std;

void bool1(int N,bool k[])   //功能:简单的筛选 分离奇偶数
{
    int i;
    for(i=2;i<=N;i++)
     {
         if(i%2==0)
         {
             k[i]=false;
        }
        else
        {
            k[i]=true;
        }
    }
}

void bool2(int N,bool k[]) //功能:进一步筛选: 筛选出素数
{
    int i,j;
    for(i=3;i<=N;i++)
    {
        if(k[i]==true)
        {
            for(j=i*i;j<=N;j=j+2*i)
            {
                k[j]=false;
            }
        }
    }
}

int bool3(int N,bool k[],int p[])//功能:将素数按顺序存入素数数组,返回数组长度
{
    int i,h=0;
    for(i=2;i<=N;i++)
    {
        if(k[i]==true)
        {
            p[h]= i;
            h++;
        }
    }
    return h;
}

int bool4(int len,int p[])//功能:求出dn个数并返回
{
    int i,count=0;
    for(i=0;i<len-1;i++)
    {
        if(p[i+1]-p[i]==2)
        {
            count++;
        }
    }
    return count;
}
int main()
{
     int N;
     cin>>N;
     bool k[N+1];
     
     bool1(N,k);
     k[2] = true;
     
     bool2(N,k);
     
     int p[100010],len;
     len = bool3(N,k,p);
     
     int count ;
    count = bool4(len,p);
    
    cout<<count;
     return 0;
}

 





posted on 2017-01-15 20:55  qq77530202  阅读(229)  评论(0编辑  收藏  举报