cf17A Noldbach problem(额,,,素数,,,)

题意:

判断从[2,N]中是否有超过【包括】K个数满足:等于一加两个相邻的素数。

思路:

枚举。

也可以:筛完素数,枚举素数,直到相邻素数和超过N。统计个数

代码:

int n,k;
int prime[1005];
int cn=0;


bool isPrime(int x){
    if(x==2) ret true;
    for(int i=2;i*i<=x;++i) if(x%i==0) ret false;
    ret true;
}
void sieve(){
    rep(i,2,n){
        if(isPrime(i)){
            prime[++cn]=i;
        }
    }
}
bool yes(int x){
    rep(i,2,cn){
        if(prime[i]>=x)
            break;
        if(x-prime[i]==prime[i-1]){
            ret true;
        }
    }
    ret false;
}
int main(){

    cin>>n>>k;
    sieve();
    int ans=0;
    rep(i,1,cn){
        int t=prime[i];
        --t;
        if(yes(t)){
            ++ans;
        }
    }
    if(ans>=k){
        puts("YES");
        ret 0;
    }
    puts("NO");

    return 0;
}
原文地址:https://www.cnblogs.com/fish7/p/4329905.html