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