您的位置:首页 > 其它

CodeForces 17 A.Noldbach problem(水~)

2017-12-23 12:33 561 查看
Description

问2~n中是否至少有k个数字可以表示成连续两个素数的和加一

Input

两个整数n,k(2≤n≤1000,0≤k≤1000)

Output

如果2~n中有k个数字可以表示成连续两个素数的和加一则输出YES,否则输出NO

Sample Input

27 2

Sample Output

YES

Solution

简单题,先把所有这种特殊的数字处理出来,令num[i]为2~i中这种数字的个数,判断num[n]是否不小于k即可

Code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=1005;
int prime[maxn],res,mark[maxn];
void get_prime(int n=1000)
{
res=0;
for(int i=2;i<=n;i++)
if(!mark[i])
{
prime[res++]=i;
for(int j=2*i;j<=n;j+=i)mark[j]=1;
}
}
int num[maxn];
int main()
{
get_prime();
for(int i=0;i<res-1;i++)
{
int temp=prime[i]+prime[i+1]+1;
if(temp<=1000&&mark[temp]==0)num[temp]++;
}
for(int i=1;i<=1000;i++)num[i]+=num[i-1];
int n,k;
while(~scanf("%d%d",&n,&k))
printf("%s\n",num
>=k?"YES":"NO");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: