A. Sum of Odd Integers(思维)

思路

这一题看完ans之后觉得是真简单,不过有一些地方还是要理解的。

这一题输出YES,有两个条件

  1. kk%2 == n%2k,这个条件的意思是 k与n同奇偶性, 为什么?,因为 偶数个质数相加和为偶数,奇数个数相加和为奇数,所以k为奇数个质数相加必然为 质数,所以这个时候要求 n为质数, k为偶数的时候同理。
  2. n>=k∗k=(1+(1+(k−1)∗2)∗k/2n >= k*k = (1 + (1 + (k-1)*2) * k / 2n>=k∗k=(1+(1+(k−1)∗2)∗k/2, kk 的值是最小的k个质数相加的和,当n满足这个条件之后,注意 kk 的值(k个最小的质数,参照条件1) 一定与 n 同奇偶性,那么 n - kk 的差值一定为 偶数,我们在吧这个偶数加到形成kk的k个质数中最大的那个质数上,在加完这个偶数之后和必定还是质数,这样必定还是符合题意的。

代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std; #define ll long long
const int Len = 1e6; int ar[Len]; int main()
{
/* freopen("A.txt","r",stdin); */
/* freopen("Res.txt","w",stdout); */ int t;
scanf("%d", &t);
while(t --)
{
ll n,k;
scanf("%lld %lld", &n, &k);
if(n >= k*k && k%2 == n%2) printf("YES\n");
else printf("NO\n");
} return 0;
}

B. Princesses and Princes(模拟 + 数组编号统计)

思路