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; }