题意:
判断从[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;}