• 题解 CF17A 【Noldbach problem】


    题目要求的是一个素数与它相邻的素数之和(+1)为素数(注意这个素数要(le n)

    思路:

    • 预处理(2)~(n)的素数

    • 暴力枚举

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int p[1010],len,n,sum,k;
    bool prime(int num)//素数判断
    {
        if(num<2) return 0;
        if(num==2 or num==3) return 1;
        if(num%6!=5 and num%6!=1) return 0;
        for(int i=5;i*i<=num;i+=6)
        {
            if(num%i==0 or num%(i+2)==0)
              return 0;
        }
        return 1;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n>>k;
        for(int i=2;i<=n;i++)//预处理
        {
            if(prime(i))
              p[++len]=i;
        }
        for(int i=2;i<=len;i++)//枚举
        {
            if(prime(p[i-1]+p[i]+1) and p[i-1]+p[i]+1<=n)
                sum++; 
        }
        cout<<(sum>=k?"YES":"NO");//相当于if(sum>=k) cout<<"YES";else cout<<"NO";
        return 0;
    }
    
    

    用时:(1024ms)

    我们可以在原来的程序做一些小小的优化

    对枚举部分,我们加入一个边界条件

    (p[i-1]+p[i] le n)(p[i])为素数)

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int p[1010],len,n,sum,k;
    bool prime(int num)
    {
        if(num<2) return 0;
        if(num==2 or num==3) return 1;
        if(num%6!=5 and num%6!=1) return 0;
        for(int i=5;i*i<=num;i+=6)
        {
            if(num%i==0 or num%(i+2)==0)
              return 0;
        }
        return 1;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n>>k;
        for(int i=2;i<=n;i++)
        {
            if(prime(i))
              p[++len]=i;
        }
        for(int i=2;i<=len and p[i-1]+p[i]+1<=n;i++)//边界条件
        {
            if(prime(p[i-1]+p[i]+1))
                sum++; 
        }
        cout<<(sum>=k?"YES":"NO");
        return 0;
    }
    
    

    用时:(994ms)(emmm)才快了(30ms)

  • 相关阅读:
    sublime c/c++ 环境
    sublime编写markdownm
    第八次课程作业
    第七次课程作业
    第六次作业
    第五次课程作业
    Arithmatic项目修改总结
    第四次课程作业
    第三次课程作业
    课程作业二
  • 原文地址:https://www.cnblogs.com/WKAHPM/p/11628902.html
Copyright © 2020-2023  润新知