Codeforces Beta Round #17 A - Noldbach problem 暴力

A - Noldbach problem

题面链接

http://codeforces.com/contest/17/problem/A

题面

Nick is interested in prime numbers. Once he read about Goldbach problem. It states that every even integer greater than 2 can be expressed as the sum of two primes. That got Nick's attention and he decided to invent a problem of his own and call it Noldbach problem. Since Nick is interested only in prime numbers, Noldbach problem states that at least k prime numbers from 2 to n inclusively can be expressed as the sum of three integer numbers: two neighboring prime numbers and 1. For example, 19 = 7 + 11 + 1, or 13 = 5 + 7 + 1.

Two prime numbers are called neighboring if there are no other prime numbers between them.

You are to help Nick, and find out if he is right or wrong.

输入

The first line of the input contains two integers n (2 ≤ n ≤ 1000) and k (0 ≤ k ≤ 1000).

输出

Output YES if at least k prime numbers from 2 to n inclusively can be expressed as it was described above. Otherwise output NO.

题意

问你在[2,n]里面是否至少有k个质数由1+两个相邻的素数组成呢?

题解

直接暴力模拟就好了嘛

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int pri[maxn],n,k;
void pre()
{
    pri[0]=1,pri[1]=1;
    for(int i=2;i<maxn;i++){
        if(pri[i])continue;
        for(int j=i+i;j<maxn;j+=i)
            pri[j]=1;
    }
}
int main()
{
    pre();
    scanf("%d%d",&n,&k);
    int ans = 0;
    for(int i=2;i<=n;i++){
        if(pri[i])continue;
        int flag = 0;
        for(int j=2;j<i;j++){
            if(pri[j])continue;
            for(int k=j+2;k+j<=i;k++){
                if(!pri[k]&&!pri[j]&&k+j==i-1)
                    flag = 1;
                if(!pri[k])break;
            }
        }
        if(flag)ans++;
    }
    if(ans>=k)cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}
posted @ 2016-12-13 14:36  qscqesze  阅读(565)  评论(0编辑  收藏  举报