Acwing3792. 素数の問題

2 つの整数 n と k が与えられたとき、隣接する 2 つの素数と 1 の和で表せる素数が [2,n] の範囲に k 個以上存在するかどうかを判断してください。

たとえば、19=7+11+1 であるため、19 は条件を満たします。

入力フォーマット

最初の行には整数 T が含まれており、テスト データのセットが T 個あることを示しています。

データの各セットは、2 つの整数 n と k を含む 1 行を占めます。

出力フォーマット

データ出力の各セットは 1 行を占有し、条件を満たす素数が k 個以上ある場合は を出力し、それ YES以外の場合は を出力します NO

データ範囲

1≦T≦30、2
≦n≦1000、0
≦k≦1000

入力サンプル:

5
27 2
45 7
2 0
15 1
17 1

出力例:

YES
NO
YES
YES
YES
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;


bool prime(int x)
{
    for(int i = 2 ; i <= x / i ; i ++)//循环的设置,点睛之笔
        if(x % i == 0)
            return 0;
        return 1;
}
int num[2010] = {0};

int main()
{
    
    int last = 2;
    for (int i = 3; i <= 1000; i ++ ){
        if(prime(i) == true){
            num[last + i] = 1;
            last = i;
        }
    }
    // for (int i = 1; i <= 2010; i ++ )
    //     cout << num[i];
    int t, n, k, res;
    cin >> t;
    while (t -- ){
       res = 0;
       cin >> n >> k; 
       for (int i = 2; i <= n; i ++ ){
           if(num[i - 1] == 1 && prime(i) == 1)  res ++;
       }
       if(res >= k) cout << "YES" << endl;
       else cout << "NO" << endl;
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_52030368/article/details/129675923